{"id":5520,"date":"2026-05-29T15:56:13","date_gmt":"2026-05-29T06:56:13","guid":{"rendered":"https:\/\/batmask.net\/?p=5520"},"modified":"2026-05-29T15:56:14","modified_gmt":"2026-05-29T06:56:14","slug":"python-closure","status":"publish","type":"post","link":"https:\/\/batmask.net\/index.php\/2026\/05\/29\/5520\/","title":{"rendered":"PYTHON : Closure"},"content":{"rendered":"\n<p> \ud568\uc218 \ub0b4\ubd80\uc5d0\uc11c \uc815\uc758\ub41c \ud568\uc218. \uc678\ubd80 \ud568\uc218\uc758 \ubcc0\uc218\uc5d0 \uc811\uadfc \uac00\ub2a5. \uc678\ubd80 \ud568\uc218\uac00 \uc2e4\ud589\uc744 \ub9c8\uccd0\uc11c \uc811\uadfc\uc774 \ubd88\uac00\ub2a5\ud574\uc9c4 \uc0c1\ud669\uc5d0\uc11c \uc774 \ub0b4\ubd80\ud568\uc218\ub97c \ud1b5\ud574 \uc811\uadfc \uac00\ub2a5.<\/p>\n\n\n\n<p>ex) closure <\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:clamp(14px, .875rem, 21px);font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 0 16px;font-size:0.8em;width:100%;text-align:left;background-color:#22272e;font-style:italic;color:#adbac7\"><span style=\"border-bottom:1px solid rgba(139, 186, 234, 0.2)\">Python<\/span><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>def outer_func(x):\n    def inner_func(y):\n        return x + y\n    return inner_func\n\nclosure_func = outer_func(10) # closure_func = innter_func with x = 10\nprint(closure_func(5))        # inner_func(5) with x = 10<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F47067\">def<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">outer_func<\/span><span style=\"color: #ADBAC7\">(x):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">def<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">inner_func<\/span><span style=\"color: #ADBAC7\">(y):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #F47067\">return<\/span><span style=\"color: #ADBAC7\"> x <\/span><span style=\"color: #F47067\">+<\/span><span style=\"color: #ADBAC7\"> y<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">return<\/span><span style=\"color: #ADBAC7\"> inner_func<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">closure_func <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> outer_func(<\/span><span style=\"color: #6CB6FF\">10<\/span><span style=\"color: #ADBAC7\">) <\/span><span style=\"color: #768390\"># closure_func = innter_func with x = 10<\/span><\/span>\n<span class=\"line\"><span style=\"color: #6CB6FF\">print<\/span><span style=\"color: #ADBAC7\">(closure_func(<\/span><span style=\"color: #6CB6FF\">5<\/span><span style=\"color: #ADBAC7\">))        <\/span><span style=\"color: #768390\"># inner_func(5) with x = 10<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\uac04\ub2e8\ud788 \ub9d0\ud558\uba74, closure\ub97c \uc774\uc6a9\ud574\uc11c (\uc678\ubd80\ud568\uc218\uc758 \ubcc0\uc218) + (\ub0b4\ubd80\ud568\uc218) \uc138\ud2b8\ub9cc \uc720\uc9c0\uac00 \uac00\ub2a5\ud558\ub2e4. \uc774\ub7f0\uac78 \uc5b4\ub514\ub2e4 \uc4f8\uae4c \uc2f6\uc740\ub370, \ub2e4\uc74c\uacfc \uac19\uc774 \ud074\ub798\uc2a4\ub85c \uad6c\ud604\ud558\uace0 \uc0ac\uc6a9\ub3c4 \uba64\ubc84\ud568\uc218\ub97c \ubd88\ub7ec\uc57c \ud558\ub294 \uacbd\uc6b0\uc5d0 \uc880 \ub354 \uac04\ud3b8\ud788 \uc0ac\uc6a9\uac00\ub2a5\ud558\ub2e4.<\/p>\n\n\n\n<p>ex) \ud2b9\uc815 \uac12\uc744 \ud56d\uc0c1 \uacf1\ud574\uc8fc\ub294 \ud568\uc218 <\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:clamp(14px, .875rem, 21px);font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 0 16px;font-size:0.8em;width:100%;text-align:left;background-color:#22272e;font-style:italic;color:#adbac7\"><span style=\"border-bottom:1px solid rgba(139, 186, 234, 0.2)\">Python<\/span><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>class Mul:\n    def __init__(self, m):\n        self.m = m\n    \n    def mul(self, n):\n        return self.m*n\n\ndef mul(m):\n    def wrapper(n):\n        return m*n\n    return wrapper    \n\nif __name__ == \"__main__\":\n    mul3 = Mul(3)\n    mul5 = Mul(5)\n    \n    print(mul3.mul(10))\n    print(mul5.mul(10))\n\n    mul4 = mul(4)\n    print(mul4(10))<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F47067\">class<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F69D50\">Mul<\/span><span style=\"color: #ADBAC7\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">def<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">__init__<\/span><span style=\"color: #ADBAC7\">(self, m):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #6CB6FF\">self<\/span><span style=\"color: #ADBAC7\">.m <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> m<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">def<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">mul<\/span><span style=\"color: #ADBAC7\">(self, n):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #F47067\">return<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">self<\/span><span style=\"color: #ADBAC7\">.m<\/span><span style=\"color: #F47067\">*<\/span><span style=\"color: #ADBAC7\">n<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">def<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">mul<\/span><span style=\"color: #ADBAC7\">(m):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">def<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">wrapper<\/span><span style=\"color: #ADBAC7\">(n):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #F47067\">return<\/span><span style=\"color: #ADBAC7\"> m<\/span><span style=\"color: #F47067\">*<\/span><span style=\"color: #ADBAC7\">n<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">return<\/span><span style=\"color: #ADBAC7\"> wrapper    <\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">if<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">__name__<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">==<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;__main__&quot;<\/span><span style=\"color: #ADBAC7\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    mul3 <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> Mul(<\/span><span style=\"color: #6CB6FF\">3<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    mul5 <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> Mul(<\/span><span style=\"color: #6CB6FF\">5<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #6CB6FF\">print<\/span><span style=\"color: #ADBAC7\">(mul3.mul(<\/span><span style=\"color: #6CB6FF\">10<\/span><span style=\"color: #ADBAC7\">))<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #6CB6FF\">print<\/span><span style=\"color: #ADBAC7\">(mul5.mul(<\/span><span style=\"color: #6CB6FF\">10<\/span><span style=\"color: #ADBAC7\">))<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    mul4 <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> mul(<\/span><span style=\"color: #6CB6FF\">4<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #6CB6FF\">print<\/span><span style=\"color: #ADBAC7\">(mul4(<\/span><span style=\"color: #6CB6FF\">10<\/span><span style=\"color: #ADBAC7\">))<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\ud2b9\uc815 \uac12\uc744 \ud56d\uc0c1 \uacf1\ud574\uc8fc\ub294 \ud568\uc218\uac00 \ud544\uc694\ud55c\ub370, \uadf8 \uac12\uc744 \ub3d9\uc801\uc73c\ub85c \uc0dd\uc131\ud574\uc57c \ud55c\ub2e4\uba74 \uc704\uc758 Mul \ud074\ub798\uc2a4\uc640 \uac19\uc774 \ud074\ub798\uc2a4 \uc0dd\uc131\uc790\ub97c \uc774\uc6a9\ud574 \uad6c\ud604\uc774 \uac00\ub2a5\ud558\ub2e4. \uadf8\ub7f0\ub370, closure\ub97c \uc0ac\uc6a9\ud558\uba74, \uc704\uc5d0\uc11c mul()\ucc98\ub7fc \ub354 \uac04\ud3b8\ud558\uac8c \uad6c\ud604\uacfc \uc0ac\uc6a9\uc774 \ub41c\ub2e4.<\/p>\n\n\n\n<p>\uc704 \uc608\ub294 \uc880 \ucd94\uc0c1\uc801\uc778, \uc2e4\uc6a9\uc801\uc778\uac00 \uc2f6\uc740 \uc608\uc81c\uc600\ub294\ub370 \uc2e4\uc81c\ub85c \uc5b4\ub514\uc5d0 \uc0ac\uc6a9\uc774 \uac00\ub2a5\ud560\uae4c? \ub300\ud45c\uc801\uc73c\ub85c \ub85c\uadf8\ub97c \ucd9c\ub825\ud558\ub294 logger\uc5d0 \uc0ac\uc6a9\uc774 \uac00\ub2a5\ud558\ub2e4. <\/p>\n\n\n\n<p>ex) \uc2e4 \uc0ac\uc6a9 \uc608 : logger<\/p>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:clamp(14px, .875rem, 21px);font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(2 * 0.6 * .875rem);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 0 16px;font-size:0.8em;width:100%;text-align:left;background-color:#22272e;font-style:italic;color:#adbac7\"><span style=\"border-bottom:1px solid rgba(139, 186, 234, 0.2)\">Python<\/span><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>from typing import Callable\nimport datetime\n\ndef logger_with_prefix(prefix: str) -> Callable[&#91;str&#93;, None]:\n\n    def log_message(message):\n        timestamp = datetime.datetime.now().strftime(\"%Y-%m-%d %H:%M:%S\")        \n        print(f\"&#91;{timestamp}&#93;&#91;{prefix}&#93;{message}\")\n    \n    return log_message\n\nif __name__ == \"__main__\":\n    logger = logger_with_prefix(\"main\")\n    logger(\"this is log message\")<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #F47067\">from<\/span><span style=\"color: #ADBAC7\"> typing <\/span><span style=\"color: #F47067\">import<\/span><span style=\"color: #ADBAC7\"> Callable<\/span><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">import<\/span><span style=\"color: #ADBAC7\"> datetime<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">def<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">logger_with_prefix<\/span><span style=\"color: #ADBAC7\">(prefix: <\/span><span style=\"color: #6CB6FF\">str<\/span><span style=\"color: #ADBAC7\">) -&gt; Callable[&#91;<\/span><span style=\"color: #6CB6FF\">str<\/span><span style=\"color: #ADBAC7\">&#93;, <\/span><span style=\"color: #6CB6FF\">None<\/span><span style=\"color: #ADBAC7\">]:<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">def<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #DCBDFB\">log_message<\/span><span style=\"color: #ADBAC7\">(message):<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        timestamp <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> datetime.datetime.now().strftime(<\/span><span style=\"color: #96D0FF\">&quot;%Y-%m-<\/span><span style=\"color: #F47067\">%d<\/span><span style=\"color: #96D0FF\"> %H:%M:%S&quot;<\/span><span style=\"color: #ADBAC7\">)        <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">        <\/span><span style=\"color: #6CB6FF\">print<\/span><span style=\"color: #ADBAC7\">(<\/span><span style=\"color: #F47067\">f<\/span><span style=\"color: #96D0FF\">&quot;&#91;<\/span><span style=\"color: #F47067\">{<\/span><span style=\"color: #ADBAC7\">timestamp<\/span><span style=\"color: #F47067\">}<\/span><span style=\"color: #96D0FF\">&#93;&#91;<\/span><span style=\"color: #F47067\">{<\/span><span style=\"color: #ADBAC7\">prefix<\/span><span style=\"color: #F47067\">}<\/span><span style=\"color: #96D0FF\">&#93;<\/span><span style=\"color: #F47067\">{<\/span><span style=\"color: #ADBAC7\">message<\/span><span style=\"color: #F47067\">}<\/span><span style=\"color: #96D0FF\">&quot;<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    <\/span><span style=\"color: #F47067\">return<\/span><span style=\"color: #ADBAC7\"> log_message<\/span><\/span>\n<span class=\"line\"><\/span>\n<span class=\"line\"><span style=\"color: #F47067\">if<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #6CB6FF\">__name__<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #F47067\">==<\/span><span style=\"color: #ADBAC7\"> <\/span><span style=\"color: #96D0FF\">&quot;__main__&quot;<\/span><span style=\"color: #ADBAC7\">:<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    logger <\/span><span style=\"color: #F47067\">=<\/span><span style=\"color: #ADBAC7\"> logger_with_prefix(<\/span><span style=\"color: #96D0FF\">&quot;main&quot;<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span>\n<span class=\"line\"><span style=\"color: #ADBAC7\">    logger(<\/span><span style=\"color: #96D0FF\">&quot;this is log message&quot;<\/span><span style=\"color: #ADBAC7\">)<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<div class=\"wp-block-kevinbatdorf-code-block-pro cbp-has-line-numbers\" data-code-block-pro-font-family=\"Code-Pro-Roboto-Mono.ttf\" style=\"font-size:clamp(14px, .875rem, 21px);font-family:Code-Pro-Roboto-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;--cbp-line-number-color:#adbac7;--cbp-line-number-width:calc(1 * 0.6 * .875rem);line-height:clamp(20px, 1.25rem, 30px);--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)\"><span style=\"display:flex;align-items:center;padding:10px 0px 0 16px;font-size:0.8em;width:100%;text-align:left;background-color:#22272e;font-style:italic;color:#adbac7\"><span style=\"border-bottom:1px solid rgba(139, 186, 234, 0.2)\">Zsh<\/span><\/span><span role=\"button\" tabindex=\"0\" style=\"color:#adbac7;display:none\" aria-label=\"Copy\" class=\"code-block-pro-copy-button\"><pre class=\"code-block-pro-copy-button-pre\" aria-hidden=\"true\"><textarea class=\"code-block-pro-copy-button-textarea\" tabindex=\"-1\" aria-hidden=\"true\" readonly>&#91;2026-05-29 15:31:45&#93;&#91;main&#93;this is log message<\/textarea><\/pre><svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" style=\"width:24px;height:24px\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" stroke-width=\"2\"><path class=\"with-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4\"><\/path><path class=\"without-check\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2\"><\/path><\/svg><\/span><pre class=\"shiki github-dark-dimmed\" style=\"background-color: #22272e\" tabindex=\"0\"><code><span class=\"line\"><span style=\"color: #ADBAC7\">&#91;<\/span><span style=\"color: #6CB6FF\">2026<\/span><span style=\"color: #ADBAC7\">-05-29 <\/span><span style=\"color: #6CB6FF\">15<\/span><span style=\"color: #ADBAC7\">:31:45&#93;&#91;main&#93;this is log message<\/span><\/span><\/code><\/pre><\/div>\n\n\n\n<p>\ub85c\uadf8\uc758 prefix\uac12\uc744 \ubbf8\ub9ac \uc0dd\uc131\ud574\ub193\uace0, \uba54\uc138\uc9c0\ub9cc \ucd9c\ub825\ud558\uba74 \uc54c\uc544\uc11c prefix\ub97c \ub354\ud574 \uc815\ud574\uc9c4 \ud3ec\ub9f7\uc73c\ub85c \ub85c\uadf8 \ucd9c\ub825\uc774 \uac00\ub2a5\ud558\ub2e4. <\/p>\n\n\n\n<p>\uc790\uc8fc \uc0ac\uc6a9\ud560\uae4c? \uc544\uc9c1\uc740 \uc798 \ubaa8\ub974\uaca0\ub2e4\ub9cc, \ucd5c\uc18c\ud55c \ud30c\uc774\uc36c \ucf54\ub4dc\uc5d0\uc11c closure\ub85c \uad6c\ud604\ub41c\uac78 \uc77d\uc5b4\ub0b4\ub294\ub370 \ubb38\uc81c\ub294 \uc5c6\uc744 \uac83\uc774\ub2e4.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\ud568\uc218 \ub0b4\ubd80\uc5d0\uc11c \uc815\uc758\ub41c \ud568\uc218. \uc678\ubd80 \ud568\uc218\uc758 \ubcc0\uc218\uc5d0 \uc811\uadfc \uac00\ub2a5. \uc678\ubd80 \ud568\uc218\uac00 \uc2e4\ud589\uc744 \ub9c8\uccd0\uc11c \uc811\uadfc\uc774 \ubd88\uac00\ub2a5\ud574\uc9c4 \uc0c1\ud669\uc5d0\uc11c \uc774 \ub0b4\ubd80\ud568\uc218\ub97c \ud1b5\ud574 \uc811\uadfc \uac00\ub2a5. ex) closure \uac04\ub2e8\ud788 \ub9d0\ud558\uba74, closure\ub97c \uc774\uc6a9\ud574\uc11c (\uc678\ubd80\ud568\uc218\uc758 \ubcc0\uc218) + (\ub0b4\ubd80\ud568\uc218) \uc138\ud2b8\ub9cc \uc720\uc9c0\uac00 \uac00\ub2a5\ud558\ub2e4. \uc774\ub7f0\uac78 \uc5b4\ub514\ub2e4 \uc4f8\uae4c \uc2f6\uc740\ub370, \ub2e4\uc74c\uacfc \uac19\uc774 \ud074\ub798\uc2a4\ub85c \uad6c\ud604\ud558\uace0 \uc0ac\uc6a9\ub3c4 \uba64\ubc84\ud568\uc218\ub97c \ubd88\ub7ec\uc57c \ud558\ub294 \uacbd\uc6b0\uc5d0 \uc880 \ub354 \uac04\ud3b8\ud788 <a href=\"https:\/\/batmask.net\/index.php\/2026\/05\/29\/5520\/\" class=\"btn btn-link continue-link\">\ub354 \uc77d\uae30<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[33],"tags":[649,35,543,55],"class_list":["post-5520","post","type-post","status-publish","format-standard","hentry","category-python","tag-closure","tag-python","tag-543","tag-python-kr"],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/posts\/5520","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/comments?post=5520"}],"version-history":[{"count":12,"href":"https:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/posts\/5520\/revisions"}],"predecessor-version":[{"id":5532,"href":"https:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/posts\/5520\/revisions\/5532"}],"wp:attachment":[{"href":"https:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/media?parent=5520"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/categories?post=5520"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/batmask.net\/index.php\/wp-json\/wp\/v2\/tags?post=5520"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}