1.1 函数的含义
# 1、功能 :包裹代码,实现功能,达到目的 # 2、特点 :反复调用,提高开发效率,便于代码维护
1.1.2 函数的基本格式
# 函数名 :变量命名规则 # 函数的定义 def func(): pass # 函数的调用 func()
1.2 函数的参数
1.2.1形式参数(函数定义处)
# 形式参数的顺序 # 位置参数 > 默认参数 > *args > 命名关键字参数 > **kwargs
1.2.1.1 位置参数
def func(a,b): print(a,b)
1.2.1.2 默认参数
def func(a = 0,b = 9): print(a,b)
1.2.1.3 位置参数 + 默认参数
""" 默认形参必须跟在位置形参的身后,顺序是一定的 """ def func(a ,b ,c = 4 , d = 5): print(a,b,c,d)
1.2.2 实际参数(函数调用处)
1.2.2.1 位置传参
""" 在函数调用时:实参数量及顺序需要与形参一一对应 """ def func(a,b): print(a,b) func(5,8) # 5 8 func(8,5) # 8 5
1.2.2.2 关键字传参
""" 在函数调用时: 如果给予实参,那么直接使用实际参数 如果没有给予实参,那么使用参数默认自带的值 """ def func(a = 0,b = 9): print(a,b) func(5,8) # 5 8 func(8,5) # 8 5 func(1) # 1 9
1.2.2.3 位置传参 + 关键字传参
""" 1、关键字传参是对具体的某个参数赋值,具体的顺序可以打乱 2、关键字实参必须跟在位置实参的身后,顺序是一定的 3、默认参数和关键字实参 在写法上一模一样 一个是在函数的定义处 一个是在函数的调用处 """ def func(a,b,c,d,name = "name",age = 18): print(a,b,c,d,name,age) func(1,2,3,4,age = 20 , name = "bajie") # 1 2 3 4 bajie 20 func(1,2,3,age = 20,4 , name = "bajie") # error
1.2.3 收集参数( *args , **kwargs)
1.2.3.1 收集参数 (在函数的定义处 -----> 聚合)
# *args 在函数的定义处专门用来收集多余的没人要的 位置实参 def func(a,b,c,*args): print(a,b,c) # 1 2 3 print(args) # (4, 5, 5, 6, 7, 8) func(1,2,3,4,5,5,6,7,8) # **kwarge 在函数的定义处专门用来收集多余的没人要的 关键字实参 def func(a=1,b=2,c=3,**kwargs): print(a,b,c) # 15 16 17 print(kwargs) # {'f': 1, 'g': 2, 'j': 3} func(f=1,g=2,j=3,a=15,b=16,c=17)
1.2.3.2 收集参数 (在函数的调用处 -----> 打散)
# * 把列表里面的所有元素拿出来,当成参数一个一个赋值给func进行调用 def func(a,b,c = 5,d = 6): print(a,b) # 1 2 print(c,d) lst = [1,2] func(*lst,c=3,d=4) # **把字典里面的所有元素拿出来,拼装成键=值的参数形式,赋值给func进行调用 def func(a,b,c = 5,d = 6): print(a,b) print(c,d) # 3 4 dic = {"c":3,"d":4} func(1,2,**dic,)
1.2.3.3 练习示例
# 任意个数字符串的拼接 """ 班长:宋云杰 班花:刘彩霞 班草:刘子涛 吃瓜群众:牧树人,晏国彰,刘聪 """ def func(**kwargs): print(kwargs) # 定义一个字典,存放每一位同学的身份 dic = {"monitor":"班长","class_flower":"班花","class_grass":"班草"} strvar1 = "" strvar2 = "" # 遍历字典中的键值对 for k,v in kwargs.items(): print(k,v) # monitor 宋云杰 class_flower 刘彩霞 class_grass 刘子涛 .... # 判断键是否在字典当中,如果在,获取对应的身份,拼装成字符串 if k in dic: strvar1 += dic[k] + ":" + v + " " # 班长 + ":" + 宋云杰 + ' ' else: strvar2 += v + "," # 去掉右边多余的 和,形成最后的效果 print(strvar1.strip()) print("吃瓜群众:"+ strvar2.rstrip(","))
1.2.4 命名关键字参数
""" 定义命名关键字参数的两种方式:(在函数调用时,必须使用命名关键字参数来进行赋值) (1)def func(a,b,*,c) c是命名关键字 (2)def func(*args,c,**kwargs) c是命名关键字参数 """ # 定义方式一 def func(a,b,*,d,c): print(a,b) # 1 2 print(d) # 3 print(c) # 10 func(1,2,d = 3,c=10) # 定义方式二 def func(*args,c,**kwargs): print(args) # (1, 2, 3, 4, 5, 6) print(c) # 100 print(kwargs) # {'a': 1, 'b': 2, 'd': 6} func(1,2,3,4,5,6,a=1,b=2,d=6,c=100)
1.2.5 参数练习题
# 读代码测结果 def f1(a, b, c=0, *args, **kw): print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw) def f2(a, b, c=0, *, d, **kw): print('a =', a, 'b =', b, 'c =', c, 'd =', d, 'kw =', kw) # 以上两个函数 打印结果 #(一) f1(1, 2) f1(1, 2, c=3) f1(1, 2, 3, 'a', 'b') f1(1, 2, 3, 'a', 'b', x=99) f2(1, 2, d=99, ext=None) #(二) args = (1, 2, 3, 4) kw = {'d': 99, 'x': '#'} f1(*args, **kw) #(三) myargs = (1, 2, 3) mykw = {'d': 88, 'x': '#'} f2(*myargs, **mykw) #(四) def f1(a, b, c=0, *args,d,**kw): print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw) print(d) f1(1,2,3, 'a', 'b',d=67, x=99,y=77)