{"id":31725,"date":"2024-11-01T09:02:10","date_gmt":"2024-11-01T09:02:10","guid":{"rendered":"http:\/\/atmokpo.com\/w\/?p=31725"},"modified":"2024-11-01T12:31:11","modified_gmt":"2024-11-01T12:31:11","slug":"05%ec%9e%a5-adding-wings-to-python","status":"publish","type":"post","link":"https:\/\/atmokpo.com\/w\/31725\/","title":{"rendered":"05: Adding Wings to Python"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Introduction<\/h2>\n\n\n\n<p>This chapter covers advanced topics that go beyond the basics of Python usage, aiming to maximize productivity and write more efficient code. The code developed through this chapter will be more robust, scalable, and easier to maintain.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1. Context Managers<\/h2>\n\n\n\n<p>Context managers are a Python feature that automates resource allocation and release in scenarios such as file opening, database connections, and using locks. They enhance code readability and reduce the likelihood of bugs.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1.1 Basic Usage of Context Managers<\/h3>\n\n\n\n<p>The most common example of a context manager in Python is opening a file using the <code>with<\/code> statement.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>with open('example.txt', 'r') as file:\n    data = file.read()\n    # The file is automatically closed when the block ends.<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">1.2 Custom Context Managers<\/h3>\n\n\n\n<p>To implement a context manager, you just need to define a class with <code>__enter__<\/code> and <code>__exit__<\/code> methods.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class CustomContext:\n    def __enter__(self):\n        # Resource allocation or setup\n        print(\"Resource allocated\")\n        return self\n    \n    def __exit__(self, exc_type, exc_val, exc_tb):\n        # Resource release\n        print(\"Resource released\")\n\nwith CustomContext() as context:\n    print(\"Inside the block\")<\/code><\/pre>\n\n\n\n<p>This example manages resources by recognizing the start and end of a block.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">2. Generators<\/h2>\n\n\n\n<p>Generators are a simplified version of iterators and can save memory when processing large datasets. Generators yield one value at a time and wait until the next value is needed. This property allows generators to efficiently handle large datasets.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2.1 Generator Functions<\/h3>\n\n\n\n<p>Generator functions are defined like regular functions but use <code>yield<\/code> instead of <code>return<\/code> to provide values.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>def simple_generator():\n    yield 1\n    yield 2\n    yield 3<\/code><\/pre>\n\n\n\n<p>The above function creates a generator object that returns 1, 2, and 3 sequentially each time it is called.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2.2 Infinite Generators<\/h3>\n\n\n\n<p>Generators can easily create infinite loops, making them useful for processes that repeat periodically.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>def infinite_sequence():\n    num = 0\n    while True:\n        yield num\n        num += 1<\/code><\/pre>\n\n\n\n<p>This function returns an increasing number starting from 0 indefinitely until stopped.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">3. Decorators<\/h2>\n\n\n\n<p>Decorators are powerful tools that dynamically alter or extend the behavior of functions or methods. They greatly enhance code reusability and are primarily used for logging, access control, and metrics.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3.1 Definition and Use of Decorators<\/h3>\n\n\n\n<p>Decorators can wrap another function to add specific logic or modify the input and output of an existing function.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>def my_decorator(func):\n    def wrapper():\n        print(\"Before function call\")\n        func()\n        print(\"After function call\")\n    return wrapper\n\n@my_decorator\ndef say_hello():\n    print(\"Hello!\")\n\nsay_hello()<\/code><\/pre>\n\n\n\n<p>In this example, the functionality added by the decorator runs when the <code>say_hello<\/code> function is called.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3.2 Combining Multiple Decorators<\/h3>\n\n\n\n<p>Multiple decorators can be applied to a single function, and their behavior can vary based on the order of the decorators.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>def decorator_one(func):\n    def wrapper():\n        print(\"Decorator 1 applied\")\n        func()\n    return wrapper\n\ndef decorator_two(func):\n    def wrapper():\n        print(\"Decorator 2 applied\")\n        func()\n    return wrapper\n\n@decorator_two\n@decorator_one\ndef display():\n    print(\"Display function\")\n\ndisplay()<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">4. Parallelism and Multithreading<\/h2>\n\n\n\n<p>To improve program performance, you can use parallelism or multithreading. This allows the code to utilize multiple CPU cores to perform tasks simultaneously.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">4.1 Multithreading<\/h3>\n\n\n\n<p>Multithreading is useful in cases where there are many I\/O bound tasks. You can create threads using Python&#8217;s <code>threading<\/code> module.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import threading\nimport time\n\ndef thread_function(name):\n    print(f\"Thread {name} started\")\n    time.sleep(2)\n    print(f\"Thread {name} ended\")\n\nthreads = []\nfor i in range(3):\n    thread = threading.Thread(target=thread_function, args=(i,))\n    threads.append(thread)\n    thread.start()\n\nfor thread in threads:\n    thread.join()<\/code><\/pre>\n\n\n\n<p>This code creates three threads, each performing a task for 2 seconds.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">4.2 Multiprocessing<\/h3>\n\n\n\n<p>For CPU bound tasks, the <code>multiprocessing<\/code> module is more efficient. It creates processes to fully utilize CPU cores.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from multiprocessing import Process\n\ndef process_function(name):\n    print(f\"Process {name} started\")\n    time.sleep(2)\n    print(f\"Process {name} ended\")\n\nprocesses = []\nfor i in range(3):\n    process = Process(target=process_function, args=(i,))\n    processes.append(process)\n    process.start()\n\nfor process in processes:\n    process.join()<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">5. Advanced Exception Handling<\/h2>\n\n\n\n<p>Exception handling is essential for enhancing the reliability of programs. In this section, we will explore advanced exception handling techniques.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">5.1 Creating Custom Exceptions<\/h3>\n\n\n\n<p>You can create custom exceptions to explicitly express exceptions that may occur in specific situations.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>class CustomError(Exception):\n    pass\n\ntry:\n    raise CustomError(\"This is a custom exception\")\nexcept CustomError as e:\n    print(e)<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">5.2 Exception Chaining<\/h3>\n\n\n\n<p>One exception may be the result of another exception. In Python, you can create exception chains using the <code>raise ... from ...<\/code> syntax.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>try:\n    raise ValueError(\"First exception\")\nexcept ValueError as ve:\n    raise KeyError(\"Second exception\") from ve<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">6. Conclusion<\/h2>\n\n\n\n<p>This chapter has delved deeper into Python&#8217;s advanced features. By leveraging these techniques, you can write more robust and scalable code. In the next chapter, we will explore how to use Python for data analysis.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introduction This chapter covers advanced topics that go beyond the basics of Python usage, aiming to maximize productivity and write more efficient code. The code developed through this chapter will be more robust, scalable, and easier to maintain. 1. Context Managers Context managers are a Python feature that automates resource allocation and release in scenarios &hellip; <a href=\"https:\/\/atmokpo.com\/w\/31725\/\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;05: Adding Wings to Python&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[98],"tags":[95],"class_list":["post-31725","post","type-post","status-publish","format-standard","hentry","category--en","tag--en"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>05: Adding Wings to Python - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/atmokpo.com\/w\/31725\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"05: Adding Wings to Python - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"og:description\" content=\"Introduction This chapter covers advanced topics that go beyond the basics of Python usage, aiming to maximize productivity and write more efficient code. The code developed through this chapter will be more robust, scalable, and easier to maintain. 1. Context Managers Context managers are a Python feature that automates resource allocation and release in scenarios &hellip; \ub354 \ubcf4\uae30 &quot;05: Adding Wings to Python&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/atmokpo.com\/w\/31725\/\" \/>\n<meta property=\"og:site_name\" content=\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\" \/>\n<meta property=\"article:published_time\" content=\"2024-11-01T09:02:10+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-11-01T12:31:11+00:00\" \/>\n<meta name=\"author\" content=\"root\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@bebubo4\" \/>\n<meta name=\"twitter:site\" content=\"@bebubo4\" \/>\n<meta name=\"twitter:label1\" content=\"\uae00\uc4f4\uc774\" \/>\n\t<meta name=\"twitter:data1\" content=\"root\" \/>\n\t<meta name=\"twitter:label2\" content=\"\uc608\uc0c1 \ub418\ub294 \ud310\ub3c5 \uc2dc\uac04\" \/>\n\t<meta name=\"twitter:data2\" content=\"4\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/atmokpo.com\/w\/31725\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/31725\/\"},\"author\":{\"name\":\"root\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\"},\"headline\":\"05: Adding Wings to Python\",\"datePublished\":\"2024-11-01T09:02:10+00:00\",\"dateModified\":\"2024-11-01T12:31:11+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/atmokpo.com\/w\/31725\/\"},\"wordCount\":499,\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"keywords\":[\"\ud30c\uc774\uc36c\uac15\uc88c\"],\"articleSection\":[\"Python Study\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/atmokpo.com\/w\/31725\/\",\"url\":\"https:\/\/atmokpo.com\/w\/31725\/\",\"name\":\"05: Adding Wings to Python - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"isPartOf\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#website\"},\"datePublished\":\"2024-11-01T09:02:10+00:00\",\"dateModified\":\"2024-11-01T12:31:11+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/atmokpo.com\/w\/31725\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/atmokpo.com\/w\/31725\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/atmokpo.com\/w\/31725\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\ud648\",\"item\":\"https:\/\/atmokpo.com\/w\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"05: Adding Wings to Python\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/atmokpo.com\/w\/#website\",\"url\":\"https:\/\/atmokpo.com\/w\/\",\"name\":\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/atmokpo.com\/w\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ko-KR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/atmokpo.com\/w\/#organization\",\"name\":\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\",\"url\":\"https:\/\/atmokpo.com\/w\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png\",\"contentUrl\":\"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png\",\"width\":400,\"height\":400,\"caption\":\"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8\"},\"image\":{\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/x.com\/bebubo4\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7\",\"name\":\"root\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\/\/atmokpo.com\/w\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g\",\"caption\":\"root\"},\"sameAs\":[\"http:\/\/atmokpo.com\/w\"],\"url\":\"https:\/\/atmokpo.com\/w\/author\/root\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"05: Adding Wings to Python - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/atmokpo.com\/w\/31725\/","og_locale":"ko_KR","og_type":"article","og_title":"05: Adding Wings to Python - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","og_description":"Introduction This chapter covers advanced topics that go beyond the basics of Python usage, aiming to maximize productivity and write more efficient code. The code developed through this chapter will be more robust, scalable, and easier to maintain. 1. Context Managers Context managers are a Python feature that automates resource allocation and release in scenarios &hellip; \ub354 \ubcf4\uae30 \"05: Adding Wings to Python\"","og_url":"https:\/\/atmokpo.com\/w\/31725\/","og_site_name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","article_published_time":"2024-11-01T09:02:10+00:00","article_modified_time":"2024-11-01T12:31:11+00:00","author":"root","twitter_card":"summary_large_image","twitter_creator":"@bebubo4","twitter_site":"@bebubo4","twitter_misc":{"\uae00\uc4f4\uc774":"root","\uc608\uc0c1 \ub418\ub294 \ud310\ub3c5 \uc2dc\uac04":"4\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/atmokpo.com\/w\/31725\/#article","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/31725\/"},"author":{"name":"root","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7"},"headline":"05: Adding Wings to Python","datePublished":"2024-11-01T09:02:10+00:00","dateModified":"2024-11-01T12:31:11+00:00","mainEntityOfPage":{"@id":"https:\/\/atmokpo.com\/w\/31725\/"},"wordCount":499,"publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"keywords":["\ud30c\uc774\uc36c\uac15\uc88c"],"articleSection":["Python Study"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/atmokpo.com\/w\/31725\/","url":"https:\/\/atmokpo.com\/w\/31725\/","name":"05: Adding Wings to Python - \ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","isPartOf":{"@id":"https:\/\/atmokpo.com\/w\/#website"},"datePublished":"2024-11-01T09:02:10+00:00","dateModified":"2024-11-01T12:31:11+00:00","breadcrumb":{"@id":"https:\/\/atmokpo.com\/w\/31725\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/atmokpo.com\/w\/31725\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/atmokpo.com\/w\/31725\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\ud648","item":"https:\/\/atmokpo.com\/w\/en\/"},{"@type":"ListItem","position":2,"name":"05: Adding Wings to Python"}]},{"@type":"WebSite","@id":"https:\/\/atmokpo.com\/w\/#website","url":"https:\/\/atmokpo.com\/w\/","name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","description":"","publisher":{"@id":"https:\/\/atmokpo.com\/w\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/atmokpo.com\/w\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ko-KR"},{"@type":"Organization","@id":"https:\/\/atmokpo.com\/w\/#organization","name":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8","url":"https:\/\/atmokpo.com\/w\/","logo":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/","url":"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png","contentUrl":"https:\/\/atmokpo.com\/w\/wp-content\/uploads\/2024\/11\/logo.png","width":400,"height":400,"caption":"\ub77c\uc774\ube0c\uc2a4\ub9c8\ud2b8"},"image":{"@id":"https:\/\/atmokpo.com\/w\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/bebubo4"]},{"@type":"Person","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/91b6b3b138fbba0efb4ae64b1abd81d7","name":"root","image":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/atmokpo.com\/w\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/708197b41fc6435a7ce22d951b25d4a47e9e904270cb1f04682d4f025066f80c?s=96&d=mm&r=g","caption":"root"},"sameAs":["http:\/\/atmokpo.com\/w"],"url":"https:\/\/atmokpo.com\/w\/author\/root\/"}]}},"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/31725","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/comments?post=31725"}],"version-history":[{"count":2,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/31725\/revisions"}],"predecessor-version":[{"id":38059,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/posts\/31725\/revisions\/38059"}],"wp:attachment":[{"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/media?parent=31725"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/categories?post=31725"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/atmokpo.com\/w\/wp-json\/wp\/v2\/tags?post=31725"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}