Python基础9,迭代器和生成器

迭代器和生成器

1,迭代器

dict1 = {'name':'zhangsan'}
print(dir(dict1))

迭代:重复同一个动作

list1  = [1,2,3,4,5]
print(dir(list1))
for i in list1:
	print(i)
index = 0
while index < len(list1):
	print(list[index])
	index += 1

从可迭代对象生成了一个迭代器
凡是有__iter__方法,是可迭代对象
可迭代对象包含了迭代器

a = iter(list1)
print(a)  # 迭代器对象
print(dir(a))

for迭代原理:

try:
	while True:
		print(next(a))
except StopIteration:
	pass

可迭代对象__iter__
迭代器对象__iter__ next
2,生成器函数

def func1:
	yield 1
b = func1()
print(b)  # generator生成器
print(next(b))   # 通过next激活yield的运行

def func2():
	yield 1
	yield 2
	yield 3
	yield 4
c = func2()
# 显式的迭代协议
print(next(c))
print(next(c))
# 隐式的迭代协议
dor i in c:
	print('for')
	print(i)

def func3():
	print('一')
	yield 1
	print('二')
	yield 2
	print('三')
	yield 3
d = func3()
print(next(d))

每次next取值,只激活一次yield

生成器函数和普通函数的区别和联系:
相同点:
1,定义格式相同,都是使用def语句
2,二者都可以有return语句,也可以没有
3,函数体格式相同
不同点:
1,生成器函数中主要是用yield返回数据,而函数主要使用return返回数据。二者返回值不同,函数可以根据需要返回任何类型,生成器函数执行返回。
2,函数调用会执行代码,生成器不会,等待next激活代码

斐波那契数列:数列当中每一个值都等于前面两个数相加的值
[1,1,2,3,5,7,13,21…]

def fibo(n):
	i,a b = 0,1,1
	while i < n:
		yield a
		a,b = b,a+b
		i+=1
d = fibo(10)
for i in d:
	print(i)
import time
print('hello')
time.sleep(3)
print('hello2')
import datetime
print(datetime.datetime.now())
from datetime import datetime # 导入部分模块
print(datetime.now())
from datetime import datetime as dt #别名
print(dt.now())
import test
test.a()
print(test.__name__)  #文件名
if __name__ == '__main__':
	print(__name__)
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值