使用Python导入打高尔夫球


16

什么时候在Python中使用内联单次使用导入有益?

例如:

__import__("x").doSomething()

以上是否比以下短?

import x
x.doSomething()

要么

from x import*
doSomething()

Answers:


11

如果您要在匿名lambda函数中仅使用一次模块,这将很有用,因为它可以避免编写单独的语句:

lambda x:__import__('SomeModule').foo(x,123)

比1个字节短

from SomeModule import*;f=lambda x:foo(x,123)

如果代码是命名函数或程序,那么__import__除非在最极端或人为的情况下,否则不太可能有帮助。


__import__将有助于在命名函数内部,因为它位于缩进块内部。导入需要花费额外的时间,因为它需要两行并缩进。(这是假设该函数外部不允许导入。)
Alex A.

@AlexA我认为将导入放置在命名函数之外没有问题。
feersum

那么会有时间在import缩进块中调用吗?可能不会。
Alex A.

在仅编写一个函数的情况下,将导入放置在命名函数之外将无法解决挑战。
Sparr

6
第二个示例不需要,f=因为允许使用匿名函数,并且匿名函数中可以包含内容
xnor

4

导入名称足够长的多个模块时,将__import__函数分配给较短的变量并将其用于导入会很有帮助

例:

常规导入语句-97个字节

从itertools import *
从日期时间导入*
打印列表(排列(“ abc”))
打印datetime.now()

分配__import__i-94个字节:

我= __进口__
打印列表(i(“ itertools”)。permutations(“ abc”))
打印i(“ datetime”)。datetime.now()

1

几乎从不。

__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。


1
你能检查一下数学吗?我发现__import__("x").doSomething()比短了一个字符from x import*;doSomething()。也许您将换行符视为两个字符?我记得盈亏平衡点是5,介于time和之间random
xnor

@xnor我没有两次计算换行符,但是我想念您在那个版本中不需要点。请稍等,我会更新。
L3viathan

1
z=__import__("x").yfrom x import y as z
7

1
@negativeseven简称:from x import*;z=y
L3viathan
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.