def __f():
print 1
def _f():
print 1
Run Code Online (Sandbox Code Playgroud)
我尝试导入,它可以访问:
>>> import test1
>>> test1._f()
1
Run Code Online (Sandbox Code Playgroud)
这有什么意义吗?我想编写一些非基于类的辅助函数.然后我想隐藏某些低级的具体函数,只留下用户可以访问的高级函数(将它们视为API).
例如:
test1.copy()将在同一个文件中调用另一个辅助函数来执行一些额外的检查,但我不想将其暴露给用户.
Ray*_*ger 11
单个前导下划线是Python命名约定.许多工具都依赖于该惯例.例如,help()将忽略单个下划线名称.使用from somemodule import *也将忽略单个下划线名称.
双引导下划线触发名称修改(在名称前加上类名和单个前导下划线).它用于创建线程局部引用.这允许不会被子类意外破坏的类内调用.在http://docs.python.org/tutorial/classes.html#private-variables的教程中有一个很好的例子.
最后,有两个前导下划线和两个尾随下划线的特殊方法命名约定.解释器使用这些名称来实现运算符并实现许多标准协议(即迭代器,上下文管理器,酸洗等).有关特殊方法的详细说明,请参见http://www.rafekettler.com/magicmethods.html.