Python Imports Convention

Lud*_*udo 3 python

我注意到在Python代码中,通常首选显式导入所需模块的部分,例如

from django.core.urlresolvers import reverse
from django.db import models
Run Code Online (Sandbox Code Playgroud)

但是,我注意到这似乎不是Python标准库模块的情况,我通常会看到,例如:

import os
import sys

something = os.path.join('home', 'ludo')
other = sys.argv('dunno')
Run Code Online (Sandbox Code Playgroud)

代替

from os.path import join
from sys import argv

something = join('home', 'ludo')
other = argv('dunno')
Run Code Online (Sandbox Code Playgroud)

对此有任何推理或记录的约定吗?

Tim*_*Tim 7

关于这个主题,圣洁风格指南相当松散:

从包含类的模块导入类时,通常可以拼写:

from myclass import MyClass
from foo.bar.yourclass import YourClass
Run Code Online (Sandbox Code Playgroud)

如果此拼写导致本地名称冲突,则拼写它们

import myclass
import foo.bar.yourclass
Run Code Online (Sandbox Code Playgroud)

并使用"myclass.MyClass"和"foo.bar.yourclass.YourClass".

对此没有任何"规则",只是如上所述的一些指示.如果您没有受到名字冲突的阻碍,您可以自由地按照自己的意愿行事.

但是,正如链接中所提到的,您应该记住这一点

应避免使用通配符导入(来自import*),因为它们不清楚命名空间中存在哪些名称,使读者和许多自动化工具混淆.