我不完全确定这种行为是否可以预期,但它确实很奇怪。当你有这样的代码时:
def a_function():
if a_list != some_other_list:
print(a_list)
它工作正常,我没有问题。但是,如果将其更改为:
def a_function():
if a_list != some_other_list:
a_list = some_other_list
突然发生问题,它说第2行的a_list
是未解析的引用。为什么if语句中的内容会影响是否可以解析a_list
?这种事情是正常的吗?它可能是Python 3.6.1或PyCharm(Community Edition 2017.1.5)中的错误吗?任何有关澄清这一点的帮助将不胜感激。
答案 0 :(得分:4)
只要您只访问非函数本地的变量,只要在外部作用域的某处找到它们,一切正常。但是,只要您分配给变量,它就会变为您的函数的本地变量。 Python将不再查看变量名称的外部作用域。所以当你包括:
a_list = some_other_list
该行:
a_list != some_other_list
将失败,因为它不再在函数外部查找a_list
,如果您稍后在函数中定义它,则它是UnboundLocalError
或类似的。
如果您有兴趣,我会在另一个answer中详细了解。
如果您只是想将等级更改=
(赋值)与==
(等式检查)进行比较。
答案 1 :(得分:1)
编辑:在python中,如果在函数范围内分配变量,那么它就变成了局部变量。所以a_list
在您a_list = some_other_list
时变为本地,并且Python通过抛出未解决的参考错误来告诉您。
另外,if语句需要一个返回布尔值的表达式。
a_list = some_other_list
只需将some_other_list
设置为引用与some_other_listequal
相同的内存地址,该地址不会返回布尔值。
然而a_list == some_other_list
执行比较,返回布尔值True
或False
以指示两个变量的值相等。
答案 2 :(得分:0)
python中=
和==
之间存在很大差异。
a = b
将b的值赋给变量a。
a == b
正在将a的值与b的值进行比较。
在您的情况下,您希望使用==
来比较这两个值,如果它们是相同的值则返回True
,否则它将返回False
。