我想知道是否有一个正确的Python约定来区分改变其参数的函数或者保留其参数并返回更改副本的函数。例如,考虑两个应用某些排列的函数。函数f
将列表作为参数并对元素进行混洗,而函数g
获取列表,复制它,应用f
然后返回更改后的副本。
对于上面的示例,我认为f
可以被称为permute(x)
,而g
可能是permutation(x)
,使用动词和名词来区分。然而,这并不总是最佳的,并且在某些情况下,它可能会导致关于参数是否会在此过程中发生变化的混淆 - 特别是如果f
要返回其他值。
有没有一种标准方法可以解决这个问题?
答案 0 :(得分:6)
没有方便的命名惯例,也没有任何速度记录在PEP-8等地方。
Python标准库确实在某种程度上使用了这样的约定。比较:
listobj.sort()
listobj.reverse()
与
sorted_listobj = sorted(listobj)
reversed_iterator = reversed(listobj)
在直接对象时使用动词,在返回新对象时使用形容词。
惯例并不一致。枚举可迭代时,您使用的是enumerate()
,而不是enumerated()
。 filter()
不会改变输入序列。 round()
未触及输入数字对象。 compile()
生成一个新的字节码对象。等等。但是这些操作中没有一个在Python标准库无论如何中具有就地等价物,并且我不知道在输入被就地改变的形容词的任何使用。