PEP 08指出:
导入总是放在文件的顶部,就在任何模块注释和文档字符串之后,以及模块全局变量和常量之前.
但是,如果我导入的类/方法/功能仅在极少数情况下使用,那么在需要时进行导入肯定会更有效率吗?
不是这个:
class SomeClass(object):
def not_often_called(self)
from datetime import datetime
self.datetime = datetime.now()
Run Code Online (Sandbox Code Playgroud)
比这更有效率?
from datetime import datetime
class SomeClass(object):
def not_often_called(self)
self.datetime = datetime.now()
Run Code Online (Sandbox Code Playgroud) 在速度和内存效率方面,在函数内导入Python模块和/或函数的优缺点是什么?
是否每次运行该函数时重新导入,或者可能只在开始时重新导入一次,无论函数是否运行?
我创建了一个名为的模块util,它提供了我经常在Python中使用的类和函数.其中一些需要导入功能.在类/函数定义中导入所需内容的优点和缺点是什么?它比import模块文件的开头更好吗?这是个好主意吗?
我怀疑我想要清理.
考虑以下名为的模块ex_1.py:
print("Hello, I'm ex_1")
def greet(name):
print("Hello, "+name+" nice to meet you! ")
Run Code Online (Sandbox Code Playgroud)
现在考虑调用另一个1_client_ex_1.py将导入ex_1.py模块的文件.
import ex_1.py
Run Code Online (Sandbox Code Playgroud)
现在,当我执行此文件时,我得到的输出为:
Hello, I'm ex_1
Run Code Online (Sandbox Code Playgroud)
正如所料.
但是当我1_client_ex_1.py改为:
import ex_1.py
import ex_1.py
Run Code Online (Sandbox Code Playgroud)
并执行它,它仍然只打印Hello, I'm ex_1一次.不应该打印两次吗?
该PEP 8建议模块在节目开始进口.
现在,我觉得在主程序开始时(即之后if __name__ == '__main__')导入其中一些是有道理的.例如,如果主程序从命令行读取参数,我倾向于import sys在主程序的开头执行:这样,sys当代码用作模块时不必导入,因为没有必要,在这种情况下,用于命令行参数访问.
这对PEP 8的侵权有多严重?我应该避免这样做吗?或者修改PEP 8是否合理?
假设我正在构建一个用于一般用途的类:我可能需要在任何地方导入它,在其他几个文件中使用它等等。导入应该在类之前进行,如:
import foo
class Bar():
def __init__(self):
foo.spam()
Run Code Online (Sandbox Code Playgroud)
或者在__init__方法内部,如:
class Bar():
def __init__(self):
import foo
foo.spam()
Run Code Online (Sandbox Code Playgroud)
+ 将foo引入全局命名空间以供自始至终使用Bar
- 导入(@MartijnPieters等人)Bar还需要您手动导入foo
+ 避免foo在您真正需要之前加载
+foo在Bar实例化导入(和使用)时加载(@BrenBarn)
-foo其他地方不可用
我创建了一个包含多个小型用户定义函数的模块。其中许多函数需要不同的库函数。现在,我想知道什么是更好的做法 - 导入模块中的所有库,还是导入函数内的库?在性能方面有什么区别吗?
from math import exp
from numpy import mean,random
def logit(x):
return exp(x)/(1+exp(x))
def sample_mean(mu,sigma,size):
return mean(random.normal(mu,sigma,size))
Run Code Online (Sandbox Code Playgroud)
或者
def logit(x):
from math import exp
return exp(x)/(1+exp(x))
def sample_mean(mu,sigma,size):
from numpy import mean,random
return mean(random.normal(mu,sigma,size))
Run Code Online (Sandbox Code Playgroud)
这只是一个示例代码来解释我的困境。不要告诉我有现成的函数可以代替这些用户定义的函数。我已经知道了
可能重复:
Python中的好或坏做法:在文件中间导入
我已经习惯了Java这样的语言,它要求所有import语句都出现在类/文件的顶部.
哪个被认为是更加pythonic /"美丽" - 将它们全部放在顶部,或根据需要,因为它们是需要的?
所以我正在用Python编写一个小程序.这不是非常苛刻,而且是为了好玩,所以不一定需要针对速度或资源或其中任何一个进行优化而且我远非专业人士,所以如果这是一个荒谬的问题抱歉,但我很好奇:
我定义的几个小功能(如5号线),将需要的库导入(urllib,xml.etree,等).是否有理由在函数之外执行它们,比如在代码的开头,而不是作为函数的第一行?我认为在函数中使用它会使将来更容易有效地窃取这些函数,但我也认为这有点慢.这里有任何硬性规定或经验法则吗?如果没有,有没有人有任何意见?
python ×9
import ×4
function ×2
module ×2
class ×1
coding-style ×1
optimization ×1
pep ×1
pep8 ×1
python-3.x ×1