2024-04-23 17:30:05 发布
网友
“关键字参数”与常规参数有何不同?不能将所有参数作为name=value传递,而不是使用位置语法吗?
name=value
使用关键字参数和普通参数是一样的,只是顺序无关紧要。例如,下面的两个函数调用是相同的:
def foo(bar, baz): pass foo(1, 2) foo(baz=2, bar=1)
最后还有一个语言特征是区别很重要的。考虑以下功能:
def foo(*positional, **keywords): print "Positional:", positional print "Keywords:", keywords
参数*positional将存储传递给foo()的所有位置参数,不限制您可以提供多少。
*positional
foo()
>>> foo('one', 'two', 'three') Positional: ('one', 'two', 'three') Keywords: {}
**keywords参数将存储任何关键字参数:
**keywords
>>> foo(a='one', b='two', c='three') Positional: () Keywords: {'a': 'one', 'c': 'three', 'b': 'two'}
当然,您可以同时使用这两种方法:
>>> foo('one','two',c='three',d='four') Positional: ('one', 'two') Keywords: {'c': 'three', 'd': 'four'}
这些特性很少使用,但有时它们非常有用,知道哪些参数是位置参数或关键字很重要。
有两个相关的概念,都称为“关键字参数”。
在调用端,也就是其他注释者所提到的,您可以按名称指定一些函数参数。您必须在所有没有名称的参数之后提到它们(位置参数),并且对于任何根本没有提到的参数都必须有默认值。
另一个概念是在函数定义方面:您可以定义一个按名称接受参数的函数——甚至不必指定这些名称是什么。这些是纯关键字参数,不能按位置传递。语法是
def my_function(arg1, arg2, **kwargs)
传递给此函数的任何关键字参数都将放入名为kwargs的字典中。您可以在运行时检查此词典的键,如下所示:
kwargs
def my_function(**kwargs): print str(kwargs) my_function(a=12, b="abc") {'a': 12, 'b': 'abc'}
使用关键字参数和普通参数是一样的,只是顺序无关紧要。例如,下面的两个函数调用是相同的:
最后还有一个语言特征是区别很重要的。考虑以下功能:
参数
*positional
将存储传递给foo()
的所有位置参数,不限制您可以提供多少。**keywords
参数将存储任何关键字参数:当然,您可以同时使用这两种方法:
这些特性很少使用,但有时它们非常有用,知道哪些参数是位置参数或关键字很重要。
有两个相关的概念,都称为“关键字参数”。
在调用端,也就是其他注释者所提到的,您可以按名称指定一些函数参数。您必须在所有没有名称的参数之后提到它们(位置参数),并且对于任何根本没有提到的参数都必须有默认值。
另一个概念是在函数定义方面:您可以定义一个按名称接受参数的函数——甚至不必指定这些名称是什么。这些是纯关键字参数,不能按位置传递。语法是
传递给此函数的任何关键字参数都将放入名为
kwargs
的字典中。您可以在运行时检查此词典的键,如下所示:相关问题 更多 >
编程相关推荐