测试环境:
Ubuntu 20.04 x86_64
Python 3.9.10
单下划线前缀: _var
约定的意义是:以单下划线开头的变量或方法仅供内部使用(私有)。但并不是 Python 强制规定的,语法上不会报错。
"""单下划线前缀.py Copyright (C) 2022 IYATT-yx iyatt@iyatt.com 每个人都可以复制和分发本许可证文档的逐字副本,但不允许更改。 这个程序是自由软件:你可以在自由软件基金会发布的GNU Affro通用公共许可证的条款下重新分发它和/或修改它, 或者许可证的第3版,或者(在你的选择)任何其他版本。 本程序的发布目的是希望它有用,但不提供任何担保;甚至没有对适销性或特定用途适用性的默示保证。 有关更多详细信息,请参阅GNU Affero通用公共许可证。 您应该已经收到GNU Affero通用公共许可证的副本以及本程序。如果没有,请参阅<https://www.gnu.org/licenses/>. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. """ class Test(object): def __init__(self): self.a = 1 self._b = 2 if __name__ == '__main__': test = Test() print(test.a) print(test._b) test.a = 3 test._b = 4 print(test.a) print(test._b)

当创建了一个模块,在的名称,并且导入模块时使用 from 模块名 import * ,则不会导入单下划线前缀的方法或变量,除非定义了 __all__ 列表。
单下划线后缀:var_
Python 中有部分名称已经被占用了,比如 class、def等,那么一般约定使用单下划线后缀避免命名冲突。
双下划线前缀
直接的理解就是私有化方法和属性,会强制语法检查,但是不建议用作私有的表达。本身主要作用是在多个类中防止属性名相同而冲突(下2图)。

子类继承父类,子类中没有父类中的 __c 属性,但是有一个 _ExtendTest__c,这样就能防止 __c 被子类修改。

前后双下划线:__var__
这个是 Python 保留的名称,用于特殊用途,比如 __init__、__str__、__del__、__call__等。自己编写程序也可以这样命名,但是不建议,可能你现在写的项目中创造了一个,但是不排除未来 Python 本身也出现了一个一样的名字,结果可能会造成冲突。
单下划线:_
保存最后一个执行的表达式的值

以及有时候需要循环,但是并不在意元素值,用作填充迭代
