我有以下脚本:
第一个是test1.py
x = 1
def test():
globx = x
print(globx)
globx += 1
return globx
x = test()
,第二个是test2.py
import test1
z=3
while z != 0:
if __name__=='__main__':
test1.test()
z -= 1
else:
pass
我使用这些来学习和使用其他脚本调用函数,我想要的是输出:
1
2
3
但我明白了:
1
2
2
2
当我更换
globx = x
print(globx)
globx += 1
return globx
x = test()
<{1>}中的
test1.py
我确实得到了预期的结果,但显然你不应该使用全局变量,所以这是我想要打破的习惯。
我有2个问题。
global x
print(x)
x += 1
版globx = x
而不是3时,为什么会有4个输出? 答案 0 :(得分:2)
为什么输出错误?
导入test1
时首次运行,首次执行test
并将其分配给x
,打印1
并递增x
}。
然后您在test
内再次执行test2
3次,但未更新x
,因此test
会将globx
设为x
,打印x
并更新globx
,但保持x
不变(卡在2
上)。
为什么有4个输出?
您将z
设为3
,然后计为0
。 z = 3, 2, 1, 0 OVER!
。因此,您执行z = 1..3
,导致3次 + 加载时在test1
内部执行的时间。
如何解决?
在test1.py
:
对所有操作使用全局x
。不要运行test
:
x = 1
def test():
global x
print(x)
x += 1
在test2.py
:
使用range
迭代3次。如果模块由另一个模块运行,则else: pass
将触发无限循环:
import test1
if __name__ == '__main__':
for _ in range(3):
test1.test()
答案 1 :(得分:0)
当您import test1
时,将执行整个脚本。第一次调用函数test()
。它打印1并将x
更改为2.然后在循环中调用test1.test()
三次。 globx
是一个局部变量。它打印三次(2
)并更改三次到3,但更改不会保存。