手动导入功能

时间:2014-11-19 16:49:44

标签: python

我是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!

2 个答案:

答案 0 :(得分:3)

如果你问这一行:

globals()["func2"] = sys.modules["name"].func2

是“合法的”吗?当然。我的意思是,Python警察不会因此而逮捕你。

这是个好主意吗?不。如果您只是导入一个函数,最好按照func1的方式进行。对于以后查看代码的人来说,更容易阅读和理解;更好地兼容静态分析工具;在未来的Python版本中不太可能破解;等

如果您正在制作一个在Python中执行某些“魔术”的模块,比如包装另一个模块的函数或其他内容,那么您可能希望使用该功能以这种方式动态导入和命名函数。但是对于一般的日常编程,请避免使用它。

答案 1 :(得分:0)

不要这样做,一些蟒蛇会在他们看到的时候咀嚼你的腿。它非常非pythonic。 import是一个运行时语句(我的意思是,一切都是),所以没有理由使用sys.modules版本。