Rus*_*hal 6 python coding-style
假设我有两个Python模块:
module1.py:
import module2
def myFunct(): print "called from module1"
Run Code Online (Sandbox Code Playgroud)
module2.py:
def myFunct(): print "called from module2"
def someFunct(): print "also called from module2"
Run Code Online (Sandbox Code Playgroud)
如果我导入module1,是重新导入更好的礼仪module2,还是只是将其称为module1.module2?
例如(someotherfile.py):
import module1
module1.myFunct() # prints "called from module1"
module1.module2.myFunct() # prints "called from module2"
Run Code Online (Sandbox Code Playgroud)
我也可以这样做:module2 = module1.module2.现在,我可以直接打电话module2.myFunct().
但是,我可以module1.py改为:
from module2 import *
def myFunct(): print "called from module1"
Run Code Online (Sandbox Code Playgroud)
现在,someotherfile.py我可以这样做:
import module1
module1.myFunct() # prints "called from module1"; overrides module2
module1.someFunct() # prints "also called from module2"
Run Code Online (Sandbox Code Playgroud)
此外,通过导入*,help('module1')显示了所有的功能module2.
另一方面,(假设module1.py使用import module2),我可以这样做
someotherfile.py:
import module1, module2
module1.myFunct() # prints "called from module1"
module2.myFunct() # prints "called from module2"
Run Code Online (Sandbox Code Playgroud)
再说一遍,哪个礼仪和练习更好?要module2再次导入,还是仅仅参考module1进口?
只是import module2。重新导入的成本相对较低,因为 Python 将模块对象缓存在sys.modules中。
此外,将点链接起来module1.module2.myFunct违反了德米特法则。也许有一天您会想要替换module1为其他一些module1a不导入的模块module2。通过使用import module2,您将避免重写所有出现的module1.module2.myFunct.
from module2 import *这通常是一种不好的做法,因为它使得很难追踪变量的来源。混合模块名称空间可能会造成变量名称冲突。例如,是from numpy import *明确禁止的,因为这样做会覆盖 Python 的内置sum、min、max、any、all和abs。round