我想当第一

本节内容:

回调函数,闭包函数,lambda表达式,迭代器

一.回调函数

#什么是回调函数?
#定义一个函数,要求定义函数中的一个参数是另一个函数(内置函数或者自定义函数).那么这个定义的函数就是回调函数

简单来说就是函数作为参数进行传递..示例如下:

def func(x,y,f):
print(f(x,y)) _#该函数参数中的 f 可以为另一个函数,该函数是回调函数

def love(x,y): #自定义函数,
_return x+y

func(2, 2, love) #可以作为上面函数中的参数 f
func(2,2,pow) #pow是系统求幂次方的内置函数,

二.闭包函数

1.基本概念


#什么是闭包函数?
#在一个函数的内部返回了一个内函数,并且返回的内函数还使用了外函数的局部变量,那么这个外函数就被称为闭包函数

#示例如下:
#定义一个函数person()

def person():
money = 0
def work():
#在外函数中定义的内函数work()
nonlocal money #在内函数中使用nonlocal关键字可以访问外函数的临时变量
money += 100 #对外函数中的变量进行修改
print(money)
return work
#在外函数中返回了内函数,这个内函数就是闭包函数
res = person() #res==work
res() #res()==work()_

2.闭包作用及特点

##这样使用闭包函数有什么用?
#如以上的例子,可以有效的保护money这个变量不受外函数以外的其他因素影响,但是我们又可以使用
##闭包函数有什么特点?
#1:在外函数中定义了局部变量,在内函数中使用了这个局部变量
#2:在外函数中返回了内函数,这个内函数就是闭包函数
#3:主要用于保护外函数中的局部变量,既可以被使用,又不会被破坏

3.检测是否为闭包函数

# 使用 函数名.closure 如果是闭包函数则返回cell,不是则返回None 注意:此处下划线为两个英文下划线
#如此处:
print(res._closure)
#因为此处的res==work()_

三.lambda表达式

##匿名函数,lambda表达式
匿名函数就是不使用def定义,这个函数也没有名字
在python中可以使用lambda定义匿名函数,lambda表达式仅仅是一个表达式,不是代码块
lambda也有形参,并且不能访问除了自己的形参之外的任何数据包括全局变量
lambda是一个表达式,不能写太复杂的逻辑,功能相对单一

语法:lambda [参数列表]:返回值

示例如下:

#普通函数
def add(x,y):
return x+y

_#lambda表达式
_res = lambda x,y :x+y

print(add(2,1))
print(res(2,1)) #结果是相同的

# #lambda的分支结构
# #语法规则 lambda 参数: 真值返回值 if真值判断条件 else假值返回值

def func(sex):
if sex==‘男’:
return ‘很man’
else
:
return ‘很nice’
print(func(‘男’))

res = lambda sex: ‘很man’ if sex == ‘男’ else ‘很nice’
print(res(‘女’))


四.迭代器

1.基本概念


#迭代器是python中最具特色的功能之一,是访问集合元素的一种方式
#迭代器是一种可以记住访问遍历位置的对象
#从集合的第一个元素开始访问,直到所有元素访问完毕,只能从前往后一个个访问,不能后退
#迭代器是一个能被next()函数调用,并不断返回下一个值的对象

#iter()
#功能:把可迭代对象转换为迭代器对象
#参数:可迭代的对象(str,list,tuple,dict,set,range)
#返回值:迭代器对象
#注意:迭代器一定是一个可迭代的对象,但是可迭代对象不一定是迭代器

2.特点及取值方案

迭代器取值的特点:取出一个少一个,直到取完,再获取就会报错

迭代器取值方案 :
1:next() 调用一次获取一次,直到数据被取完 .
2:list() 使用list()函数直接取出迭代器中的所有数据
3:for 使用for循环遍历迭代器的数据

3.迭代器实例

f4 = [‘刘德华’,‘黎明’,‘郭富城’,‘张学友’]

res = iter(f4) #使用iter()将可迭代对象 list 转换为迭代器

print(next(res)) #第一种取值:使用next()函数去调用迭代器对象

print(list(res)) #第二种取值:使用list()函数直接取出迭代器中的所有数据

for i in res: #第三种取值:使用for循环遍历迭代器的数据
print(i)