Python中是否有标准模块别名?

11

根据此贴文所提出的指南,我正在更改所有的

from module import function
function(agt)

作者:

import module as mdl
mdl.function(agt)

在我的代码中,我试图使用通用的别名而不是个人专属的。在互联网上是否有一份列出所有常用别名的清单?

例如,以下这些看起来相当普遍:

import numpy as np
import math as m
import matplotlib.pyplot as plt

那么 scipy.linalg, time, scipy.io, cmath 等的别名呢?你会使用哪个?如果没有这样的列表,请随意提供其他别名,我愿意提出一个(我会更新这篇帖子)。


1
那么import os as o怎么样?这是个人编码风格。关于这方面没有明确的指导方针。 - Jean-François Fabre
2
我从未见过 import math as m。个人而言,我永远不会使用它。在我看来,单字母模块名称并不好。 - juanpa.arrivillaga
2
我认为最有用的是 import datetime as dt,因为模块和类都具有相同的名称。datetime.datetime 太冗长了。 - Mark Ransom
@juanpa.arrivillaga 是的,那似乎有点极端了。但是当有很多三角函数时,保留 math 可能会太长了。例如 math.sinmath.cos 等等。你会使用 mt 吗? - jeannej
1
@jeannej 我认为这个数学例子真正想要找到的是“最佳实践”和个人风格之间的平衡,就像JFF所说的那样。就我个人而言,我不认为“math”写起来太长了,但我经常只是“from math import sin, cos”。确实,这两个函数有共同的冲突,但在这种情况下,你只需要其他好的做法 - 如果我正在使用numpy数组,我不会从math中导入cos,我只会从numpy中导入它。在我看来,如果你使用“mt”,你会牺牲一点可读性来换取打字速度 - 如果我在某个地方看到“mt.cos”,我会有点困惑。 - en_Knight
1个回答

15

不,没有完整的模块首字母缩写列表。

没有官方列表,我不建议在这里创建一个(在我看来,SO并不是那个地方)。Python的PEP8定义了样式指南,包括命名约定,导入部分在这里。提供了很好和有用的建议,但没有罗列出导入别名的列表。

有许多关于命名的好规则和建议,其中一些也适用于导入的名称。例如这篇文章,可以让我们不那么惊讶地知道“Math Plotting Library”的词源是“mpl”。遵循PEP8关于模块名称的规范,可以帮助我们根本不需要首字母缩写。

请注意,你混淆了内置模块(“time”)和标准但第三方库(“numpy”,它是无处不在的但Guido于2006年拒绝将其添加到核心中必须单独安装),以及一般的第三方库(“matplotlib”)6。你可能会找到内置和极为常见的库列表(或通过教程间接找到),但包含第三方库似乎不太可能;我建议让软件包的作者决定它们的标准缩写。Numpy是一个很好的例子,他们的作者在自己的教程中使用“np”并且已经“标准化”了他们的库使用语法。

FWIW,我不喜欢把数学称为“m”(或者像某个评论者建议的那样,“os as o”);对于像我这样的笨拙程序员来说,单名变量是灾难的前兆...


我还要指向首先包含“as”语法的理由, 它通过消除可能的名称冲突来证明其合理性(如果您从scipysympy导入cos,您可能会遇到麻烦)。即使方便,使用它来缩写已经符合PEP命名标准的名称(短且易读),也不应该得到正式认可。
在一个有趣的例子中:这里, sympyscipy曾尝试使用相同的缩写一段时间,导致我们希望避免的确切问题(尽管scipy现在建议根本不使用缩写,显然

脚注

  1. Google也有一份风格指南;他们建议仅在“是标准缩写(例如np代表numpy)时使用import...as”。很抱歉,他们也推迟了:)
  2. 不是挑剔,但你的问题陈述中写道“我正在改变所有...[导入语句]”(强调我)。要明确的是,你链接的问题说“选择一个还是另一个应该基于编码风格而不是其他因素。”在我看来,有时直接导入函数或类是完全清晰明了的。例如,sklearn教程示例包括对“GaussianProcessRegressor”的导入,不需要任何命名空间或缩写。只有你能够了解你的应用程序,但在大多数情况下,可以安全地假设该名称足够唯一。
  3. 这也可以用作为版本控制的技巧。我有时会这样使用它,但我不确定这种策略有多少推荐价值。
  4. 有些人在谈论使用“别名”这个词的谈话技巧
  5. Reddit也没有列表
  6. 澄清评论中的问题,"第三方但是标准"和"第三方"之间的界限非常不正式,不是神圣不可侵犯的。

import numpy as np 缩写了一个符合 PEP 的短名称,但似乎仍然很常见。 - Mark Ransom
@MarkRansom 是的,某种意义上那个确实是“标准”的。我是否应该更改答案的某些部分以澄清这一点?我认为numpy是一个特殊的(虽然肯定不是唯一的)情况,我个人不想开始将其扩展到“time”模块,“os”模块和其他符合PEP的模块,包括类似numpy-stack家族成员如“scipy”和“sympy”。 - en_Knight
好的,我认为在numpy方面添加了澄清。 - en_Knight
@en_Knight 感谢您的回答,我已经仔细阅读了它,觉得非常有趣。我理解“编码风格”的论点,但我仍然希望社区中有一个列表。PEP 8链接非常有趣,我不知道标准库和相关的第三方导入应该分开以增加清晰度。您提到的“第三层库”是什么?与“第三方库”有何不同? - jeannej
1
@jeannej 很高兴你觉得它有趣 :) 随意列出清单(当然不要让我阻止你)- 我只建议不要在SO上列出,因为对我来说似乎不是合适的地方(相关):https://meta.stackexchange.com/questions/158809/why-are-shopping-list-questions-bad)。个人博客或我链接的那篇Reddit帖子可能更合适,但由你决定。 - en_Knight
1
当我有时间时,我会编辑第三层事情的清晰度;我只是指非正式地,不是内置的,也不像numpy一样经典。 "第三方"意味着不是核心Python的一部分(如果您只下载Python,则不会附带matplotlib,这是由其他人制作的。某些Python发行版,如anaconda,可能会捆绑它)。短语“不可能”太强了 :) - en_Knight

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接