【Python】如何在函数中传递可选参数、可变参数
使用 *args 和 **kwargs(位置参数 + 关键字参数)
| 类型 | 传递方式 | 示例 |
|---|---|---|
| 位置参数 | 按参数定义的顺序直接传递值 | func(1, 2) |
| 关键字参数 | 通过参数名=值的形式显式指定参数 |
func(a=1, b=2) |
#使用*args接收任意数量的位置参数 def sum_numbers(*args): return sum(args) print(sum_numbers()) # 输出: 0 (无参数) print(sum_numbers(1, 2, 3)) # 输出: 6 ------------------------------------------------------------ # 使用**kwargs接收任意数量的关键字参数 def print_info(**kwargs): for key, value in kwargs.items(): print(f"{key}: {value}") print_info() # 无输出 print_info(name="Alice", age=25) # 输出: # name: Alice # age: 25 ------------------------------------------------------------ #结合使用默认参数和*args/**kwargs def complex_func(a, b=1, *args, option=True, **kwargs): print(f"a={a}, b={b}, args={args}, option={option}, kwargs={kwargs}") complex_func(10) # 只传必需参数 complex_func(10, 20, 30, 40, option=False, x=1, y=2) # 传所有参数
例子: 注意:args为元组,kwargs为字典
def getGS(n,*args,**kwargs): # 使用*args、**kwargs接收任意数量的位置参数,可加可不加 count_L = 0 count_N = 0 for i in range(6, df.shape[0]): # 全部
if df.values[i][3][0] == "{}".format(n) and (len(df.values[i][3]) in args if args else True) and (str(df.values[i][5]) in kwargs.values() if kwargs else True) : count_L += df.values[i][6] count_N +=1 return count_N,float('%.3f'% count_L)
调用方式:
getGS_1("S")#只传递了n
getGS_1("S",4) #只传递了n和args
getGS_1("S",等级="高") #传递了n和一个kwargs
getGS_1("S",等级1="一级",等级2="二级")#传递了n和多个kwargs
getGS_1("S",2,3,4,x=1,y=2,z=3)#传递了n,多个args 和多个kwargs
另外:判断条件中的(len(df.values[i][3]) in args if args else True) 若为True时,args可以为空;若为False时,args不能为空。
def getnc(*args,**kwargs): #县乡xyc count_L = 0 count_N = 0 for i in range(0, df2.shape[0]): # 全部 if (df2.values[i][0][0] == str(args[0]) if args else True) and (str(df2.values[i][18]) in kwargs.values() if kwargs else True) : #用args作为判断条件时,args为元组,要用args[0] count_L += df2.values[i][9] count_N +=1 return count_N,float('%.3f'% count_L)
print(getnc())#
print(getnc("X"))
浙公网安备 33010602011771号