传递任意数量的实参:
当我们无法确定函数需要接受多少个实参时,我们可以通过在形参名前加,让python创建一个名为该形参名的空元组,在函数调用时,就可以将收到的所有值放入该元组。*
举例:
def make_pizza(*toppings): print(toppings) make_pizza("beef") make_pizza("pepperoni","cucumber") make_pizza("tomato","lettuce","ketchup")
('beef',) ('pepperoni', 'cucumber') ('tomato', 'lettuce', 'ketchup')
结合使用位置实参和任意数量的实参:
如果要使函数接收不同类型的实参,则必须将在函数中定义的可接受任意数量实参的形参放在最后,函数在调用时,先将位置实参和关键字实参进行匹配,再将剩下的未匹配的实参放在最后一个形参中。
举例:
def make_pizza(numbers,*toppings): print(f"they need {numbers} pizza,it's toppings are {toppings}") make_pizza(2,"lisa's","beef") print("\n") make_pizza(5,"pepperoni","cucumber") print("\n") make_pizza(3,"tomato","lettuce","ketchup")
they need 2 pizza,it's toppings are ("lisa's", 'beef') they need 5 pizza,it's toppings are ('pepperoni', 'cucumber') they need 3 pizza,it's toppings are ('tomato', 'lettuce', 'ketchup')
*args和**args的区别:
*1:args:保存多余变量,保存方式为元组
举例:
def fun(x,y,*args): print("x=",x) print("y=",y) print("args=",args)#将其他的位置实参收集 fun(1,2,3,4,5,6,7)
x= 1 y= 2 args= (3, 4, 5, 6, 7)
**2:args保存带有变量名的多余变量,保存方式为字典
举例:
def fun(x,y,**args): print("x=",x) print("y=",y) print("args=",args)#将其他的关键字实参收集 fun(1,2,c=3,d=4,e=5,f=6,g=7)
x= 1 y= 2 args= {'c': 3, 'd': 4, 'e': 5, 'f': 6, 'g': 7}
*args和**args结合使用:
def fun(x,y,*args,**arg_s): print("x=",x) print("y=",y) print("args=",args) print("args_s=",arg_s) fun(1,2,3,4,e=5,f=6,g=7)
x= 1 y= 2 args= (3, 4) args_s= {'e': 5, 'f': 6, 'g': 7}
默认参数:
一般我们讲默认参数放到参数列表后面,形参后期值变化很小或者没有变化时,设置默认值。如果对默认值参数重新赋值,使用最新传递实参的值。
举例:
def pow(x,n=2): r = 1 while n > 0: r *= x #r = r * x = 1*2 r = r*x = 2*2 = 4直到n等于0 n -= 1 return r #调用函数 print(pow(2,5))
32
不定长参数:
位置实参,关键字实参的数量都是不确定的。
def fun(a,b,c,*x,**y): print('a=',a) print('b=',b) print('c=',c) print('args=',x) print('kwargs=',y) for key,value in y.items(): print('key=',key,'value=',value) fun(1,3,5,6,7,name='蔡徐坤',age=20,hobby='打篮球')
a= 1 b= 3 c= 5 args= (6, 7) kwargs= {'name': '蔡徐坤', 'age': 20, 'hobby': '打篮球'} key= name value= 蔡徐坤 key= age value= 20 key= hobby value= 打篮球