参数名称的推荐样式是什么?
open(file='myfile.txt')
或
open('myfile.txt')
PEP8 Style Guide For Python没有提及此事。我何时使用其中一种?
答案 0 :(得分:1)
我在使用显式名称时看到的主要好处是修改函数的签名对依赖它的代码的影响较小。
例如,假设您正在使用模块的功能,定义为:
their_function(a, b, c=1)
您使用c
关键字参数通过以下方式调用它:
their_function(myA, myB, myC)
但是现在,该模块的开发人员发现有另一个关键字参数很有用,而在他们看来,它更有意义,它出现在c
之前。
所以现在,功能是:
their_function(a, b, d=2, c=1)
您呼叫their_function(myA, myB, myC)
的所有地方,现在myC
都会their_function
传递给d
,而且一切都搞砸了。
另一方面,如果你通过their_function(myA, myB, c=myC)
调用它,那么关键字参数的映射就会使myC
仍然传递给their_function
{{1} }}
当然,对于明显的函数来说,这可能是过度的,例如c
或print
,其位置参数是自然的。
但是我发现调用open
而不是open(path, 'r', encoding='utf8')
真的很让人放心,因为即使我的订单错了,行为仍然会如预期的那样。
至于我,除了在一些反直觉的情况下,我倾向于强制使用关键字参数的名称。
Python 3,从某个版本开始,允许您执行以下操作:
open(path, 'r', 'utf8')
这里,单独使用splat运算符def my_function(a, b, *, c=1):
pass
告诉Python在第三个之后没有找到位置参数。
当将第四个参数作为位置参数传递时,这将导致*
,即没有命名它。
TypeError
这有助于您使代码更加简单,特别是在定义具有许多位置或关键字参数的函数时。
答案 1 :(得分:0)
你会得到不同的意见。我个人认为,尽可能使用关键字参数严格更好因为它将人类可读的语义附加到函数调用。如果不进一步检查代码/文档,读者可以很好地猜测参数应该是什么。
但是,在使用众所周知的功能时,我有时会省略关键字。