Python中函数参数命名规范
这不是个大问题,但让我有点困扰,所以我决定问问大家,寻求灵感。
假设有一个这样的函数:
def store(book=None, author=None):
pass
当我这样调用这个函数时:
book = Book()
author = Author()
store(book=book, author=author)
我需要担心因为 book=book
和 author=author
而产生的副作用吗?我倾向于重新定义这个函数为:
def store(thebook=None, theauthor=None):
pass
但这样似乎有点啰嗦。有没有什么建议?
4 个回答
不, 这样做不会有任何副作用。
在调用函数中的变量和在被调用函数中的参数,它们各自的命名空间是分开的,互相之间不会影响。
首先,使用 store(book=book, author=author)
这样的写法是很清楚的,没有任何模糊的地方,也不会产生副作用。解释器能够很容易地区分参数名和其他名字。
关于你问题的第二部分,我觉得你不需要改变函数参数的名字:毕竟,store()
确实是根据 book
和 author
来完成它的工作的,这在一般情况下是正确的。
不过,你的局部变量可以更准确地描述它们包含的内容。它们可能并不是指代“任何”书籍或作者,而是指某些特定特征的,比如说“当前的”书籍或“畅销的”作者。
所以,如果你想让名字更清晰,我建议你改一下你的局部变量的名字。
你不用担心会有什么副作用。这和你直接调用
store(book, author)
是一样的,从语义上来说没有区别。
这些值会被存储在函数内部的新变量中,遵循所有正常的Python作用域规则。
不过,使用关键字参数可以让你自由地使用其他更具体的变量名,如果你需要的话。像 book
和 author
这样的名字比较通用,这在函数内部是合适的,因为函数应该是可重用的,所以名字可以稍微抽象一些。但在调用的范围内,使用更具体的名字可能更合适。从这个角度来看, thebook
和 theauthor
其实和 book
和 author
没什么不同;你可能想用更能准确描述这本书的名字,比如 local_book
或 borrowed_book
,或者其他更具体的名称。