aboutsummaryrefslogtreecommitdiffhomepage
path: root/public/posts/2021-10-02/python-unbound-local-error/index.html
diff options
context:
space:
mode:
Diffstat (limited to 'public/posts/2021-10-02/python-unbound-local-error/index.html')
-rw-r--r--public/posts/2021-10-02/python-unbound-local-error/index.html50
1 files changed, 25 insertions, 25 deletions
diff --git a/public/posts/2021-10-02/python-unbound-local-error/index.html b/public/posts/2021-10-02/python-unbound-local-error/index.html
index 8093c8e..62a5c86 100644
--- a/public/posts/2021-10-02/python-unbound-local-error/index.html
+++ b/public/posts/2021-10-02/python-unbound-local-error/index.html
@@ -56,14 +56,14 @@
</li>
</ol>
</section>
- <p>
- この記事は Qiita から移植してきたものです。 元 URL: <a href="https://qiita.com/nsfisis/items/5d733703afcb35bbf399">https://qiita.com/nsfisis/items/5d733703afcb35bbf399</a>
- </p>
-
- <p>
- <hr>
- </hr>
- </p>
+ <div class="admonition">
+ <div class="admonition-label">
+ NOTE
+ </div>
+ <div class="admonition-content">
+ この記事は Qiita から移植してきたものです。 元 URL: <a href="https://qiita.com/nsfisis/items/5d733703afcb35bbf399">https://qiita.com/nsfisis/items/5d733703afcb35bbf399</a>
+ </div>
+ </div>
<p>
本記事は Python 3.7.6 の動作結果を元にして書かれている。
@@ -74,10 +74,10 @@
</p>
<pre class="highlight" language="python" linenumbering="unnumbered"><code class="highlight"><span class="hljs-keyword">def</span> <span class="hljs-title function_">f</span>():
-x = <span class="hljs-number">0</span>
-<span class="hljs-keyword">def</span> <span class="hljs-title function_">g</span>():
-x += <span class="hljs-number">1</span>
-g()
+ x = <span class="hljs-number">0</span>
+ <span class="hljs-keyword">def</span> <span class="hljs-title function_">g</span>():
+ x += <span class="hljs-number">1</span>
+ g()
f()</code></pre>
@@ -97,25 +97,25 @@ f()</code></pre>
<pre class="highlight" language="python" linenumbering="unnumbered"><code class="highlight"><span class="hljs-comment"># 注: var は正しい Python の文法ではない。上記参照のこと</span>
<span class="hljs-keyword">def</span> <span class="hljs-title function_">f</span>():
-var x <span class="hljs-comment"># f の local変数 &#x27;x&#x27; を宣言</span>
-x = <span class="hljs-number">0</span> <span class="hljs-comment"># x に 0 を代入</span>
-<span class="hljs-keyword">def</span> <span class="hljs-title function_">g</span>(): <span class="hljs-comment"># f の内部関数 g を定義</span>
-var x <span class="hljs-comment"># g の local変数 &#x27;x&#x27; を宣言</span>
-<span class="hljs-comment"># たまたま f にも同じ名前の変数があるが、それとは別の変数</span>
-x += <span class="hljs-number">1</span> <span class="hljs-comment"># x に 1 を加算 (x = x + 1 の糖衣構文)</span>
-<span class="hljs-comment"># 加算する前の値を参照しようとするが、まだ代入されていないためエラー</span>
-g()</code></pre>
+ var x <span class="hljs-comment"># f の local変数 &#x27;x&#x27; を宣言</span>
+ x = <span class="hljs-number">0</span> <span class="hljs-comment"># x に 0 を代入</span>
+ <span class="hljs-keyword">def</span> <span class="hljs-title function_">g</span>(): <span class="hljs-comment"># f の内部関数 g を定義</span>
+ var x <span class="hljs-comment"># g の local変数 &#x27;x&#x27; を宣言</span>
+ <span class="hljs-comment"># たまたま f にも同じ名前の変数があるが、それとは別の変数</span>
+ x += <span class="hljs-number">1</span> <span class="hljs-comment"># x に 1 を加算 (x = x + 1 の糖衣構文)</span>
+ <span class="hljs-comment"># 加算する前の値を参照しようとするが、まだ代入されていないためエラー</span>
+ g()</code></pre>
<p>
当初の意図を表現するには、次のように書けばよい。
</p>
<pre class="highlight" language="python" linenumbering="unnumbered"><code class="highlight"><span class="hljs-keyword">def</span> <span class="hljs-title function_">f</span>():
-x = <span class="hljs-number">0</span>
-<span class="hljs-keyword">def</span> <span class="hljs-title function_">g</span>():
-<span class="hljs-keyword">nonlocal</span> x <span class="hljs-comment">## (*)</span>
-x += <span class="hljs-number">1</span>
-g()</code></pre>
+ x = <span class="hljs-number">0</span>
+ <span class="hljs-keyword">def</span> <span class="hljs-title function_">g</span>():
+ <span class="hljs-keyword">nonlocal</span> x <span class="hljs-comment">## (*)</span>
+ x += <span class="hljs-number">1</span>
+ g()</code></pre>
<p>
<code>(*)</code> のように、<code>nonlocal</code> を追加する。これにより一つ外側のスコープ (<code>g</code> の一つ外側 = <code>f</code>) で定義されている <code>x</code> を探しに行くようになる。