【问题标题】:Parameter Naming conventions for function in pythonpython中函数的参数命名约定
【发布时间】:2011-08-13 16:03:08
【问题描述】:

这不是什么大问题,但它困扰着我,所以我决定寻求灵感。

假设一个函数定义如下:

def store(book=None, author=None):
    pass

当像这样调用这个函数时:

book = Book()
author = Author()
store(book=book, author=author)

我必须担心book=bookauthor=author 的副作用吗?我倾向于将函数重新定义为

def store(thebook=None, theauthor=None):
    pass

但这似乎有点冗长。有什么建议吗?

【问题讨论】:

    标签: python function parameters naming-conventions


    【解决方案1】:

    您无需担心任何副作用。它在语义上与您刚刚调用

    时没有什么不同
    store(book, author)
    

    值存储在函数作用域内的新变量中,受所有正常的 python 作用域规则的约束。

    如果您需要,关键字参数确实可以让您使用其他更具体的变量名称。 bookauthor 的名称非常通用,适用于函数,它应该是可重用的,因此更抽象一点。但是在调用范围内使用更具体的名称可能是合适的。从这个角度来看,thebooktheauthorbookauthor 并没有什么不同;你想做一些更像——比如说——local_bookborrowed_book——或者更准确地描述有问题的书的东西。

    【讨论】:

      【解决方案2】:

      首先,说store(book=book, author=author) 没有歧义或副作用。解释器在区分参数名称和一般名称时没有问题。

      现在,关于您问题的第二部分,我认为您不应该更改函数参数的名称:毕竟,store() 确实book 执行其工作一般意义上的author

      但是,您的局部变量可能更准确地说明它们包含的内容。他们可能不参考任何书籍或作者,但具有特定特征的书籍或作者,例如当前书籍或畅销作者.

      因此,如果您希望消除名称的歧义,我建议您改为重命名局部变量。

      【讨论】:

        【解决方案3】:

        不会,不会有任何副作用。

        调用函数中变量的命名空间和被调用函数中参数的命名空间是独立的,不能相互影响。 p>

        【讨论】:

          【解决方案4】:

          参数名称与变量参数相同不会有任何问题,因为它们的解析方式不同:

          parameters: '(' [varargslist] ')'
          varargslist: ((fpdef ['=' test] ',')*
                    ('*' NAME [',' '**' NAME] | '**' NAME) |
                    fpdef ['=' test] (',' fpdef ['=' test])* [','])
          

          来自http://docs.python.org/reference/grammar.html

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-07-31
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多