我是Python新手,因为我想扩展使用R学到的技能。
在R中,我倾向于加载一堆库,有时会导致函数名冲突。
Python中的最佳实践是什么。我看到一些具体的变化,我看不出有什么区别
import pandas
、from pandas import *
和from pandas import DataFrame
前两个有什么不同,我应该只是导入我需要的东西。
另外,对于那些制作小程序来处理数据和计算简单统计数据的人来说,最糟糕的后果是什么。
更新
我找到这个excellent guide。它解释了一切。
Tags:
一般来说,最好进行显式导入。 如所示:
或:
Python中的另一个选项是import x as y(当名称冲突时):
import pandas
导入pandas命名空间下的pandas模块,因此需要使用pandas.foo
调用pandas中的对象。from pandas import *
将pandas模块中的所有对象导入到当前命名空间中,因此您只需使用foo
调用pandas中的对象。请记住,如果当前名称空间和pandas名称空间之间存在任何命名冲突,则这可能会产生未预料到的后果。from pandas import DataFrame
与上述相同,但仅将DataFrame
(而不是所有内容)导入到当前命名空间中。在我看来,第一种方法通常是最佳实践,因为它将不同的模块很好地划分在代码中。
每种形式的缺点
当阅读别人的代码时 不同的导入样式),我注意到以下问题 每种款式:
import modulewithaverylongname
将使代码更加混乱 使用长模块名(例如concurrent.futures
或django.contrib.auth.backends
)并降低这些地方的可读性。from module import *
让我没有机会从语法上看到, 例如,classA
和classB
来自同一个模块,并且 彼此有很多关系。 这使得阅读代码变得困难。 (从这种进口中命名 以前导入的may shadow名称是该问题的最小部分。)from module import classA, classB, functionC, constantD, functionE
用太多的名字重载我的短期记忆 我在精神上需要分配给module
以便 连贯地理解代码。import modulewithaverylongname as mwvln
有时不够充分 记忆到me。适当的妥协
基于以上的观察,我开发了以下 我自己的代码中的样式:
import module
如果模块名较短,则为首选样式 例如,标准库中的大多数包。 如果需要使用中模块的名称,它也是首选样式 在我自己的模块里只有两三个地方; 那么,清晰胜过简洁("Readability counts")。import longername as ln
是几乎所有 另一个案子。 例如,我可以import django.contrib.auth.backends as dj_abe
。 根据上述标准1的定义,将使用缩写 经常,因此很容易记住。只有这两种风格是完全的Python根据 "Explicit is better than implicit."规则。
from module import xx
在我的代码中有时仍会出现。 我把它用在那些连as
格式都被夸大的情况下, 最著名的例子是from datetime import datetime
。相关问题 更多 >
编程相关推荐