# 位置参数:不能很好的控制参数的数量,参数数量多需要写很多,而且必须一一对应
def eat(staple_food, cold_dish, drink, ice_cream):
print("I want eat", staple_food, cold_dish, cold_dish, drink, ice_cream)
# eat("盖浇饭", "馒头", "腊肠", "橙汁", "哈根达斯") # TypeError: eat() takes 4 positional arguments but 5 were given
eat("鱼香肉丝盖浇饭", "凉皮", "可乐", "老北京冰棍")
# 动态参数
# 动态接收位置参数
# 顺序: 位置参数 => *args(arguments) => 默认值参数
# * 在这里表示接收位置参数的动态传参, 接收到的是元组
def eat(name, *food, location="Beijing"): # 参数名是food *表示动态传参
print("in", location, name, "want eat", food)
eat("xiaogaokui", "狗不理", "大麻花", location="Tianjin")
eat("wangxiaoming", "大米饭", "可乐")
eat("big DS", "馒头")
# 动态接收关键字参数
def eat(*args, **kwargs): # 无敌传参
print(args, kwargs)
eat(good_food="狗不理", no_good_food="汉堡", drink="大白梨", ice_cream="巧乐兹")
# 传递顺序
# 位置参数, *args, 默认值参数, **kwargs
# 参数分类
# 实际参数:
# 位置参数
# 关键字参数
# 混合参数(位置, 关键字)
# 形式参数:
# 位置参数
# 默认值参数
# 动态传参:
# *args: 位置参数动态传参
# **kwargs: 关键字参数动态传参
def fun(a, *args, c="哈哈", **kwargs):
"""参数传递顺序测试"""
print(a, args, c, kwargs)
fun(1, 2, 3, 4, 5, 6)
# 注释分类
# 单行注释
# '''多行注释'''
# 函数注释
# def func(a, b):
# """
# 这个函数是用来计算a和b的和
# :param a: 第一个数据
# :param b: 第二个数据
# :return: 返回的是两个数的和
# """
# return a + b
#
# print(func.__doc__) # document文档
# 接收所有参数
def func01(*args, **kwargs):# 无敌 *args相当于一个聚合的作用
print(args, kwargs)
# func01(1, 2, 3, t = 6, 4, 5, a=6, b=7, c=9) # SyntaxError: positional argument follows keyword argument
func01(1, 2, 3, 4, 5, a=6, b=7, c=9)
# * 不同位置,不同作用
# 形参: 聚合
def func02(*food): # 聚合, 位置参数
print(food)
# 实参: 打散
lst = ["鸡蛋","煎饼果子","猪蹄","滋滋冒油"]
func02(*lst) # 打散. 把list, tuple, set, str 进行迭代打散
# 聚合成关键字参数
def func(**kwargs):
print(kwargs)
dic = {"name":'alex', 'age':'18'}
func(**dic) # 打散成关键字参数