python迭代器,生成式和推导式 yield关键字

本文介绍了Python中的迭代器,如列表、元组、字符串和字典的迭代。接着,详细讲解了生成器,包括生成器函数的使用和`yield`关键字的工作原理。此外,还展示了如何通过`isMuNumber`方法创建自定义迭代器。最后,讨论了推导式的应用,如列表推导式、判断奇偶数的方法以及字典推导式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#迭代器 每次迭代的结果,作为下一次迭代的初始值
#通常的迭代器有,列表,元组,字符串,字典

for i in 'stre': #此处字符串是一个容器也是一个迭代器
print(i) #for语句触发迭代器的迭代功能

#使用迭代器遍历字典
dicts = {'a' : 15, 'b' : 12, 'c' : 13, 'd' : 14}
for item in dicts:
print(dicts[item])

#两个BIF,一个是iter(),一个是next()

string = 'abcdefghijklmn'
it = iter(string)
for i in range(len(string)):
print(next(it), end = '')

print()
print('----以下是生成器内容----')
#生成器 如果一个函数中包含yield关键字,则这个函数便是生成器函数
#函数执行过程

#先写一个简单的生成器函数
def f():
print('in f()', 112)
yield 1
print('in f()', 'asd')
yield 2
print('in f()', '1vxcv12')
yield 3
print('in f()', 'erytrg45')
yield 4
g = f()
g.__next__()
g.__next__()
g.__next__()
g.__next__()
#g.__next__() #超出迭代范围报错
#yeild函数在执行过程中,当执行到yield语句时,将会跳出函数,并且保存函数当前状态
#下次函数调用时,会继续从上次跳出的位置继续向下执行

print(g.__iter__() is g) #通过__iter__()返回自身,再通过__next__()迭代
g1 = f()

for item in g1:
print(item)

#yeild例子
class MyNumber:
def __init__(self, start, end):
self.start = start
self.end = end

def isMuNumber(self, num):
if num < 2:
return False
for k in range(2, num):
if num % k == 0:
return False
return True

def __iter__(self):
for number in range(self.start, self.end + 1):
if self.isMuNumber(number):
yield number

for x in MyNumber(1, 20):
print(x)

#推导式:
#列表推导式 [表达式 for 循环]
MyList = [x ** x for x in range(1, 5)]
print(MyList)

#判断奇偶第一种方法
list1 = [x for x in range(15)]
MyList = [x for x in(list(filter(lambda x : x % 2 != 0, list1)))]
print(MyList)

#判断奇偶第二种方法。,与1按位与 为1是奇数
MyList1 = [x for x in list1 if x & 1 == 0]
print(MyList1)

tup = (x for x in list1 if x & 1 == 0) #这是一个生成器对象,而不是元组
print(tup)

print(dir(tup))
print(tup.__next__())

#生成器的一种创建方式:
#(表达式 for if) -> generator(生成器对象)
#generator.__next__()
#获取生成器中的数据,将数据返回,并且不能保存数据
#生成器中的数据只有在使用的时候才会创建
#节约内存
#字典推导式:
#{ }
MyList2 = [x for x in range(16)]
dict1 = {key : {1, 'q'} for key in MyList2}
print(dict1)

#关键字a-z, 值[1, 2, 3, 4, 5]

character = [chr(x) for x in range(97, 123)]
print(character)
dict2 = {key : index + 1 for index, key in enumerate(character)}
print(dict2)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值