python 迭代器

一.函数名的运用

函数名就是一个特殊的变量,与括号配合可以执行函数的变量

1.函数名可以赋值给其他变量

def f1():
	print(1)
a = f1
a()# 结果为 1

2.函数名可以当作函数的参数和返回值

def f1():
	print(1)
def f2(fn):
	fn()
	def f3()
		print(2)
	return f3
a = f2(f1) #print(1)
a()  #print(2)

二.闭包

闭包:内层函数对外层函数(非全局)的变量的引用,

def f1():
	a=1
	def f2()
		print(a)
	f2()
f1()  #print(1)

我们可以使用__closure__来检测函数是否闭包,返回cell就是闭包 返回None就不是闭包

def f1():
	a=1
	def f2()
		print(a)
	f2()
	print(f2.__closure__) # (<cell at 0x10c2e20a8: str object at 0x10c3fc650>,) 
f1()  #print(1)

如何在函数外面调用内层函数呢?

def f1()
	def f2():
		print(1)
	return f2
a = f1()
a()

装饰器的雏形

三.迭代器

如何生成一个迭代器
可迭代对象._iter_()

_iter_是帮助我们获取到对象的迭代器.我们拿到迭代器后

使用__next__()来获取一个迭代器中的元素
在这里插入图片描述

使用迭代器模拟for循环的机制

lst = [1,2,3]
lst_iter = lst.__iter__()
while 1:
	try:#执行try内的代码  如出了下面except声明的错误  则执行except StopIterration:内的代码
		i = lst_iter.__next__()
		print(i)
	except StopIterration:
		break

迭代器的特点:

  1. 节省内存
  2. 惰性机制 不去拿值就不执行
  3. 不能反复,只能向下执行

我们可以把要迭代的内容当成子弹. 然后呢. 获取到迭代器__iter__(), 就把子弹都装在弹夹 中. 然后发射就是__next__()把每一个子弹(元素)打出来. 也就是说, for循环的时候. 一开始的 时候是__iter__()来获取迭代器. 后面每次获取元素都是通过__next__()来完成的. 当程序遇到 StopIteration将结束循环.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值