在文章的例子中已经说得很明白了, c=5这种参数传递形式会被当作是*args的一部分,体现了Python参数用法的复杂性。它不是自然界中1+1=2这种显而易见,或者在任何一个学科领域都通用的定理,没有什么为什么,Python就是这么规定的。其具体规则都是由Python官方参照编程语言的通用做法制定的,如果你理解不了,那就先背下来,不用错就行。
博主 回复 wotototot回复
def func(**kwargs): for kwg in kwargs: print(kwg, kwargs[kwg]) print(type(kwg)) func(k1='v1', k2=[0, 1, 2]) ,博主循环中的kwg的类型为什么是str呢?
By wotototot On回复
这是Python的参数规则,所有 key=value方式提供的参数,默认情况下,key会以字符串的类型供使用。
博主 回复 wotototot回复
传递实参的原则: * 位置实参必须在关键字实参的前面。 * 位置实参到形参的传递,按照从左到右的顺序,依次传递。 * 已经被位置实参赋值的形参,不可以再次使用关键字实参进行赋值,否则会报错。 * 调用函数时,传递的关键字参数会转化为位置参数,然后通过形参名称,实现形参(名称)与实参(对象)的绑定。参考:If keyword arguments are present, they are first converted to positional arguments, as follows. First, a list of unfilled slots is created for the formal parameters. If there are N positional arguments, they are placed in the first N slots. Next, for each keyword argument, the identifier is used to determine the corresponding slot (if the identifier is the same as the first formal parameter name, the first slot i