“关键字参数”与常规参数有何不同?所有的参数不能被传递为name=value而不是使用位置语法吗?
当前回答
使用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'`
这可以帮助在你有许多相似的参数,特别是如果他们是相同类型的情况下,在这种情况下,我更喜欢使用命名参数或我创建一个自定义类,如果参数属于一起。
其他回答
有两种方法将参数值赋给函数形参,这两种方法都被使用。
的位置。位置参数没有关键字,首先被赋值。 通过关键字。关键字参数具有关键字,并且在位置参数之后被赋值。
注意,您可以选择使用位置参数。
如果你不使用位置参数,那么——是的——你写的所有东西都变成了一个关键字参数。
当你调用一个函数时,你决定使用位置或关键字或两者的组合。如果你愿意,你可以选择做所有的关键字。我们中的一些人并没有做出这样的选择,而是使用位置参数。
使用关键字参数与普通参数是一样的,只是顺序不重要。例如,下面两个函数调用是相同的:
def foo(bar, baz):
pass
foo(1, 2)
foo(baz=2, bar=1)
位置参数
它们前面没有关键词。顺序很重要!
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])
这允许您使用任意关键字参数,这些参数可能包含您不想在前面定义的键。
使用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'`
这可以帮助在你有许多相似的参数,特别是如果他们是相同类型的情况下,在这种情况下,我更喜欢使用命名参数或我创建一个自定义类,如果参数属于一起。
推荐文章
- 在芹菜中检索队列中的任务列表
- 使用beautifulsoup提取属性值
- 如何禁用标准错误流的日志记录?
- 用Matplotlib在Python中绘制时间
- 类中的Python装饰器
- 在Python中锁定文件
- 得到熊猫栏目的总数
- 从pandas DataFrame中删除名称包含特定字符串的列
- Mock vs MagicMock
- 如何阅读一个。xlsx文件使用熊猫库在iPython?
- 如何访问熊猫组由数据帧按键
- Pandas和NumPy+SciPy在Python中的区别是什么?
- 将列表转换为集合会改变元素的顺序
- 如何在matplotlib更新一个情节
- TypeError: ` NoneType `对象在Python中不可迭代