我是python中的初学者,我试图理解 from ... import ... 语句。
我惊讶地发现我们可以手动导入功能,我想问你是否合法。
我的模块:
**my_module.py**
def func1():
print 10
def func2():
print 20
我的节目:
import sys
from my_module import func1
func2() ==> ERROR!
globals()["func2"] = sys.modules["my_module"].func2
func2() ==> Printing 20!
答案 0 :(得分:3)
如果你问这一行:
globals()["func2"] = sys.modules["name"].func2
是“合法的”吗?当然。我的意思是,Python警察不会因此而逮捕你。
这是个好主意吗?不。如果您只是导入一个函数,最好按照func1
的方式进行。对于以后查看代码的人来说,更容易阅读和理解;更好地兼容静态分析工具;在未来的Python版本中不太可能破解;等
如果您正在制作一个在Python中执行某些“魔术”的模块,比如包装另一个模块的函数或其他内容,那么您可能希望使用该功能以这种方式动态导入和命名函数。但是对于一般的日常编程,请避免使用它。
答案 1 :(得分:0)
不要这样做,一些蟒蛇会在他们看到的时候咀嚼你的腿。它非常非pythonic。 import
是一个运行时语句(我的意思是,一切都是),所以没有理由使用sys.modules
版本。