3

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

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),但找不到明确的答案。(我发现的关于 SO 的类似问题包括: Python 函数中可选参数的命名实践在 Python 中,避免对 __init__ 参数和实例变量使用相同名称的最佳方法是什么?

4

3 回答 3

8

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

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

保持“关键字”相同有助于解决这种罕见但合法的极端情况......

于 2012-09-17T19:33:14.540 回答
2

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

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

于 2012-09-17T20:16:55.500 回答
1

这里的重要指导原则是您应该给它们起合理的名称——理想情况下,当您一年后回到您的代码时,您会猜到参数具有的名字。

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

正如 mgilson 指出的那样,这允许您根据需要使用关键字参数。这也意味着具有自动完成功能的 IDE 更有用——当您看到(…n1…, …n2…)弹出窗口时,您就知道您想要传递两个整数。但主要是为了可读性。

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

于 2012-09-17T20:17:26.357 回答