python模块可以检测是否已使用import module
或from module import *
导入?像
if __something__=='something':
print 'Directly imported with "import ' + __name__ + '"'
else:
print 'Imported with "from ' + __name__ + ' import *"'
谢谢。
答案 0 :(得分:4)
不,不可能从模块的代码中检测到这一点。首次导入时,将执行模块主体,并在sys.modules
中插入新的模块对象。只有在此之后,请求的名称才会插入导入模块的命名空间中。
稍后导入时,模块主体甚至不执行。因此,如果首先将模块导入为
import module
和第二次
from module import name
在第二次导入过程中根本没有机会做任何事情。特别是,它无法检查它的导入方式。
答案 1 :(得分:0)
虽然Svens的回答可能是正确的,但这似乎有点明显,当我偶然发现这个问题时,这正是我真正想要的。
这个模块至少知道你传递了一个输入参数。虽然允许仅对此特定脚本进行单元测试,而无需在导入它的模块中执行单元测试。
import sys
def myfunction(blah):
return "something like: " + blah
noargs=len(sys.argv)
if noargs>1:
for i in range(noargs-1):
print myfunction(sys.argv[i+1])
然而,如果你没有输入参数,那对Emilio来说并没有真正帮助你。 :)