本文主要内容:动态接收位置参数*args

动态参数与位置参数的顺序优先级

动态参数与默认参数的使用

动态接收关键字参数**kwargs

小案例1:位置参数 默认参数 *args **kwargs使用

小案例2:位置参数 *args 默认参数 **kwargs

函数的注释

利用__doc__函数可以查看函数的注释内容

动态接收位置参数*args

*args 将所有实参的位置参数聚合到一个元组,并将这个元组赋值给argsdef makeFrinds(*args):

print("学习编程语言:",args)

print(type(args))

makeFrinds("python","java","C","C++","Go")

#输出:

#学习编程语言: ('python', 'java', 'C', 'C++', 'Go')

#输出的是一个元组

*args 动态接收位置参数

动态参数与位置参数的顺序优先级def makeFrinds(*args,a,b):

print(args,a,b)

makeFrinds("python","java","C","C++","Go")

#输出:Traceback (most recent call last):

# File "F:/VSA4.0/TestFrameWork(1)/zzytest/day1/demo10-1.py", line 13, in 

# makeFrinds("python","java","C","C++","Go")

# TypeError: makeFrinds() missing 2 required keyword-only arguments: 'a' and 'b'def makeFrinds(a,b,*args):

print("a的值为:"+a)

print("b的值为:" + b)

print("*args的值为:",args)

makeFrinds("python","java","C","C++","Go")

# 输出:

# a的值为:python

# b的值为:java

# *args的值为: ('C', 'C++', 'Go')

从上面的代码我们可以看出位置参数的位置在动态参数前面

动态参数与默认参数的使用def makeFrinds(a,b="Mysql",*args):

print("a的值为:"+a)

print("b的值为:" + b)

print("*args的值为:",args)

makeFrinds("python","java","C","C++","Go")

#输出:

# a的值为:python

# b的值为:java

# *args的值为: ('C', 'C++', 'Go')

从上面的代码我们可以分析到动态参数位置在关键字参数前面,关键字参数的值未改变def makeFrinds(a,*args,b="Mysql"):

print("*"*12)

print("a的值为:"+a)

print("*args的值为:", args)

print("b的值为:" + b)

makeFrinds("python","java","C","C++","Go")

#输出:

# a的值为:python

# *args的值为: ('java', 'C', 'C++', 'Go')

# b的值为:Mysql

从上面的代码我们可以分析到如果不给出关键字传参,那么参数值是一直生效的了def makeFrinds(a,*args,b="Mysql"):

print("a的值为:"+a)

print("*args的值为:", args)

print("b的值为:" + b)

makeFrinds("python","java","C","C++",b="Go")

#输出:

# a的值为:python

# *args的值为: ('java', 'C', 'C++')

# b的值为:Go

从上面的代码可以给b关键字参数传值了,覆盖了默认的参数

动态接收关键字参数**kwargs

将所有实参的关键字参数聚合到一个字典,并将这个字典赋值给kwargsdef makeFrinds(**kwargs):

print(kwargs)

print(type(kwargs))

makeFrinds(a=1,b=2,c=3)

# 输出:

# {'a': 1, 'b': 2, 'c': 3}

# dic ={'a': 1, 'b': 2, 'c': 3}

makeFrinds(**dic)

# 输出:

# {'a': 1, 'b': 2, 'c': 3}

小案例1:位置参数 默认参数 *args **kwargs使用def makeFrinds(a, b, c=0, *args, **kwargs):

print("a的值为:",a)

print("b的值为:",b)

print("c的值为:",c)

print("args的值为:",args)

print("**kwargs的值为",kwargs)

makeFrinds(1, 2, m=7, n=8)

#输出:

# a的值为:1

# b的值为:2

# c的值为: 0

# args的值为: ()

# **kwargs的值为 {'m': 7, 'n': 8}def makeFrinds(a, b, c=0, *args, **kwargs):

print("a的值为:",a)

print("b的值为:",b)

print("c的值为:",c)

print("args的值为:",args)

print("**kwargs的值为",kwargs)

makeFrinds(1, 2, 3, 4, 5, 6, m=7, n=8)  # 1 2 3 (4, 5, 6) {'m': 7, 'n': 8}

#输出:

# a的值为:1

# b的值为:2

# c的值为:3

# args的值为: (4, 5, 6)

# **kwargs的值为 {'m': 7, 'n': 8}

小案例2:位置参数 *args 默认参数 **kwargsdef makeFrinds(a, b, *args, c=0, **kwargs):

print("a的值为:", a)

print("b的值为:", b)

print("c的值为:", c)

print("args的值为:", args)

print("**kwargs的值为", kwargs)

makeFrinds(1, 2, 3, 4, 5, 6, m=7, n=8)

# 输出:

# a的值为:1

# b的值为:2

# c的值为:3

# args的值为: (4, 5, 6)

# **kwargs的值为 {'m': 7, 'n': 8}def makeFrinds(a, b, *args, c=0, **kwargs):

print("a的值为:", a)

print("b的值为:", b)

print("c的值为:", c)

print("args的值为:", args)

print("**kwargs的值为", kwargs)

makeFrinds(1, 2, 3, 4, 5, 6, c=9, m=7, n=8)

#输出:

# a的值为:1

# b的值为:2

# c的值为:9

# args的值为: (3, 4, 5, 6)

# **kwargs的值为 {'m': 7, 'n': 8}

从上面的代码我们可以知道参数位置顺序:位置参数 > args(动态位置参数) > 默认值参数 > *kwargs(动态默认参数)

函数的注释def makeFrinds(name,age,sex,area):

'''

这里描述这个函数是做什么的.例如这函数makeFrinds就是交朋友功能

@param name:    name参数代表什么 姓名

@param age:     age参数代表什么 年龄

@param sex:     sex参数代表什么 性别

@param area:    area参数代表什么 地区

@return:    执行完这个函数想要返回给调用者什么值 例如:这个函数返回的值姓名,年龄,性别,地区

'''

return name,age,sex,area

makeFrinds("小花","20","女","北京")

利用__doc__函数可以查看函数的注释内容print(makeFrinds.__doc__)

#输出

这里描述这个函数是做什么的.例如这函数makeFrinds就是交朋友功能

@param name:    name参数代表什么 姓名

@param age:     age参数代表什么 年龄

@param sex:     sex参数代表什么 性别

@param area:    area参数代表什么 地区

@return:    执行完这个函数想要返回给调用者什么值 例如:这个函数返回的值姓名,年龄,性别,地区