编程风格- Python命名约定:指示函数是否改变参数



我想知道是否有一个适当的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)

直接作用于宾语时使用动词,返回new时使用形容词。

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

最新更新