Answers:
如果您要在匿名lambda函数中仅使用一次模块,这将很有用,因为它可以避免编写单独的语句:
lambda x:__import__('SomeModule').foo(x,123)
比1个字节短
from SomeModule import*;f=lambda x:foo(x,123)
如果代码是命名函数或程序,那么__import__
除非在最极端或人为的情况下,否则不太可能有帮助。
import
缩进块中调用吗?可能不会。
__import__("x").doSomething()
需要15个以上x个字符来引用长度为x的模块。
import x\nx.doSomething()
需要9 + 2 * x个字符。这些函数在x = 6 处重叠,因此,与这种方式相比,使用更长的名称的任何模块最好使用__import__
,而任何更短的模块都可以从常规导入中受益:
但是,from x import*\ndoSomething()
仅需要14+ x个字符,因此与常规导入相比,不值得这样做,除非模块名称超过5个字符:
所有这些都假定您仅引用一次函数/类/任何东西。如果您多次引用它,则公式会更改,并且后者可能会成为赢家。如果您多次使用某个导入模块中的长内容,则可以使用另一个版本:
from x import y as z
可以让您获得18+ x + y + z *(n +1)个字符,可以使用n次z,如果y大,这是一个很大的改进,因为可以将z设为1。
__import__("x").doSomething()
比短了一个字符from x import*;doSomething()
。也许您将换行符视为两个字符?我记得盈亏平衡点是5,介于time
和之间random
。
z=__import__("x").y
比from x import y as z
from x import*;z=y
。
__import__
将有助于在命名函数内部,因为它位于缩进块内部。导入需要花费额外的时间,因为它需要两行并缩进。(这是假设该函数外部不允许导入。)