python中参数组合的一个问题 2020-03-24 13:46 今天学python的时候,发现一个小问题,在多种参数组合时,某些情况下默认参数会强制剥夺取走后面一个参数的值,归为己用。 如下: **参数组合:** 在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用。但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。 【本段话参考链接:[廖雪峰:函数的参数](https://www.liaoxuefeng.com/wiki/1016959663602400/1017261630425888)】 ```python # 参数组合:位置参数,默认参数,可变参数,命名关键字参数,关键字参数 print('参数组合') def f1(a, b, c=0, *args, city, job, **kw): print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'city =', city, 'job =', job, 'kw =', kw) # 虽然默认参数不传入可以使用默认值,但是这种情况下如果不传入默认参数,则会强制将后面一个值赋给默认参数。 # 调用 f1(2,3,'aaa','bbb',city='beijing',job='performer',salary=1000000,sex='女') f1(2,3,'aaa','bbb','ccc',city='beijing',job='performer',salary=1000000,sex='女') f1(2,3,*('aaa','bbb'),city='beijing',job='performer',salary=1000000,sex='女') # 输出 参数组合 a = 2 b = 3 c = aaa args = ('bbb',) city = beijing job = performer kw = {'salary': 1000000, 'sex': '女'} a = 2 b = 3 c = aaa args = ('bbb', 'ccc') city = beijing job = performer kw = {'salary': 1000000, 'sex': '女'} a = 2 b = 3 c = aaa args = ('bbb',) city = beijing job = performer kw = {'salary': 1000000, 'sex': '女'} ``` 可以看到在**第三次调用f1时**,即使传入tuple = ('aaa', 'bbb')作为可变参数,按道理说这个可变参数tuple应该赋值给args,但是程序还是**默认将c = aaa**,即**将可变参数tuple强制拿出来一个赋给默认参数**。而我的本意是不传入默认参数,c=0,可变参数args=('aaa','bbb')不知道这种设计是有问题,还是故意为之,或者我没理解清楚。 --END--
发表评论