# __author__:Nzkalhbxx
# __date__:17-10-29
# 函数的实参包括必选参数, 默认参数, 可变参数, 关键字参数. 优先级由高至低
# 当函数的参数有上述四类参数时, 必选参数必须放在所有参数的前面, 然后是默认参数, 再就是可变参数, 最后是关键字参数
# 必须参数: 未赋默认值的形参, 调用函数时必须优先赋值
# 默认参数: 赋予了默认值的形参
# 可变参数: 跟在必选/默认参数之后, 关键字参数之前的参数, 非键值对key = value类型的数据
# 关键字参数: 放置在所有参数之后, 以key = value形式赋值传递的数据类型
def fun(name, age = 0, *args, **kwargs):
# 语法报错: 必选参数必须放在默认参数之前
# def fun(name="psj", age, *args, **kwargs):
# 语法错误: 默认参数必须放在可变/关键字参数之前
# def fun(age, *args, **kwargs, name="psj"):
print(name)
print("".center(33, "-"))
print(age)
print("".center(33, "-"))
for i in args:
print(i)
print("".center(33, "-"))
for i in kwargs:
print("%s: %s"%(i, kwargs[i]))
fun("psj", 19, [1, 2, 3], "wdq", 4, hobby="passion_fruit", sex="girl")
# 错误, 关键字参数必须放在可变参数之后
# fun("psj", age=19, [1, 2, 3], "wdq", 4, hobby="passion_fruit", sex="girl")
# 语法错误: 默认参数必需放在可变参数之前, 如果默认参数不传递实参, 那么将去可变参数中窃取值
# fun("psj", [1, 2, 3], "wdq", 4, age=19, hobby="passion_fruit", sex="girl")
# fun("psj", [1, 2, 3], "wdq", 4, hobby="passion_fruit", sex="girl")
# 语法错误: 默认参数必须置于可变参数和关键字参数之前, 必选参数之后
# fun("psj", [1, 2, 3], "wdq", 4, hobby="passion_fruit", sex="girl", age=19)
# 语法错误: age参数已经存在于默认参数中, 关键字参数不能再有形参名相同的参数
# fun("psj", 19, [1, 2, 3], "wdq", 4, hobby="passion_fruit", sex="girl", age=19)

运行结果
网友评论