导入:大家看下,下面是一个菜单函数. 假如现在要传100个菜名,我的形参就要写100个,很麻烦,怎么办呢?
def menu(food_1,food_2,food_3):
print(food_1,food_2,food_3,food_4)
eat('剁椒盖饭','木耳盖饭','香肠盖饭','肉丝盖饭')
如果我们还是用上面的方式传参,很显然,非常Low!针对上面的情况,我们学习下新的玩意,叫动态函数.
还是上面菜单的例子,我想实现随时随地任意添加,想添加多少就多少?
1.形参中只有动态参数:
情况1:实参中只有位置参数
在参数位置编写*表示接收任意内容,接受到的内容以元组的方式存储在args中,可以打印出来.
def menu(*args): #
args可以是任意名字
print(args)
menu('剁椒盖饭','木耳盖饭','香肠盖饭','肉丝盖饭')
打印结果:
('剁椒盖饭', '木耳盖饭', '香肠盖饭', '肉丝盖饭')
情况2:实参中只有关键字参数(报错)
def menu(*args): #
args可以是任意名字
print(args)
menu(food_1='剁椒盖饭',food_2='木耳盖饭',food_3='香肠盖饭',food_4='肉丝盖饭')
打印结果:
报错,因为*args只能接收位置参数,TypeError: menu() got an
unexpected keyword argument 'food_1'
情况3:实参中既有位置参数,也有关键字参数(且位置参数在关键字参数前)
def menu(*args): #
args可以是任意名字
print(args)
menu('剁椒盖饭','木耳盖饭','香肠盖饭',food_4='肉丝盖饭')
打印结果:
报错,因为*args只能接收位置参数,TypeError: menu() got an
unexpected keyword argument 'food_4'
情况4:实参中既有位置参数,也有关键字参数(且关键字参数在位置参数前)
def menu(*args): #
args可以是任意名字
print(args)
menu(food_1='剁椒盖饭','木耳盖饭','香肠盖饭','肉丝盖饭')
打印结果:
报错,SyntaxError: positional argument follows
keyword argument
2.形参中位置参数和动态参数混合使用
>>形参顺序:位置参数--*args(只能接收位置参数)
情况1:只有动态参数,实参中只有位置参数
在参数位置编写*表示接收任意内容,接受到的内容以元组的方式存储在args