python中函数的参数命名约定

时间:2011-08-13 16:03:08

标签: python function parameters naming-conventions

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

假设一个定义如下的函数:

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

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

4 个答案:

答案 0 :(得分:4)

你没有恐惧的副作用。它在语义上与你刚刚调用

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

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

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

答案 1 :(得分:3)

首先,说store(book=book, author=author)时没有歧义或副作用。一般来说,解释器从名称中告诉参数名称没有问题。

现在,关于你问题的第二部分,我认为你不应该改变函数参数的名称:毕竟,store() 从{一般意义上的{1}}和book

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

因此,如果您希望消除名称歧义,我建议您重命名本地变量。

答案 2 :(得分:2)

,不会有任何副作用。

调用函数中变量的名称空间,以及函数中参数的名称空间是独立的,不会相互影响。

答案 3 :(得分:1)

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

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

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