如何用**kwargs实现函数参数可选?求简洁易懂的解决方案
关于Python函数可选参数与**kwargs的用法
首先,你想要的是让arg1、arg2成为可选参数,只在必传arg3的情况下调用函数,**kwargs确实能实现这个需求,下面给你讲清楚它的原理和用法:
什么是**kwargs?
**kwargs是Python的特殊语法,用来接收任意数量的关键字参数(比如arg3='xxx'这种形式),并把这些参数打包成一个字典。你可以从这个字典里提取需要的参数,还能给可选参数设置默认值。
用**kwargs改造你的函数
按照你的需求,改造后的代码可以写成这样:
def myFunc(**kwargs): # 给arg1、arg2设置默认值,没传就用默认值 arg1 = kwargs.get('arg1', '默认值1') arg2 = kwargs.get('arg2', '默认值2') # arg3设为必选,没传的话会抛出KeyError arg3 = kwargs['arg3'] print(arg1) print(arg2) print(arg3) # 调用时只传arg3即可 myFunc(arg3='测试内容')
这段代码里:
- 用
kwargs.get()可以给可选参数指定默认值,即使调用时没传arg1、arg2,函数也不会报错; - 直接通过
kwargs['arg3']获取参数,意味着arg3是必传的,没传的话会触发KeyError,和原来的必选参数报错逻辑类似。
更简洁的替代方案:默认参数
如果你的参数数量是固定的,其实用默认参数比**kwargs更直观,代码也更简洁:
# 把必选参数arg3放在最前面,可选参数设默认值 def myFunc(arg3, arg1='默认值1', arg2='默认值2'): print(arg1) print(arg2) print(arg3) # 调用时直接传arg3即可 myFunc(arg3='测试内容')
这里需要注意:必选参数必须放在可选参数(带默认值的参数)前面,所以把arg3挪到了第一个位置,这样调用时只传arg3就不会触发缺失参数的报错。
为什么你原来的代码会报错?
你原来的函数def myFunc(arg1, arg2, arg3):里,三个参数都是位置参数(没有默认值),属于必选参数。调用时哪怕用关键字参数只传arg3,arg1和arg2还是没被赋值,所以Python会抛出missing 1 required positional argument的错误。
内容的提问来源于stack exchange,提问作者Anonymous
相关产品推荐
相关产品推荐

