Python中函数参数命名规范

2 投票
4 回答
1368 浏览
提问于 2025-04-16 23:32

这不是个大问题,但让我有点困扰,所以我决定问问大家,寻求灵感。

假设有一个这样的函数:

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 个回答

2

, 这样做不会有任何副作用。

调用函数中的变量和在被调用函数中的参数,它们各自的命名空间是分开的,互相之间不会影响。

3

首先,使用 store(book=book, author=author) 这样的写法是很清楚的,没有任何模糊的地方,也不会产生副作用。解释器能够很容易地区分参数名和其他名字。

关于你问题的第二部分,我觉得你不需要改变函数参数的名字:毕竟,store() 确实是根据 bookauthor 来完成它的工作的,这在一般情况下是正确的。

不过,你的局部变量可以更准确地描述它们包含的内容。它们可能并不是指代“任何”书籍或作者,而是指某些特定特征的,比如说“当前的”书籍或“畅销的”作者。

所以,如果你想让名字更清晰,我建议你改一下你的局部变量的名字。

4

你不用担心会有什么副作用。这和你直接调用

store(book, author)

是一样的,从语义上来说没有区别。

这些值会被存储在函数内部的新变量中,遵循所有正常的Python作用域规则。

不过,使用关键字参数可以让你自由地使用其他更具体的变量名,如果你需要的话。像 bookauthor 这样的名字比较通用,这在函数内部是合适的,因为函数应该是可重用的,所以名字可以稍微抽象一些。但在调用的范围内,使用更具体的名字可能更合适。从这个角度来看, thebooktheauthor 其实和 bookauthor 没什么不同;你可能想用更能准确描述这本书的名字,比如 local_bookborrowed_book,或者其他更具体的名称。

撰写回答