一个Python模块能否检测到它是通过import module
还是from module import *
被导入的?类似这样的:
if __something__=='something':
print 'Directly imported with "import ' + __name__ + '"'
else:
print 'Imported with "from ' + __name__ + ' import *"'
谢谢你。
一个Python模块能否检测到它是通过import module
还是from module import *
被导入的?类似这样的:
if __something__=='something':
print 'Directly imported with "import ' + __name__ + '"'
else:
print 'Imported with "from ' + __name__ + ' import *"'
不,无法在模块代码中检测到这个。在第一次导入时,模块主体被执行并插入新的模块对象到sys.modules
中。只有在此之后,请求的名称才会插入到导入模块的命名空间中。
在以后的导入中,模块主体甚至不会被执行。因此,如果一个模块首次被导入为
import module
并且第二次作为
from module import name
在第二次导入过程中,it没有任何机会做任何事情。特别是,它无法检查它的导入方式。
虽然Sven的答案可能是正确的,这似乎有点显而易见,但当我偶然发现这个问题时,这正是我真正想要的。
该模块至少会知道您向其传递了一个输入参数。这样可以对特定脚本进行单元测试,而不必在导入它的模块中执行单元测试。
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。:)