Python 命名约定:指示函数是否改变参数

Python naming convention: indicating if function alters arguments

我想知道是否有适当的 Python 约定来区分原地更改参数的函数或保留参数的函数和 return 更改后的副本。例如,考虑应用某些排列的两个函数。函数 f 接受一个列表作为参数并打乱周围的元素,而函数 g 接受一个列表,复制它,应用 f 然后 return 修改后的副本。

上面的例子,我想f可以叫permute(x),而g可以叫permutation(x),用动词和名词来区分。但是,这并不总是真正的最佳选择,并且在某些情况下,它可能会导致混淆是否会在此过程中更改参数 - 特别是如果 f 对 [=26= 具有其他值].

有没有标准的方法来处理这个问题?

没有方便的命名约定,无论如何都没有写在 PEP-8 之类的地方。

Python 标准库确实在一定程度上使用了这样的约定。比较:

listobj.sort()
listobj.reverse()

sorted_listobj = sorted(listobj)
reversed_iterator = reversed(listobj)

直接作用于对象时使用动词,返回新对象时使用形容词。

约定不一致。枚举可迭代对象时,使用 enumerate(),而不是 enumerated()filter() 不会改变输入顺序。 round() 没有触及输入数字对象。 compile() 生成一个新的字节码对象。等等,但是 none 这些操作在 Python 标准库 无论如何 中都有就地等价物,我不知道在输入的地方使用形容词已就地更改。