为什么Python运行我的代码自下而上?

时间:2014-03-08 08:14:58

标签: python bash

假设这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

2 个答案:

答案 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