单下划线和单下划线作为变量使用。最常见的使用场景是作为变量占位符。使用场景可以明显减少代码中冗余变量的使用。为了便于理解,可以将_看做是废弃的变量名。这样做可以让阅读你代码的人知道这是一个不会被使用的变量,例如for_,_,filenamesinos.walk(targetDir):print(filenames)for_inrange(100):print('PythonPoint')在交互式解释器(例如iPython)中,_变量指向最后一次执行interactiveinterpreter语句的返回结果。单个下划线前缀名称(例如_pythonPoint)表示这是一个受保护的成员(属性或方法)。只有类对象和子类对象可以访问这些变量。它是一种指定私有变量和方法的方式(contract就是这样)。如果使用froma_moduleimport*导入,则不会导入这些变量和函数。但是,值得注意的是,如果使用importa_module导入模块,仍然可以以a_module._pythonPoint的形式访问此类对象。另外还有一种情况一般不用单下划线。例如,用C编写的扩展库有时命名时带有下划线,然后用去掉下划线的Python模块打包。例如,模块结构实际上是C模块_struct的Python包装器。单下划线后缀名通常用于区别于Python关键字。例如,我们需要一个名为class的变量,但是class是Python关键字,所以我们可以写class_末尾加一个单下划线。双下划线双下划线前缀名称这表示这是一个私有成员(属性或方法)。它不能像公共成员一样直接访问。双下划线开头的命名形式在Python类成员中用于表示名称适配,即如果Test类中有成员__x,那么dir(Test)看到的是_Test__x而不是__x。这是为了避免成员的名字和子类中的名字冲突,方便父类和子类中成员的识别。但是请注意,这要求名称末尾最多有一个下划线。例如双下划线前缀和后缀名是一种约定,Python的内部名称,用于区分其他用户定义的名称,防止冲突。是一些Python“魔法”对象,表示这是一个特殊成员。比如类成员的__init__、__del__、__add__等,还有全局的__file__、__name__等。Python官方建议你永远不要把这样的命名用在你自己的变量或函数上,而是按照文档使用这些内置的特殊成员进入Python。Python中关于私有属性、方法约定问题,官方文档如下“Python中不存在只能从对象内部访问的“私有”实例变量。但是,大多数Python代码都遵循一个约定:以下划线为前缀的名称(例如_spam)应被视为API的非公共部分(无论是函数、方法还是数据成员).它应该被认为是一个实现细节,如有更改,恕不另行通知。由于类私有成员有一个有效的用例(即避免名称与子类定义的名称发生名称冲突),因此对这种机制的支持有限,称为名称修改。__spam形式的任何标识符(至少两个前导下划线,最多一个尾随下划线)在文本上替换为_classname__spam,其中classname是当前类名,前导下划线被去除。这种处理是在不考虑标识符的句法位置的情况下完成的,只要因为它发生在类的定义中。名称修改有助于让子类覆盖方法而不破坏类内方法调用。
