【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"))

 

posted @ 2025-05-17 16:19  山鬼谣`  阅读(276)  评论(0)    收藏  举报