【问题标题】:Are there standard aliases for modules in Python?Python 中的模块有标准别名吗?
【发布时间】:2018-12-05 21:27:36
【问题描述】:

按照this post 中提出的指导方针,我正在更改所有内容

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.linalgtimescipy.iocmath 等的别名呢?你用哪个?随意给其他别名,如果还没有这样的列表,我愿意提出一个(我会更新这篇文章)。

【问题讨论】:

  • import os as o 呢?这是一种个人编码风格。没有关于那个的指导方针
  • 我从未见过import math as m。我个人永远不会使用它。单字母模块名称......在我看来不好。
  • 我觉得最有帮助的是import datetime as dt,因为模块和类都具有相同的名称。 datetime.datetime 太冗长了。
  • @juanpa.arrivillaga 是的,这似乎有点极端。然而,当有很多三角函数时,保留math 可能太长了。 math.sinmath.cos 等等。你会改用mt 吗?
  • @jeannej 我认为数学示例确实试图在“最佳实践”和个人风格之间找到界限,就像 JFF 所得到的那样。个人觉得“math”写的不会太长,但我也经常只是“from math import sin,cos”。确实这两个有共同的冲突,但在这种情况下你只需要其他好的做法——如果我使用的是 numpy 数组,我不会从数学中导入 cos,我只会从 numpy 中导入它。 IMO,如果您使用“mt”,您正在为打字速度牺牲一点可读性 - 如果我在某处看到“mt.cos”,我会有点困惑

标签: python python-3.x alias python-import standards


【解决方案1】:

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

没有规范的列表,我不建议在这里制作一个(SO 并不是真正适合该 IMO 的地方)。样式指南,包括命名约定在 PEP8 for python 中定义,导入部分是here。好的和有用的建议,但不是导入别名的枚举列表。

有很多关于命名的好规则和建议,其中一些也适用于导入的名称。 This post,例如,我认为,可以让我们了解“数学绘图库”到“mpl”的不那么令人惊讶的词源。关注PEP8 on module names 可以帮助我们完全不需要缩写词。

请注意,您已将built-in modules(“time”)与标准的第三方库(“numpy”,无处不在,但Guido declined in 2006 to add to the core 必须单独安装)和一般第三方库混合使用派对图书馆(“matplotlib”)6。您可能找到内置和极其常见的库列表(或通过教程间接找到的库),但包含第三方库的可能性似乎要小得多;我建议让包的作者决定他们的标准缩写。 Numpy 是一个库的一个很好的例子,它的作者在他们自己的教程中使用“np”并“标准化”了他们的库使用语法。

FWIW,我不喜欢将数学称为“m”(或者正如一位评论者所说,“os as o”);对于像我这样笨拙的程序员来说,单一名称的变量是灾难的秘诀......


我还会向您指出rationale for including the "as" syntax in the first place,它通过消除可能的名称冲突来证明它的合理性(如果您从scipysympy 导入cos,您可能会遇到麻烦)。使用它来缩写已经符合 PEP 命名标准的名称(开始时简短易读),即使方便,也不应该得到官方认可。

在一个有趣的例子中:heresympyscipy 都试图在短时间内使用相同的缩写,causing the exact problem we hoped to avoid(尽管scipy 现在建议不要使用首字母缩略词,@987654329 @)


脚注

  1. Google 也有风格指南; they suggest 使用 import...as “仅当 [它] 是标准缩写时(例如,np 代表 numpy)”。抱歉,他们也推迟了:)
  2. 不要吹毛求疵,但您的问题表明“我正在更改所有 ... [import statements]”(强调我的)。需要明确的是,您链接的问题是“然后选择一个或另一个,应该基于编码风格。”有时直接导入函数或类是完全明确的,imo。例如,包含“GaussianProcessRegressor”导入的sklearn tutorial 示例不需要进行任何命名空间或缩写。只有您可以知道您的应用程序,但在大多数情况下,假设该名称足够唯一是安全的
  3. 也可以使用as a versioning hack。我有时会以这种方式使用它,但我不确定这种策略是否值得推荐
  4. 有些人在对话use of the word "alias"
  5. Reddit doesn't have a list either
  6. 为了澄清来自 cmets 的问题,“第三方但标准”和“第三方”之间的界限是非常非正式的,并不意味着神圣

【讨论】:

  • import numpy as np 是 PEP 兼容短名称的缩写,但似乎很常见。
  • @MarkRansom 是的,从某种意义上说,这绝对是“标准”。我应该更改答案的某些部分以澄清这一点吗?我会认为 numpy 是一个例外(尽管肯定不是唯一的)案例,我个人不想开始将其扩展到“time”模块、“os”模块和其他符合 PEP 的模块,包括类似的 numpy-stack 系列成员像“scipy”和“sympy”。
  • 好的,添加了我认为对 numpy 的澄清
  • @jeannej 很高兴你发现它很有趣 :) 随意列一个清单(当然不要让 me 阻止你) - 我只是建议不要在 SO ,因为它对我来说似乎不是正确的地方(相关):meta.stackexchange.com/questions/158809/…)。个人博客或我链接的 reddit 帖子可能更合适,但取决于您。
  • 当我有时间的时候,我会编辑一下第三部分的内容;我的意思是,非常非正式的,不是内置的,也不像 numpy 那样规范。 “第三方”意味着不是核心 python 的一部分(如果你只是下载 python,它不附带 matplotlib,它是由其他人制作的。一些 python 发行版,如 anaconda,可能会捆绑它)。 “不可能”这句话太强烈了:)
猜你喜欢
  • 2012-05-17
  • 2010-12-26
  • 1970-01-01
  • 1970-01-01
  • 2018-07-19
  • 2021-01-07
  • 2013-04-12
  • 2016-04-25
  • 1970-01-01
相关资源
最近更新 更多