【发布时间】:2018-07-04 11:05:18
【问题描述】:
情况:我们知道下面会检查脚本是否被直接调用。
if __name__ == '__main__':
print "Called directly"
else:
print "Imported by other python files"
问题:else 子句只是一个通用子句,只要不直接调用脚本就会运行。
问:如果不直接调用,有什么办法可以得到导入到哪个文件?
附加信息:下面是我设想的代码示例,只是我不知道在<something> 中输入什么。
if __name__ == '__main__':
print "Called directly"
elif <something> == "fileA.py":
print "Called from fileA.py"
elif <something> == "fileB.py":
print "Called from fileB.py"
else:
print "Called from other files"
【问题讨论】:
-
调用文件名需要什么?
-
我不确定您是否真的想这样做。有一个依赖原则,依赖的东西不应该知道或关心依赖它的东西。在 Python 中,像许多语言一样,可以有许多其他模块导入此模块。因此,您的
<something>实际上将包含不同的东西在快速的继承中。 -
@mrCarnivore 我可能需要代码来运行不同的东西,这取决于调用它的文件。
-
@TimothyWong 你不想这样做。通常,函数或模块不会根据调用它的内容而改变其行为。尝试传递由函数或模块处理的参数。
-
对使用全局变量的常见警告是因为它们破坏了模块内的模块化。如果没有全局变量,您只需要分别了解每个函数,但使用全局变量,您需要了解所有函数如何通过全局变量“泄漏”相互影响。但是你提出的更糟糕的是:它破坏了整个程序的模块化,所以你不能简单地单独理解每个模块,你需要看看它们是如何相互影响的。因此,您甚至不必费心创建单独的模块,只需将其编写成一大堆难以阅读的意大利面条代码即可。 ;)
标签: python python-import filereference