【发布时间】:2021-10-16 04:50:08
【问题描述】:
我已经阅读了关于这个主题的类似问题,例如来自here、here 和here,以及其他范围内的问题,但我仍然不明白为什么答案不能解释这些测试用例。
首先看到这个:
def take_sum(a, b, c):
return a+b+c
def main():
print("take_sum" in globals())
print(take_sum(1,2,3))
main()
返回:
True
6
那么这必须有效:
# TEST 1
def take_sum(a, b, c):
return a+b+c
def main():
if "take_sum" not in globals():
take_sum = lambda a, b, c: a+b+c
print(take_sum)
main()
错了!
返回:UnboundLocalError: local variable 'take_sum' referenced before assignment
问题1:如果take_sum存在于全局范围内且main中的if语句评估为False,如何在赋值前引用它?
所以让我们在 if 语句中添加一个 else 子句:
# TEST 2
def take_sum(a, b, c):
return a+b+c
def main():
if "take_sum" not in globals():
take_sum = lambda a, b, c: a+b+c
else:
global take_sum
print(take_sum)
main()
返回:SyntaxError: name 'take_sum' is assigned to before global declaration
问题 2:但是如果 TEST 1 中的错误显示 take_sum 被引用但未分配,这怎么可能?
随后,切换 if 语句中的子句即可:
# TEST 3
def take_sum(a, b, c):
return a+b+c
def main():
if "take_sum" in globals():
global take_sum
elif "take_sum" not in globals():
take_sum = lambda a, b, c: a+b+c
print(take_sum)
print(take_sum(1,2,3))
main()
返回:
<function take_sum at 0x7fbf8b5bb160>
6
问题 3:为什么切换子句(与 TEST 2 相比)有效?
【问题讨论】:
标签: python-3.x globals