假设这3个文件:
charNames.py
a = 'Susan'
b = 'Charlie'
c = 'Jiji'
threenames.py
a = 'dead'
b = 'parrot'
c = 'sketch'
print a,b,c
storytime.py
#!/usr/bin/env python
import charNames
import threenames
print charNames.a
threenames
我使用终端中的storytime.py
运行./storytime.py
(也是chmod + x),这是我得到的输出:
$ ./storytime.py
dead parrot sketch
Susan
$
为什么结果在运行print a,b,c
之前从 threenames.py 执行print charNames.a
?
根据我的理解,Python是一种自上而下的编程语言,比如bash。那么它应该首先打印“苏珊”,然后打印“死鹦鹉草图”吗?
这是在OSX上运行的,使用Python 2.7.5
答案 0 :(得分:4)
在Python中导入文件时,它会被执行。这就是为什么你首先看到 threenames.py 的输出,因为它是在导入后立即执行的。
如果您想要一种只在文件中运行代码的方法(如果它是主文件而不是导入),您可以在 threenames.py 中使用此代码:
if __name__ == '__main__':
print a, b, c
如果你运行 threenames.py ,你会看到a,b和c打印,因为它是主文件,但是当它被导入时,它是模块,所以打印功能和任何其中有条件的其他函数调用将不会被执行
答案 1 :(得分:3)
当您import
文件时,该文件实际执行。因此,当您import threenames
执行该文件时,您可以在认为之前从其中获取输出(print a,b,c
),并从中调用输出。
您需要避免在外部模块中打印出来,而是像charnames.a
一样打印属性。
您应该使用类似main()
函数的结构:
if __name__ == '__main__':
print a, b, c