每种形式的劣势
在阅读其他人的代码(这些人使用非常不同的导入样式)时,我注意到每种样式都有以下问题:
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 *通常不建议使用第二种形式,因为它只会将所有内容提取到全局名称空间中。