“关键字参数”与常规参数有何不同?所有的参数不能被传递为name=value而不是使用位置语法吗?
当前回答
位置参数
它们前面没有关键词。顺序很重要!
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)
其他回答
有两种方法将参数值赋给函数形参,这两种方法都被使用。
的位置。位置参数没有关键字,首先被赋值。 通过关键字。关键字参数具有关键字,并且在位置参数之后被赋值。
注意,您可以选择使用位置参数。
如果你不使用位置参数,那么——是的——你写的所有东西都变成了一个关键字参数。
当你调用一个函数时,你决定使用位置或关键字或两者的组合。如果你愿意,你可以选择做所有的关键字。我们中的一些人并没有做出这样的选择,而是使用位置参数。
使用关键字参数与普通参数是一样的,只是顺序不重要。例如,下面两个函数调用是相同的:
def foo(bar, baz):
pass
foo(1, 2)
foo(baz=2, bar=1)
有两个相关的概念,都称为“关键字参数”。
在调用端,也就是其他评论者提到的,您可以通过名称指定一些函数参数。您必须在所有没有名称的参数(位置参数)之后提到它们,并且对于任何根本没有提到的参数必须有默认值。
另一个概念是在函数定义方面:您可以定义一个按名称接受参数的函数——您甚至不必指定这些名称是什么。这些是纯关键字参数,不能按位置传递。语法是
def my_function(arg1, arg2, **kwargs)
传递给这个函数的任何关键字参数都将被放入一个名为kwargs的字典中。你可以在运行时检查这个字典的键,像这样:
def my_function(**kwargs):
print str(kwargs)
my_function(a=12, b="abc")
{'a': 12, 'b': 'abc'}
位置参数
它们前面没有关键词。顺序很重要!
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)
我很惊讶没有人提到你可以混合位置参数和关键字参数,使用*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])
这允许您使用任意关键字参数,这些参数可能包含您不想在前面定义的键。
推荐文章
- 如何用OpenCV2.0和Python2.6调整图像大小
- 在每个列表元素上调用int()函数?
- 当使用代码存储库时,如何引用资源的相对路径
- 如何在Flask-SQLAlchemy中按id删除记录
- 在Python中插入列表的第一个位置
- Python Pandas只合并某些列
- 如何在一行中连接两个集而不使用“|”
- 从字符串中移除前缀
- 代码结束时发出警报
- 如何在Python中按字母顺序排序字符串中的字母
- 在matplotlib中将y轴标签添加到次要y轴
- 如何消除数独方块的凹凸缺陷?
- 为什么出现这个UnboundLocalError(闭包)?
- 使用Python请求的异步请求
- 如何检查一个对象是否是python中的生成器对象?