每种形式的劣势
在阅读其他人的代码(这些人使用非常不同的导入样式)时,我注意到每种样式都有以下问题:
import modulewithaverylongname
使用长模块名(例如concurrent.futures
或django.contrib.auth.backends
)会使代码更混乱,并降低这些位置的可读性。
from module import *
让我没有机会看到这句法,例如,classA
与classB
来自同一模块,并有大量的工作要做对方。这使得很难阅读代码。(这种导入的名称可能掩盖了较早导入的名称,这是该问题的最小部分。)
from module import classA, classB, functionC, constantD, functionE
我的短期记忆超载了太多的名字,这些名字我在思想上需要分配给它们module
,以便一致地理解代码。
import modulewithaverylongname as mwvln
有时对我来说不够记忆。
适当的折衷
基于以上观察,我在自己的代码中开发了以下样式:
import module
如果模块名称较短(例如标准库中的大多数软件包),则是首选样式。如果我只需要在自己的模块中的两个或三个位置使用模块中的名称,则它也是首选的样式。清晰度则胜过简洁(“可读性很重要”)。
import longername as ln
是几乎所有其他情况下的首选样式。例如,我可能import django.contrib.auth.backends as djcab
。通过上面的标准1的定义,该缩写将被频繁使用,因此足够容易记住。
按照“显式优于隐式”的说法,只有这两种样式是完全Python的
。规则。
from module import xx
有时仍会在我的代码中发生。我使用它的时候甚至是as
格式都被夸大了,最著名的例子是from datetime import datetime
(但是如果我需要更多元素,我会import datetime as dt
)。
import pandas
而且from pandas import DataFrame
都还可以。from pandas import *
通常不建议使用第二种形式,因为它只会将所有内容提取到全局名称空间中。