Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 模块名称中的前导下划线_Python_Module - Fatal编程技术网

Python 模块名称中的前导下划线

Python 模块名称中的前导下划线,python,module,Python,Module,此代码: import matplotlib.pyplot as plt fig, axes = plt.subplots(12,2, figsize = (12,40), squeeze=False) print(type(axes[0,0])) 提供以下输出: <class 'matplotlib.axes._subplots.AxesSubplot'> 为什么模块名“\u子图”中有一个前导下划线 这不是以下问题的重复,因为我的问题仅涉及模块命名,而不是其他情况。 这是因

此代码:

import matplotlib.pyplot as plt
fig, axes = plt.subplots(12,2, figsize = (12,40), squeeze=False)
print(type(axes[0,0]))
提供以下输出:

<class 'matplotlib.axes._subplots.AxesSubplot'>

为什么模块名“\u子图”中有一个前导下划线

这不是以下问题的重复,因为我的问题仅涉及模块命名,而不是其他情况。
这是因为编写matplotlib的人用下划线命名了它


不仅仅是matplotlib有这个属性,这实际上意味着受保护属性。

这是因为编写matplotlib的人用下划线命名了它


不仅仅是matplotlib有这个属性,这实际上意味着受保护的属性。

因为
\u子地块是轴的受保护属性。“uu”表示受保护的属性,“uuu”表示私有属性。您可以阅读有关Python中受保护/私有属性的更多信息:

,因为
\u子图是Axis的受保护属性。“uu”表示受保护的属性,“uuu”表示私有属性。您可以阅读有关Python中受保护/私有属性的更多信息:

作为一般规则,如果遵循
PEP8
标准,则任何名称前面的一个下划线表示实体不是官方API,而是在内部使用的。尽管如此,它仍然是可见的,Python将其视为任何其他类/变量/模块,所以如果您完全知道自己在做什么,请随意使用它

双下划线的意思是“隐藏”某些内容(使其具有某种私密性)。Python将以不同的方式处理这个问题,并使用名称混乱,因此无法立即访问。类
Bar
中的属性名
\uuuufoo
将无法在
Bar.\uufoo
中访问,因为python将在运行时将其重命名为
Bar.\ubar\ufoo

编辑


具体而言,对于模块,其用途相同。单个“u”表示模块中的所有类/函数/常量仅供“弱”内部使用。这并不意味着你永远不应该使用它们,但它意味着你知道/理解软件包的内部工作原理。

作为一般规则,如果你遵循
PEP8
标准,任何名称前面的一个下划线表示实体不是官方API,而是在内部使用。尽管如此,它仍然是可见的,Python将其视为任何其他类/变量/模块,所以如果您完全知道自己在做什么,请随意使用它

双下划线的意思是“隐藏”某些内容(使其具有某种私密性)。Python将以不同的方式处理这个问题,并使用名称混乱,因此无法立即访问。类
Bar
中的属性名
\uuuufoo
将无法在
Bar.\uufoo
中访问,因为python将在运行时将其重命名为
Bar.\ubar\ufoo

编辑


具体而言,对于模块,其用途相同。单个“u”表示模块中的所有类/函数/常量仅供“弱”内部使用。这并不意味着你永远不应该使用它们,但它意味着你对软件包的内部工作原理有知识/理解。

不是真的。这意味着。单下划线在Python中表示受保护的属性。不完全是。这意味着。单下划线在Python中表示受保护的属性。可能的重复不是重复,因为我的问题只涉及模块命名,而不是其他情况。可能的重复不是重复,因为我的问题只涉及模块命名,而不是其他情况。您的回答有误导性,因为没有受保护的东西以及Python中的私有属性。这是一种命名约定,表示除非您完全知道自己在做什么,否则不应从外部调整此模块。双下划线表示如果触摸它肯定会破坏代码。单下划线表示受保护的属性,但Python允许在对象之外使用它,但PEP8警告您它是受保护的属性,您不应该使用它,但它是允许的。souble下划线表示私有属性,不能在对象外部使用它们(这些属性在对象外部不可见)。另一方面,我同意Python比其他OOP语言处理受保护/私有属性。。。请查看我答案中的链接,您可以获得有关Python保护和私有属性的更多详细信息。“您不应该使用它,但它是允许的”。你刚刚证明了我的观点。Python对以“\ux”开头的名称绝对没有什么特别之处,它只是PEP8强制执行的一种约定,表示类/属性/模块仅用于内部使用,可能不应在包外使用。我完全同意您的观点!我想我们说的是同一件事。正如我所提到的,单下划线在Python中是有意义的,但它对代码没有功能性影响。:)是的,我明白了,你明白了:)只是来自Java,例如,你的答案可能有点误导,因为语言对受保护实体和私有实体的处理不同。你的答案是误导的,因为Python中没有受保护和私有属性。这是一种命名约定,表示除非您完全知道自己在做什么,否则不应从外部调整此模块。双下划线表示如果触摸它肯定会破坏代码。单下划线表示受保护的属性,但Python允许在对象之外使用它,但PEP8警告您它是受保护的属性,您不应该使用它,但它是允许的。souble下划线表示私有属性,不能在对象外部使用它们(这些属性在对象外部不可见)。另一方面,我同意Python比其他OOP语言处理受保护/私有属性。。。请查看我答案中的链接,您可以获得有关Python保护和私有属性的更多详细信息