【发布时间】:2019-11-16 07:12:54
【问题描述】:
这个包含 3 个脚本的最小示例最好地说明了手头的问题:
foo.py
global_val = [0]
bar.py
from foo import global_val
def work(val=global_val[0])
print("global_val: ", global_val[0])
print("val: ", val)
main.py
from bar import work
import foo
if __name__ == '__main__':
foo.global_val[0] = 1
work()
我期望的输出是:
global_val: 1
val: 1
实际输出:
global_val: 1
val: 0
我不明白为什么bar.py 中val 的默认参数不是1。我很困惑,因为我在调用work() 之前明确更新了global_val,但由于某种原因,旧值仍用作默认函数参数。
当global_val 被导入bar.py 时,默认参数似乎是预先计算的。 Python代码不应该在运行时动态编译吗?
如果有帮助,我正在使用 Python 3.6。
【问题讨论】:
标签: python