命名关键字参数的一个问题
Topic source依老师所说,*代表后面是命名关键字参数,而*q是位置型可变参数,传入的是tuple,是有序的,而关键字参数需要dict(键:值)是无序的,一定要把有序的位置参数放*前面
def f3(a,*q,*,b,**w)
此处a,*q都是位置参数 此处b,**w都是关键字参数 传参时:
f3( 1 , *[2,3] , b=1, **{ 'w1':2 , 'w2':3 } )
或
f3( *[1,2,3] , **{ 'b':1, 'w1':2 , 'w2':3 } )
以上等价于f3(*q,**w)
(可看成a是*q的第一个参数)
即老师所说 :
对于任意函数,都可以通过类似func(*args, **kw)
的形式调用它,无论它的参数是如何定义的。
你这种定义方式编译会报错,
def f3(a,*q,*,b,**w)
在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用,除了
【可变参数无法和命名关键字参数混合】
。但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数/命名关键字参数和关键字参数
。
即有*
,就不能再出现*q
了
那究竟是为什么"【可变参数无法和命名关键字参数混合】"啊? 我觉得应该是这个样的: 命名关键字参数后面必须传的是键值对,而可变参数无法是一个tuple 当命名关键字参数后面发现是一个可变参数(tuple)时解析器就无法解析所以不能跟,有因为关键字参数本身也是一个dict,也是键值对所以命名关键字参数和关键字参数就可以组合.其实就是和 轩序待翃 解析的理由一样
那究竟是为什么"【可变参数无法和命名关键字参数混合】"啊? 我觉得应该是这个样的: 命名关键字参数后面必须传的是键值对,而可变参数是一个tuple 当命名关键字参数后面发现是一个可变参数(tuple)时解析器就无法解析所以不能组合,又因为关键字参数本身也是键值对(dict)所以命名关键字参数和关键字参数就可以组合.其实就是和 轩序待翃 解析的理由一样
因为第一次发讨论的时候错别字太多了 重新发一次 哈哈
- 1
- 2
nishno_s45
廖老师,问一下有没有这样的写法
为什么结果是invalid syntax