请问在Python函数中的字符串会影响到函数形参吗
我在学习Python文档的Python教程中的4.8.3.4. 函数示例时,遇到了如下情况:
下面的函数定义中,
kwds
把name
当作键,因此,可能与位置参数name
产生潜在冲突:def foo(name, **kwds): return 'name' in kwds
调用该函数不可能返回
True
,因为关键字'name'
总与第一个形参绑定。例如:>>>foo(1, **{'name': 2}) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: foo() got multiple values for argument 'name' >>>
加上 / (仅限位置参数)后,就可以了。此时,函数定义把
name
当作位置参数,'name'
也可以作为关键字参数的键:>>>def foo(name, /, **kwds): ...return 'name' in kwds ... >>>foo(1, **{'name': 2}) True
换句话说,仅限位置形参的名称可以在 **kwds 中使用,而不产生歧义。
我主要不理解这一段:
下面的函数定义中,
kwds
把name
当作键,因此,可能与位置参数name
产生潜在冲突:def foo(name, **kwds): return 'name' in kwds
为何在这里函数中的字符串会影响到函数形参?
而又为何在加上 / (仅限位置参数)的限制后,就允许name 当作位置参数,’name’ 也可以作为关键字参数的键了?
推荐文章: