函数: 对功能或者动作的封装 类中的函数一般是方法
语法:
def 函数名(参数):
函数体(return)
ret = 函数名(实参)
函数名: 函数名就是一个变量名. 可以进行赋值. 可以作为参数, 可以作为返回值. 还可以作为集合类的元素
参数:
给函数传递的信息
1. 形参:
在函数声明的位置定义的变量.
分类:
1. 位置参数
2. 默认值参数, 共享
3. 动态传参
1. *args 动态接收位置参数
2. **kwargs 动态接收关键字参数
*,** 在形参位置表示聚合
*,** 在实参位置表示打散
顺序:
位置, *args, 默认值, **kwargs
def func(*args, **kwargs): 无敌传参
pass
2. 实参:
在函数调用的时候给函数传递的具体的值.
分类:
1. 位置参数
2. 关键字参数
3. 混合参数. 位置在前, 关键字在后
3. 传参:
把实参传递给形参的过程叫传参
名称空间:
1. 内置名称
2. 全局名称
3. 局部名称
作用域:
1. 全局作用域
2. 局部作用域
globals() 查看全局作用域中的内容
locals() 查看当前作用域中的内容
global 在局部引入全局变量, 创建全局变量
nonlocal 在局部, 引入离他最近的上一个变量
函数的嵌套:
def func():
def inner():
pass
return inner
闭包: 在内层函数访问外层函数中的变量. 最好是返回内层函数
作用:
1. 保护变量不被更改
2. 可以让一个变量常驻内存
def func():
a = 10
def inner():
return a
return inner
迭代器:
可迭代对象: 在数据类型中包含了__iter__.
迭代器: 访问__iter__可以获取到该数据类型的迭代器. 包含__iter__和__next__
特点:
1. 省内存
2. 惰性机制
3. 只能向前
模拟for循环
lst = []
it = lst.__iter__() # iter(lst)
while 1:
try:
it.__next__() # next(it)
except StopIteration:
break
生成器:
生成器的本质是迭代器
生成器有三种方式来创建:
1. 生成器函数
2. 生成器表达式
3. 类型转换(range())
生成器函数:
生成器函数中包含yield
yield表示返回. 可以分段的执行函数
生成器函数在被调用的时候. 获取生成器. 而不是执行函数
def func():
yield xxxx
func() # 获取生成器
生成器使用:
1. __next__() 执行到下一个yield
2. send() 可以给上一个yield传值
yield from:
把一个可迭代对象转换成生成器
生成器表达式:
(结果 for if)
内置函数: 68个.
lambda:
匿名函数
lambda 参数: 返回值