function - 定义非类私有(private)函数在 Python 中有什么意义吗?

标签 function python

def __f():
  print 1

def _f():
  print 1

我试过 import 并且可以访问:

>>> import test1
>>> test1._f()
1

这有什么意义吗?我想写一些不是基于类的辅助函数。然后我想隐藏一些低级的具体功能,只留下高级功能(将它们视为 API)供用户使用。

例如:

test1.copy() 将调用同一个文件中的另一个辅助函数,它会进行一些额外的检查,但我不想将其暴露给用户。

最佳答案

单个前导下划线是 Python 命名约定。许多工具都依赖于该约定。例如 help() 将忽略单个带下划线的名称。使用 from somemodule import * 也将忽略单个带下划线的名称。

双前导下划线会触发名称重整(在名称前加上类名和一个前导下划线)。它用于创建线程局部引用。这允许不会被子类意外破坏的类内调用。在 http://docs.python.org/tutorial/classes.html#private-variables 的教程中有一个很好的例子。 .

最后,还有两个前导下划线两个尾随下划线的特殊方法命名约定。解释器使用这些名称来实现运算符并实现许多标准协议(protocol)(即迭代器、上下文管理器、pickling 等)。参见 http://www.rafekettler.com/magicmethods.html有关特殊方法的精彩文章。

关于function - 定义非类私有(private)函数在 Python 中有什么意义吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10275576/

相关文章:

使用创建的对象调用另一个函数后,Javascript 创建的对象属性值未定义

php - 函数数组

python - 如何设置 Pydantic 字段上的所有枚举值?

python - Docker hyperkit 进程 CPU 使用率变得疯狂。如何控制它?

function - 快速访问函数中定义的函数

python - 为什么我的递归函数返回 None?

python - 如何将文本更改为数字并在 Python 中保存到数组中

Python:从 MSSQL 检索图像

python - Pandas 0.19 : Attribute error "unknown property color_cycle" still exists while performing boxplot

javascript - 卡堆功能不起作用