Python args和kwargs在实践中是否曾被命名为其他名称?
Python不限制参数的名称,但是一些参数名称受约定的严格约束,例如Python args和kwargs在实践中是否曾被命名为其他名称?,python,naming-conventions,keyword-argument,Python,Naming Conventions,Keyword Argument,Python不限制参数的名称,但是一些参数名称受约定的严格约束,例如self、cls、args和kwargs。名字self和cls总是代表同一个概念,因此在这些情况下,我很难找到一个令人信服的理由让某人改变传统。然而,对于args和kwargs,我发现这种命名约定令人窒息 假设我有一个类,该类具有各种属性,可以通过将kwargs传递给其构造函数来设置这些属性: class MyObj: def __init__(self, **kwargs): for propname
self
、cls
、args
和kwargs
。名字self
和cls
总是代表同一个概念,因此在这些情况下,我很难找到一个令人信服的理由让某人改变传统。然而,对于args
和kwargs
,我发现这种命名约定令人窒息
假设我有一个类,该类具有各种属性,可以通过将kwargs传递给其构造函数来设置这些属性:
class MyObj:
def __init__(self, **kwargs):
for propname in kwargs:
self.set_property(propname, kwargs[propname])
在本例中,KWARG仅用于作为该类实例的可设置属性,因此对我来说,编写如下定义是有意义的:
class MyObj:
def __init__(self, **properties):
for propname in properties:
self.set_property(propname, properties[propname])
这样,只需查看方法的签名就可以了解kwargs的用途
总的来说,我认为习俗是件好事。然而,在我看来,总是使用args
和kwargs
是错过了向API用户传达有关函数/方法的args和kwargs性质的有用信息的机会。毕竟,它们是未命名或命名的参数这一事实已经通过单星号或双星号的出现而清楚了
是否有人在现实世界的多开发人员代码中使用了args和kwargs的替代名称的示例,或者在这些构造中使用其他变量名太不符合粒度要求了
如果不使用这些传统名称真的是一个可怕的想法,那么原因是什么?我不认为有任何理由反对使用特定于上下文的名称,例如
my\u sum(*数字)
,my\u解析器(*字符串,**标志)
,等等
文档上写着*对象
文件上说,*iterables
在文档和文档字符串中使用*iterables
>>> from itertools import chain
>>> chain.__doc__.splitlines()[0]
'chain(*iterables) --> chain object'
在文档和中使用*映射
>>> from collections import ChainMap
>>> from inspect import signature
>>> signature(ChainMap.__init__)
<Signature (self, *maps)>
>>从集合导入链映射
>>>请检查进口签名
>>>签名(链图。\uuuu初始化\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
请随意寻找更多的例子