一、函数的定义与调用
格式
def 函数名():
代码
print函数名()
# 定义一个函数,能够完成打印信息的功能
def printInfo():
print('------------------------------------')
print(' 人生苦短,我用Python')
print('------------------------------------')
# 定义完函数后,函数是不会自动执行的,需要调用它才可以
printInfo()
返回输出
每次调用函数时,函数都会从头开始执行,当这个函数中的代码执行完毕后,意味着调用结束了
如果函数中执行到了return也会结束函数
二、参数的传递
(位置参数传递、关键字参数传递、默认参数传递)
函数的参数传递是指将实际参数传递给形式参数的过程。
我们通常将定义函数时设置的参数称为形式参数(简称为形参),将调用函数时传入的参数称为实际参数(简称为实参)。
1.位置传参
函数在被调用时会将实参按照相应的位置依次传递给形参,也就是说将第一个实参传递给第一个形参,将第二个实参传递给第二个形参,以此类推。
def num(a, b): ##定义时小括号中的参数,用来接收参数用的,称为 “形参” c = a+b print(c) num(110, 20) ##调用时小括号中的参数,用来传递给函数用的,称为 “实参” #返回 130
2.关键字传参
关键字参数的传递是通过“形参=实参”的格式将实参与形参相关联,将实参按照相应的关键字传递给形参。
def connect(ip, port): print(f"设备{ip}:{port}连接!") connect(ip="127.0.0.1", port=8080) ##调用函数处ip="127.0.0.1",port=8080为实参 #返回 设备127.0.0.1:8080连接!
3.默认参数传递
函数在定义时可以指定形参的默认值,如此在被调用时可以选择是否给带有默认值的形参传值,若没有给带有默认值的形参传值,则直接使用该形参的默认值。
def connect(ip, port=8080): print(f"设备{ip}:{port}连接!") connect(ip="127.0.0.1") #返回 设备127.0.0.1:8080连接! connect(ip="127.0.0.1", port=3306) #返回 设备127.0.0.1:3306连接!
三、参数的打包与解包以及混合传递
1.打包
如果函数在定义时无法确定需要接收多少个数据,那么可以在定义函数时为形参添加“*”或“**”:
- “*” —— 接收以元组形式打包的多个值(实参是元组→可以使用“*”拆分成多个值→按位置参数传给形参)
- “**”—— 接收以字典形式打包的多个值(实参是字典 → 可以使用“**” 拆分成多个键值对 →按关键字参数传给形参)
##打包--'*' 以元组形式打包 def test(*args): # 定义 print(args) test(11, 22, 33, 44, 55) # 调用 #返回 (11, 22, 33, 44, 55)
##打包--'**' 以字典形式打包 def test(**kwargs): # 定义 print(kwargs) test(a=11, b=22, c=33, d=44, e=55) # 调用 #返回 {'a': 11, 'b': 22, 'c': 33, 'd': 44, 'e': 55}
- 虽然函数中添加“*”或“**”的形参可以是符合命名规范的任意名称,但这里建议使用*args和**kwargs。
- 若函数没有接收到任何数据,参数*args和**kwargs为空,即它们为空元组或空字典。
2.解包
元组形式解包
def test(a, b, c, d, e): print(a, b, c, d, e) nums = (11, 22, 33, 44, 55) test(*nums) #返回 11 22 33 44 55
字典形式解包
def test(a, b, c, d, e): print(a, b, c, d, e) nums = {"a":11, "b":22, "c":33, "d":44, "e":55} test(**nums) #返回 11 22 33 44 55
3.混合传递
在定义函数时:
带有默认值的参数必须位于普通参数之后。
带有“*”标识的参数必须位于带有默认值的参数之后。
带有“**”标识的参数必须位于带有“*”标识的参数之后。
def test(a, b, c=33, *args, **kwargs): print(a, b, c, args, kwargs) test(1, 2) #返回 1 2 33 () {} test(1, 2, 3) #返回 1 2 3 () {} test(1, 2, 3, 4) #返回 1 2 3 (4,) {} test(1, 2, 3, 4, e=5) #返回 1 2 3 (4,) {'e': 5}