我试图找到关于最好使用 import module
还是 from module import
的综合指南。我刚开始使用 Python,我正试图从最佳实践入手。
基本上,我希望是否有人可以分享他们的经验、其他开发人员有哪些偏好以及避免任何 陷阱 的最佳方法是什么?
原文由 Filip Dupanović 发布,翻译遵循 CC BY-SA 4.0 许可协议
我试图找到关于最好使用 import module
还是 from module import
的综合指南。我刚开始使用 Python,我正试图从最佳实践入手。
基本上,我希望是否有人可以分享他们的经验、其他开发人员有哪些偏好以及避免任何 陷阱 的最佳方法是什么?
原文由 Filip Dupanović 发布,翻译遵循 CC BY-SA 4.0 许可协议
这里还有另一个细节,没有提到,与写入模块有关。当然这可能不是很常见,但我不时需要它。
由于引用和名称绑定在 Python 中的工作方式,如果您想从该模块外部更新模块中的某些符号,比如 foo.bar,并让其他导入代码“看到”该更改,您必须导入 foo a某种方式。例如:
模块富:
bar = "apples"
模块一:
import foo
foo.bar = "oranges" # update bar inside foo module object
模块b:
import foo
print foo.bar # if executed after a's "foo.bar" assignment, will print "oranges"
但是,如果您导入符号名称而不是模块名称,这将不起作用。
例如,如果我在模块 a 中这样做:
from foo import bar
bar = "oranges"
No code outside of a
will see bar
as “oranges” because my setting of bar
merely affected the name “bar” inside module a
,它没有“进入” foo
模块对象并更新其 bar
。
原文由 Michael Ray Lovett 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答5.2k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
4 回答1.5k 阅读✓ 已解决
3 回答1.4k 阅读✓ 已解决
3 回答1.3k 阅读✓ 已解决
2 回答915 阅读✓ 已解决
1 回答1.8k 阅读✓ 已解决
import module
和from module import foo
之间的区别主要是主观的。选择您最喜欢的一个,并在使用中保持一致。这里有一些要点可以帮助您做出决定。import module
import
语句的维护。不需要添加任何额外的导入即可开始使用模块中的另一个项目module.foo
可能是乏味和冗余的(可以通过使用import module as mo
然后键入mo.foo
19a– 来减少乏味)from module import foo
foo
import
声明foo
的上下文。例如,不太清楚ceil()
与math.ceil()
相比两种方法都可以接受,但 不要 使用
from module import *
。对于任何合理的大型代码集,如果您
import *
您可能会将其固定到模块中,无法删除。这是因为很难确定代码中使用的哪些项目来自“模块”,因此很容易达到您认为您不再使用import
的地步,但它非常很难确定。