# 函数,就是把一串代码封装起来,要用的时候再去调用它
函数的定义:
将一组代码的集合通过一个名字(函数名)封装起来,想要执行这个函数(内部的代码),只需要调用函数名即可
如果函数的代码没有调用,那么函数的代码完全可以不用看
函数需要注意的地方:
先定义,后调用,定义了的函数可以在任意位置调用
函数的调用:函数名加括号
函数名:
是个内存地址,拿着这个地址去寻找那个代码块,然后执。就类似于变量名,
函数名可以当作变量名来看,
函数的返回值:
# 如果外部的代码需要获取函数的返回值
# 函数内要想返回给值给调用者,那必须要用关键字return
# 如果函数中没有return 那么他就会返回None
return 有五种情况:
1: 不写return。# 不写return,返回值是None(None表示什么都没有)
def func(): print('123')
res = func() print(res) >>> None
2:只写return, # 用于直接结束函数运行,返回也是Non
def func(): while True: print('111') return print('222') res = func() print(res) >>> 111
3:写return None # 和上面的只写return 一样的,
def func(): return None res = func() print(res) >>> None
4: 写return,返回一个值,这个值可以是python中的任意数据类型
def func(): return 123 res = func() print(res) >>> 123
5: 写return,返回多个值,它会将多个元素打包成元组返回
def func(): return 1,'2',[3,'4'],{'name':'cly','passwd':'1234'} res = func() print(res) >>> (1,'2',[3,'4'],{'name':'cly','passwd':'1234'})
'''
1:为什么要返回元组:
因为元组不能被修改,返回援助保证了,返回值没有被修改
2:如何不返回元组:
用列表括起来。因为列表就是单一的元素
'''
函数的参数:
def func(): # 不需要参数 def func(args): # 需要一个参数
# 函数参数分为两大类型(形参,实参)
形参:
# 用于标记函数需要一个参数,但参数不需要指定参数是什么
在函数的定义阶段,括号内写的变量名,叫做形式参数,又称为性参
实参:
# 需要调用函数的时候,需要有确定的值
函数的调用截断,括号内实际传入的值,叫做实际参数,又称为实参
主要:这些变量就只是在函数内部使用,在外部是不存在的,无法使用
传参:
位置参数:(一一对应)
实参通过按照顺序的方式对实参进行传参,实参必须对应形参,不能多,也不能少了,不然就会报错
def func(x,y):
print('x{},y{}'.format(x,y))
res = func(1,2)
print(res)
>>>
x1,y2
关键字传参:(用关键字进行传参)
实参通过形参中的关键字进行传参
def func(x,y):
print('x{},y{}'.format(x,y))
res = func(x=1,y=2)
print(res)
>>>
x1,y2
关键字传参可以和位置参数混合传参,但位置传参必须要在关键字传参的前面,而且同一个形参不能被多次传参
def func(x,y,z):
print('x{},y{},z{}'.format(x,y,z))
func(1,y=2,z=3)
>>>
x1,y2,z3
默认值参数:
在函数的定义阶段,形参就被直接赋值了。
在调用的时候可以不用给有默认值的形参赋值,它可以直接使用默认值
在调用的到时候,如果给默认值传了参,那么就会直接使用传入的实参
可变长参数:
# 站在调用函数传递实参的角度 实参的个数不固定的情况
# 也就意味形参也得不固定
# 站在形参的角度 可以用*和**来接收多余的(溢出的)位置参数和关键字参数
*args:
可以接收多个值,只能收到位置参数,会把收到的值变成元组的形式
如果没有传值,那么他就是一个空元组
如果只传入了一个值的话,他也会吧那个值组成元组
**kwargs:
可以接收多个值,只能收到关键字参数,他会把关键字参数变成字典
如果没有传值,那么他就是一个空字典