函数
- 函数能够大量的减少重复代码
- 函数能够大量的提高重用性
- 函数其实就是将咋们写的代码进行了一层封装
函数的定义
函数的定义
函数的固定结构:
def 函数名():
函数体
函数定义后不调用
是不会执行的
当函数不调用的时候,里面的函数体就是代码
,什么都不做,可懒了
当函数执行完毕,自动进行销毁,又龟缩成了懒虫模式
函数的执行流程从上往下
函数被执行完就自动销毁了
函数的返回值:return – 返回
函数的调用
函数名()就是调用
- 调用函数
- 接收返回值
函数的返回值
返回值的目的:将需要使用的数据进行保留
返回值返回给了调用者
(谁调用返回给谁)
return:不写时默认返回None
;写了return,不写返回值返回的还是None
return:终止当前函数,并且return下方的代码不会执行
return:能够返回python中任何对象
return:返回多个对象时,以元组的形式返回
函数的参数
def func(接收参数的):
函数体
位置传参:形参和实参必须一一对应
def func(a,b):
pass
func(1,2)
关键字传参:指名道姓传参
def func(a,b):
pass
fun(a = 1,b = 2)
混合参数:位置,默认
def func(a,b,c=1):
pass
func(1,2)
动态位置参数:
*args就是接收多余的位置参数,以元组的形式显示
def func(*args): #聚合
print(args)
lst = [1,2,3,4,5,6,7,8,9]
func(lst)
结果:([1, 2, 3, 4, 5, 6, 7, 8, 9],)
对比:
def func(*args):
print(*args) #解包 因为是以元组的形式显示的,但是当我们进行解包之后,就是把元组里面的值拿了出来
lst = [1,2,3,4,5,6,7,8,9]
func(lst)
结果:[1, 2, 3, 4, 5, 6, 7, 8, 9]
*args是程序猿之间约定俗称的,可以修改,但是不建议改
动态关键字参数:
**kwargs接收多余的关键字参数,以字典的形式显示
def func(**kwargs):
print(kwargs)
func(a=1,b=2,c=3,d=4)
结果:{'a': 1, 'b': 2, 'c': 3, 'd': 4}
def func(**kwargs):
print(*kwargs) #解包 将字典的键拆出来
func(a=1,b=2,c=3,d=4)
结果:a b c d
**kwargs是程序猿之间约定俗称的,可以修改,但是不建议改
函数体中打散只能用一个*
简单的函数参数:
形参:
1. 位置参数
2. 默认参数
3. 混合参数
实参:
- 位置参数
- 关键字参数
- 混合参数
传参:将实参传递给形参的过程叫做传参
位置和关键字参数(默认参数)摆放的位置有要求:
形参:
位置参数>动态位置参数>默认参数>动态关键字参数
实参:
位置参数>关键字参数
同一个参数名不能传递两次值
常用的:
#形参:
位置参数,*****
动态位置参数,****,
默认参数 ***,
动态关键字参数 ****
#实参:
位置参数 *****,
关键字参数 ***
返回值返回给了调用者
三元运算: 条件成立的结果 if 条件 else 条件不成立的结果
聚合
def func(*args,**kwargs): #聚合
print(args)
print(kwargs)
lst = [1,2,3,4]
func(*lst) #打散
结果:
(1, 2, 3, 4)
{}
函数名的第一类对象及使用
python中一切皆对象
-
当做另一个函数的参数
def func(): pass def foo(): pass foo(func)
-
函数名可以当做值,被赋值
a = 18 def func(): pass func = a print(func)
-
函数名可以当做另一个函数的返回值
def func(): pass def foo(): return func()
-
函数名还可以当做容器中的元素
def func(): pass lst = [func,func,func]