9.25 函数小结
函数的定义
def 函数名():
pass
函数的三种定义方式
空函数
def f():
pass
有参函数
def f(x):
print(x)
无参函数
def f():
print()
函数的调用
函数名()
函数的返回值
1.return可以返回值
2.return可以终止函数
3.return可以返回多个值,用元组返回
函数的参数
形参
位置形参
从左到右依次接收位置实参
默认形参
具有默认值,必须放在位置形参后面
实参
位置实参
从左到右依次传值给位置形参
关键字实参
按照形参名传值,必须在位置实参后面
可变长参数
*
*形参
接收多余位置实参,用元组接收
*实参
打散可迭代对象,当作位置实参传给形参
**
**形参
接收多余关键字实参,用字典接收
**实参
打散字典,当作关键字实参传给形参
*形参**形参
接收所有多余参数
函数对象
def func():
pass
引用
f1 = func
作为容器类元素
lt = [func]
作为函数返回值
def f2():
return func
f3 = f2()
作为函数参数
def f2(func):
pass
f2(func)
函数嵌套
def f1():
def f2():
pass
名称空间与作用域
内置名称空间
内置函数
全局名称空间
除了内置和局部,剩下的都是全局
局部名称空间
函数内部的
执行顺序
内置→全局→局部
搜索顺序
当前位置:局部→全局→内置→报错
全局作用域
全局与局部没有联系
局部作用域
内局部与外局部没有联系
global
让全局与局部进行转换
nonlocal
让内局部与外局部进行转换
可变数据类型会打破作用域关系
闭包函数
def a(x):
def b():
print(x)
return b
c = a(100)
c()
装饰器
1.本质就是函数
2.不修改源代码
3.不改变调用方式
二层装饰器
二层装饰器模版
def deco(func):
def wrapper(*args,**kwargs):
res = func(*args,**kwargs)
return res
return wrapper
@deco
def index()
pass
三层装饰器
迭代器
可迭代对象
含有iter方法的 → 除了数字
迭代器对象
含有iter和next方法的 → 只有文件
三元表达式
列表推导式
字典生成式
生成器表达式
g = (i for i in range(10)
print(next(g)) ##g.__next__()
生成器
含有yield的函数
yield
1.暂停函数
2.一个next可以拿到一个yield值
递归
函数调用函数本身,要有退出条件
匿名函数
lambda 参数:返回值
内置函数
enumerate 获取索引+值
面向过程编程
类似流水线