我想知道是否有适当的 Python 约定来区分在适当位置更改参数的函数或保留参数并返回更改副本的函数。例如,考虑应用某些排列的两个函数。函数 f
接受一个列表作为参数并打乱周围的元素,而函数 g
接受一个列表,复制它,应用 f
然后返回修改后的副本。
对于上面的例子,我认为f
可以叫做permute(x)
,而g
可以是permutation( x)
,用动词和名词来区分。但是,这并不总是真正的最佳选择,并且在某些情况下,它可能会导致混淆是否会在此过程中更改参数 - 特别是如果 f
要返回一些其他值.
有没有标准的方法来处理这个问题?
最佳答案
没有方便的命名约定,无论如何都没有写在 PEP-8 之类的地方。
Python 标准库确实在一定程度上使用了这样的约定。比较:
listobj.sort()
listobj.reverse()
与
sorted_listobj = sorted(listobj)
reversed_iterator = reversed(listobj)
直接作用于对象时使用动词,返回新对象时使用形容词。
约定不一致。枚举可迭代对象时,使用 enumerate()
,而不是 enumerated()
。 filter()
不会就地改变输入序列。 round()
不接触输入数字对象。 compile()
生成一个新的字节码对象。等等。但这些操作在 Python 标准库中都没有就地等效项无论如何,而且我不知道在输入被就地更改的情况下使用形容词。
关于Python 命名约定 : indicating if function alters arguments,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30392289/