【问题标题】:Parameter naming convention in PythonPython中的参数命名约定
【发布时间】:2012-09-17 19:31:01
【问题描述】:

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

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?)

【问题讨论】:

  • "而第二个意味着不可能混淆两个函数中的参数。"你能举一个你担心的那种混乱的例子吗?
  • 在这些情况下,将它们混淆的可能性不大(也许这通常是真的......)我想我更多地考虑使用与变量参数相同的名称,这可能这不是个好主意。

标签: python coding-style naming-conventions


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-16
        • 1970-01-01
        • 2010-09-15
        • 2010-10-01
        • 2018-08-31
        • 1970-01-01
        相关资源
        最近更新 更多