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

为什么Python自下而上运行我的代码?,python,bash,Python,Bash,假设这3个文件: 夏比 threenames.py storytime.py 我从终端使用./storytime.py运行storytime.py,它也是chmod+x,这是我得到的输出: $ ./storytime.py dead parrot sketch Susan $ 为什么结果会在运行print charNames.a之前从threenames.py执行print a、b、c 据我所知,Python是一种自上而下的编程语言,就像bash一样。那它应该先印苏珊,然后印死鹦鹉的素描吗

假设这3个文件:

夏比

threenames.py

storytime.py

我从终端使用./storytime.py运行storytime.py,它也是chmod+x,这是我得到的输出:

$ ./storytime.py 
dead parrot sketch
Susan
$ 
为什么结果会在运行print charNames.a之前从threenames.py执行print a、b、c

据我所知,Python是一种自上而下的编程语言,就像bash一样。那它应该先印苏珊,然后印死鹦鹉的素描吗


这是在OSX上运行的,使用Python2.7.5导入文件时,实际上会执行该文件。因此,当您导入三个文件名时,该文件将被执行,因此在您认为调用输出之前,您将从打印a、b、c中获得输出

您需要避免在外部模块中打印内容,而是像在charnames.a中一样在内部打印属性

您应该改为使用类似于结构的主函数:

if __name__ == '__main__':
    print a, b, c

在Python中,导入文件时会执行该文件。这就是为什么您首先看到threenames.py的输出,因为它是在导入之后立即执行的

如果您想要一种仅在主文件而不是导入文件中运行代码的方法,可以在threenames.py中使用此代码:


如果运行threenames.py,您将看到a、b和c被打印,因为它是主文件,但当它被导入时,它是模块,因此当您导入文件时,不会执行该条件中的打印函数和任何其他函数调用,该文件将被运行。这应该可以澄清了,光是三个名字就够了NOP@BrenBarn是的,我马上就明白了。非常感谢。
#!/usr/bin/env python
import charNames
import threenames

print charNames.a
threenames
$ ./storytime.py 
dead parrot sketch
Susan
$ 
if __name__ == '__main__':
    print a, b, c
if __name__ == '__main__':
    print a, b, c