Python中的参数命名约定

时间:2012-09-17 19:31:01

标签: python coding-style naming-conventions

对于具有密切相关的形式参数的函数,例如

def add_two_numbers(n1, n2):
    return n1 + n2

def multiply_two_numbers(n1, n2):
    return n1 * n2

如上所示,为两个函数中的参数赋予相同的名称是一个好主意吗?

另一种方法是重命名其中一个函数中的参数。例如:

def add_two_numbers(num1, num2):
    return num1 + num2

在两个函数中保持相同看起来更加一致,因为每个函数所采用的参数都是类似的,但更令人困惑?

同样,对于下面的例子哪个更好?

def count(steps1, steps2):
    a = 0
    b = 0

    for i in range(steps1):
        a += 1

    for j in range(steps2):
        b += 1

    return a, b

def do_a_count(steps1, steps2):
    print "Counting first and second steps..."
    print count(steps1, steps2)

否则,更改第二个函数中的参数会给出:

def do_a_count(s1, s2):
    print "Counting first and second steps..."
    print count(s1, s2)

同样,我不确定哪种方式最好。保持相同的参数名称使两个函数之间的关系更清晰,而第二个意味着不可能在两个函数中混淆参数。

我已经做了一些搜索(包括浏览PEP-8),但找不到明确的答案。 (我发现的类似问题包括: Naming practice for optional argument in python functionIn Python, what's the best way to avoid using the same name for a __init__ argument and an instance variable?

3 个答案:

答案 0 :(得分:8)

除非你有充分的理由使用不同的名字,否则我会保持名称相同...请记住,即使是位置参数也可以通过关键字来调用,例如:

>>> def foo(a,b):
...     print a
...     print b
... 
>>> foo(b=2,a=1)

保持“关键字”相同有助于这种罕见但合法的角落......

答案 1 :(得分:2)

一般情况下,你应该给你的函数的参数名称有意义,甚至在选择这些名称时甚至不考虑与其他函数有关。两个函数的参数名称之间没有任何关系,即使这些函数做了类似的事情。

虽然......如果函数做类似的事情,也许这表明你错过了重构? :)

答案 2 :(得分:1)

这里重要的指导原则是你应该给他们一些合理的名字 - 理想情况下,当你一年后回到你的代码时,你会猜到你的参数的名字。

每个程序员都有一套约定。有些人喜欢将整数参数调用到二元函数n1n2;其他人如nm;或lhsrhs;或者是其他东西。只要你选择一个并坚持下去(只要它是合理的),其他任何人都可以在几秒钟后学习你的风格,阅读你的代码并理解它。如果你在所有地方使用不同的名字,他们将不得不做更多的猜测。

正如mgilson所指出的,如果你愿意,这可以让你使用关键字参数。这也意味着具有自动完成功能的IDE更有用 - 当您看到弹出的(…n1…, …n2…)时,您知道要传递两个整数。但主要是为了便于阅读。

当然,如果有不同的含义,请给它们不同的名称。在某些情况下,add_two_numbers(augend, addend)multiply_two_numbers(factor, multiplicand)可能是合理的。