在Python中导入模块-最佳实践

2024-05-09 20:00:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Python新手,因为我想扩展使用R学到的技能。 在R中,我倾向于加载一堆库,有时会导致函数名冲突。

Python中的最佳实践是什么。我看到一些具体的变化,我看不出有什么区别

import pandasfrom pandas import *from pandas import DataFrame

前两个有什么不同,我应该只是导入我需要的东西。 另外,对于那些制作小程序来处理数据和计算简单统计数据的人来说,最糟糕的后果是什么。

更新

我找到这个excellent guide。它解释了一切。


Tags: 数据函数fromimport程序dataframepandas技能
3条回答

一般来说,最好进行显式导入。 如所示:

import pandas
frame = pandas.DataFrame()

或:

from pandas import DataFrame
frame = DataFrame()

Python中的另一个选项是import x as y(当名称冲突时):

from pandas import DataFrame as PDataFrame
from bears import DataFrame as BDataFrame
frame1 = PDataFrame()
frame2 = BDataFrame()

import pandas导入pandas命名空间下的pandas模块,因此需要使用pandas.foo调用pandas中的对象。

from pandas import *将pandas模块中的所有对象导入到当前命名空间中,因此您只需使用foo调用pandas中的对象。请记住,如果当前名称空间和pandas名称空间之间存在任何命名冲突,则这可能会产生未预料到的后果。

from pandas import DataFrame与上述相同,但仅将DataFrame(而不是所有内容)导入到当前命名空间中。

在我看来,第一种方法通常是最佳实践,因为它将不同的模块很好地划分在代码中。

每种形式的缺点

当阅读别人的代码时 不同的导入样式),我注意到以下问题 每种款式:

import modulewithaverylongname将使代码更加混乱 使用长模块名(例如concurrent.futuresdjango.contrib.auth.backends)并降低这些地方的可读性。

from module import *让我没有机会从语法上看到, 例如,classAclassB来自同一个模块,并且 彼此有很多关系。 这使得阅读代码变得困难。 (从这种进口中命名 以前导入的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

相关问题 更多 >