一、函数的定义
函数:可以用对重复使用的功能代码进行封装,提高代码的复用性,提高工作效率,降低代码的耦合性
函数的定义:通过关键字def
def 函数的名字():
函数内部的功能代码
函数名 (# 通过函数名直接调用函数)
关于函数的一些注意点:
代码格式规范性:1.定义函数前,上面空两行
2. 注释写在函数模块内
3.调用函数,需与函数空两行
def func(n): """函数举例""" for i in range(1,n+1): for j in range(i): print("* ", end="") print() func(3) func(5) func(10)
二、函数的参数
1.形参
形参:定义的参数称为形参
三种定义方式:
1.必需参数(必备参数):定义了就一定要传,不能多也不能少
2.默认参数(缺省参数):定义的时候可以设置默认值,调用时可以传,也可以不传(不传时使用默认值)
3.不定长参数(动态参数/可变参数):可以接受0个或者多个参数
*args:只能接受位置传参,以元组的形式保存
**kwargs:只能接受关键字传参,以字典的形式保存
# 一、形参: # 1,必需参数 def add(a, b): print("a:", a) # 6 print("b:", b) # 8 print(a+b) # add() # 报错 TypeError: add() missing 2 required positional arguments: 'a' and 'b' # add(1) # 报错 TypeError: add() missing 1 required positional argument: 'b' add(3, 5) # 正常,不会报错, # 2,缺省参数(默认参数) def add(a, b, c =99): print("a:", a) # 3 print("b:", b) # 5 print("c:", c) # 99 # 10086 print(a+b) add(3, 5) # 参数c 不调用时,默认一开始设置的值 99 add(3, 5, 10086) # 参数c 调用时,则会传递,变为10086 # 3.动态参数 # 3.1,*agrs def func(*args): print(args) func() # 打印结果为 () 接收位置参数,转换为元组类型
func(11) # 打印结果为 (11,) func("aaa", "bbb", 12345) # 打印结果为 ('aaa', 'bbb', 12345) # 3.2,**kwargs def func2(**kwargs): print(kwargs) func2() # 打印结果为 {} 接收关键字参数,转换为字典类型 func2(a=11) # 打印结果为 {'a': 11} func2(a=2, b=3, c=4) # 打印结果为 {'a': 2, 'b': 3, 'c': 4}
2.实参
实参:调用实际的传递行为叫做实参
两种形式:
1、位置传参:按照参数定义的位置进行传递
2、关键字传参:通过参数名字,指定传递
注意点:如果使用两种形式混合传递参数,先写位置参数,再写关键字参数(不然会报错)!!!
# 举例1:位置传参 def add(a, b): print("a:", a) # 6 print("b:", b) # 8 print(a+b) add(6, 8) # 14 # 举例2:关键字传参 def add(a, b): """举例2:关键字传参""" print("a:", a) # 7 print("b:", b) # 10 print(a+b) # 17 add(b=10, a=7) # 举例3:混合传参 def add(a, b, c, d): print("a:", a) # 11 print("b:", b) # 44 print(a+b) # 55 # add(b=11, 22, 33, 44) # 这种情况会报错,因为没有先写位置参数, add(11, c=22, d=33, b=44) # 当混合传参时,必须先写位置参数,才不会报错
3.函数拆包
与上面的形参中的动态参数有联系
这里实际上就是一个*号还是两个**号的区别
*:
*加在形参前面(定义函数参数的时候使用),接收位置参数,转换为元组
*加在实参前面(调用函数参数的时候使用),可以将元组(列表)拆包成多个位置参数
**:
** 加在形参前面(定义函数参数的时候使用),接收关键字参数,转换为字典
**加在实参前面(调用函数参数的时候使用),可以将字典成多个关键字参数
# 拆元组 * def func2(a,b,c,d): print(a,b,c,d) tu = ('jack', 'boy', '178', 18) func2(*tu) # 运行后的结果:jack boy 178 18 # 拆字典 ** def func3(a,b,c,d): print(a,b,c,d) dic = {"a": 11, "b": 22, "c": 33, "d": 44} func3(**dic) # 运行后的结果: 11 22 33 44