<p>我有以下代码,但不起作用:</p>
<pre><code>class Node:
n = 5
options = [ i / (n-1) for i in range(n)]
print("Success")
</code></pre>
<p>我得到的错误是:</p>
<pre><code> Traceback (most recent call last):
File "/Users/ikkamens/Library/Preferences/PyCharm2019.2/scratches/counters.py", line 1, in <module>
class Node:
File "/Users/ikkamens/Library/Preferences/PyCharm2019.2/scratches/counters.py", line 3, in Node
options = [ i / (n-1) for i in range(n)]
File "/Users/ikkamens/Library/Preferences/PyCharm2019.2/scratches/counters.py", line 3, in <listcomp>
options = [ i / (n-1) for i in range(n)]
NameError: name 'n' is not defined
</code></pre>
<p>但是,以下更改的版本仍然有效:</p>
<pre><code>class Node:
n = 5
options = [ i / 4 for i in range(n)]
print("Success")
</code></pre>
<p>为什么我可以在<code>range</code>表达式中使用类级别变量,而不能在<code>(n-1)</code>表达式中使用?这是一个解释器错误还是有一些规则来解释这种行为?我试过使用3.8和3.6口译员</p>
<p>我不知道为什么它不能以这种方式工作,但可能是口译员认为
<code>(n-1)</code>
在列表中是属于列表中的局部变量或循环的一部分。尽管我不确定</p>
<p>你可以这样做</p>
<pre><code>class Node:
global n
n = 5
options = [ i / (n-1) for i in range(n)]
print("Success")
</code></pre>