“关键字参数”与常规参数有何不同?所有的参数不能被传递为name=value而不是使用位置语法吗?
当前回答
我很惊讶没有人提到你可以混合位置参数和关键字参数,使用*args和**kwargs来做这样的鬼鬼祟祟的事情:
def test_var_kwargs(farg, **kwargs):
print "formal arg:", farg
for key in kwargs:
print "another keyword arg: %s: %s" % (key, kwargs[key])
这允许您使用任意关键字参数,这些参数可能包含您不想在前面定义的键。
其他回答
使用Python 3,你可以同时拥有必需的和非必需的关键字参数:
可选:(为参数'b'定义的默认值)
def func1(a, *, b=42):
...
func1(value_for_a) # b is optional and will default to 42
必需(没有为参数'b'定义默认值):
def func2(a, *, b):
...
func2(value_for_a, b=21) # b is set to 21 by the function call
func2(value_for_a) # ERROR: missing 1 required keyword-only argument: 'b'`
这可以帮助在你有许多相似的参数,特别是如果他们是相同类型的情况下,在这种情况下,我更喜欢使用命名参数或我创建一个自定义类,如果参数属于一起。
有两种方法将参数值赋给函数形参,这两种方法都被使用。
的位置。位置参数没有关键字,首先被赋值。 通过关键字。关键字参数具有关键字,并且在位置参数之后被赋值。
注意,您可以选择使用位置参数。
如果你不使用位置参数,那么——是的——你写的所有东西都变成了一个关键字参数。
当你调用一个函数时,你决定使用位置或关键字或两者的组合。如果你愿意,你可以选择做所有的关键字。我们中的一些人并没有做出这样的选择,而是使用位置参数。
我很惊讶没有人提到你可以混合位置参数和关键字参数,使用*args和**kwargs来做这样的鬼鬼祟祟的事情:
def test_var_kwargs(farg, **kwargs):
print "formal arg:", farg
for key in kwargs:
print "another keyword arg: %s: %s" % (key, kwargs[key])
这允许您使用任意关键字参数,这些参数可能包含您不想在前面定义的键。
只需补充/添加一种方法来定义参数的默认值,当调用函数时,这些参数没有在关键字中赋值:
def func(**keywargs):
if 'my_word' not in keywargs:
word = 'default_msg'
else:
word = keywargs['my_word']
return word
叫它:
print(func())
print(func(my_word='love'))
你会得到:
default_msg
love
阅读更多关于python中的*args和**kwargs的信息:https://www.digitalocean.com/community/tutorials/how-to-use-args-and-kwargs-in-python-3
我很惊讶,似乎没有人指出可以传递一个键控参数字典,满足形式参数,就像这样。
>>> def func(a='a', b='b', c='c', **kwargs):
... print 'a:%s, b:%s, c:%s' % (a, b, c)
...
>>> func()
a:a, b:b, c:c
>>> func(**{'a' : 'z', 'b':'q', 'c':'v'})
a:z, b:q, c:v
>>>
推荐文章
- 将Pandas或Numpy Nan替换为None以用于MysqlDB
- 使用pandas对同一列进行多个聚合
- 使用Python解析HTML
- django MultiValueDictKeyError错误,我如何处理它
- 如何在for循环期间修改列表条目?
- 我如何在Django中创建一个鼻涕虫?
- 没有名为'django.core.urlresolvers'的模块
- 蟒蛇导出环境文件
- Django - makemigrations -未检测到任何更改
- SQLAlchemy:引擎、连接和会话差异
- 在Python Pandas中删除多个列中的所有重复行
- 更改pandas DataFrame中的特定列名
- 将Pandas多索引转换为列
- 熊猫在每组中获得最高的n个记录
- 熊猫数据帧得到每组的第一行