“关键字参数”与常规参数有何不同?所有的参数不能被传递为name=value而不是使用位置语法吗?
当前回答
我正在寻找一个使用类型注释的默认kwargs的示例:
def test_var_kwarg(a: str, b: str='B', c: str='', **kwargs) -> str:
return ' '.join([a, b, c, str(kwargs)])
例子:
>>> print(test_var_kwarg('A', c='okay'))
A B okay {}
>>> d = {'f': 'F', 'g': 'G'}
>>> print(test_var_kwarg('a', c='c', b='b', **d))
a b c {'f': 'F', 'g': 'G'}
>>> print(test_var_kwarg('a', 'b', 'c'))
a b c {}
其他回答
有两个相关的概念,都称为“关键字参数”。
在调用端,也就是其他评论者提到的,您可以通过名称指定一些函数参数。您必须在所有没有名称的参数(位置参数)之后提到它们,并且对于任何根本没有提到的参数必须有默认值。
另一个概念是在函数定义方面:您可以定义一个按名称接受参数的函数——您甚至不必指定这些名称是什么。这些是纯关键字参数,不能按位置传递。语法是
def my_function(arg1, arg2, **kwargs)
传递给这个函数的任何关键字参数都将被放入一个名为kwargs的字典中。你可以在运行时检查这个字典的键,像这样:
def my_function(**kwargs):
print str(kwargs)
my_function(a=12, b="abc")
{'a': 12, 'b': 'abc'}
我很惊讶,似乎没有人指出可以传递一个键控参数字典,满足形式参数,就像这样。
>>> 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
>>>
位置参数
它们前面没有关键词。顺序很重要!
func(1,2,3, "foo")
关键字参数
他们在前面有关键词。它们可以是任何顺序!
func(foo="bar", baz=5, hello=123)
func(baz=5, foo="bar", hello=123)
您还应该知道,如果您使用默认参数而忽略了插入关键字,那么顺序将会很重要!
def func(foo=1, baz=2, hello=3): ...
func("bar", 5, 123)
我正在寻找一个使用类型注释的默认kwargs的示例:
def test_var_kwarg(a: str, b: str='B', c: str='', **kwargs) -> str:
return ' '.join([a, b, c, str(kwargs)])
例子:
>>> print(test_var_kwarg('A', c='okay'))
A B okay {}
>>> d = {'f': 'F', 'g': 'G'}
>>> print(test_var_kwarg('a', c='c', b='b', **d))
a b c {'f': 'F', 'g': 'G'}
>>> print(test_var_kwarg('a', 'b', 'c'))
a b c {}
使用关键字参数与普通参数是一样的,只是顺序不重要。例如,下面两个函数调用是相同的:
def foo(bar, baz):
pass
foo(1, 2)
foo(baz=2, bar=1)
推荐文章
- 有没有办法在python中做HTTP PUT
- “foo Is None”和“foo == None”之间有什么区别吗?
- 类没有对象成员
- Django模型“没有显式声明app_label”
- 熊猫能自动从CSV文件中读取日期吗?
- 在python中zip的逆函数是什么?
- 有效的方法应用多个过滤器的熊猫数据框架或系列
- 如何检索插入id后插入行在SQLite使用Python?
- 我如何在Django中添加一个CharField占位符?
- 如何在Python中获取当前执行文件的路径?
- 我如何得到“id”后插入到MySQL数据库与Python?
- super()失败,错误:TypeError "参数1必须是类型,而不是classobj"当父不继承对象
- Python内存泄漏
- 实现嵌套字典的最佳方法是什么?
- 如何在tensorflow中获得当前可用的gpu ?