在python

时间:2017-01-04 01:27:39

标签: python function python-import

我有以下脚本:

第一个是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个问题。

  1. 为什么输错了
  2. 当我使用global x print(x) x += 1 globx = x而不是3时,为什么会有4个输出?

2 个答案:

答案 0 :(得分:2)

为什么输出错误?

导入test1时首次运行,首次执行test并将其分配给x,打印1并递增x }。

然后您在test内再次执行test2 3次,但未更新x,因此test会将globx设为x,打印x并更新globx,但保持x不变(卡在2上)。

为什么有4个输出?

您将z设为3,然后计为0z = 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,但更改不会保存。