这种“强调”似乎经常发生,我想知道这是否是Python语言中的要求,还是仅仅是一个约定问题?
另外,有人可以说出并解释哪些函数倾向于带有下划线,以及为什么(__init__例如)?
__init__
从Python PEP 8-Python代码样式指南:
[描述性:命名样式](https://www.python.org/dev/peps/pep-0008/#descriptive-naming- styles) 可以识别以下使用前划线或后划线的特殊形式(通常可以将它们与任何大小写惯例结合使用): _single_leading_underscore:“内部使用”指示器较弱。例如from M import *,不导入名称以下划线开头的对象。 single_trailing_underscore_:按惯例用于避免与Python关键字发生冲突,例如 Tkinter.Toplevel(master, class_='ClassName') * __double_leading_underscore:在命名类属性时,调用名称修饰(在类FooBar内部,__boo变为_FooBar__boo;见下文)。 * __double_leading_and_trailing_underscore__:位于用户控制的名称空间中的“魔术”对象或属性。例如__init__, __import__或__file__。请勿发明此类名称;仅按记录使用它们。
styles)
可以识别以下使用前划线或后划线的特殊形式(通常可以将它们与任何大小写惯例结合使用):
_single_leading_underscore:“内部使用”指示器较弱。例如from M import *,不导入名称以下划线开头的对象。
_single_leading_underscore
from M import *
single_trailing_underscore_:按惯例用于避免与Python关键字发生冲突,例如
single_trailing_underscore_
Tkinter.Toplevel(master, class_='ClassName')
* __double_leading_underscore:在命名类属性时,调用名称修饰(在类FooBar内部,__boo变为_FooBar__boo;见下文)。
__double_leading_underscore
__boo
_FooBar__boo
* __double_leading_and_trailing_underscore__:位于用户控制的名称空间中的“魔术”对象或属性。例如__init__, __import__或__file__。请勿发明此类名称;仅按记录使用它们。
__double_leading_and_trailing_underscore__
__import__
__file__
请注意,带下划线和双下划线的名称本质上是为Python本身保留的:“切勿发明此类名称;仅按文档说明使用它们”。