python迭代器

一、列表推导式

1、推导式的格式:
[处理迭代中的每一个元素 for语句 条件判断]

返回1~100所有的偶数 [2,4,6,8…100]

# 方法一:基本操作
def test_derived ():
    result = []
    for i in range(1, 101):
        if i % 2 == 0:
            result.append(i)
    print(result)
# 方法二: 列表推导式
print([i for i in range(1, 101) if i % 2 == 0])

2、用途
a、格式化字符串

	print(["第" + str(i) + "题" for i in range(1, 10)])

b、解析字典

	print({item.split('=')[0]: item.split('=')[1] for item in cookie.split(';')})

二、迭代器

1、自省函数
自省: 汉语解释为”自我反省“
Python的自省:Python运行的时候知道对象自身有哪些东西

	dir()  # Python查看对象有哪些属性
	hasattr()  # Python查看对象是否有每个属性
	type()     # Python查看对象是什么类型
	isinstance()  # Python查看对象是不是某个类型
	id()  # Python查看对象的id是什么
	callable()  # Python判断对象是不是可调用的(即是不是可以加括号调用)
	help()  # Python查看某个对象的帮助信息
	getattr()  # 获得某个对象的属性
	setattr()   # 设置某个对象的属性

2、可迭代对象
可以用for操作的对象都是可迭代对象(list tuple str set dict)

for i in 1:  # TypeError: 'int' object is not iterable
    print(i)	

如何判断一个对象是不是可迭代对象

a、可以使用hasattr方法进行判断,看对象是否拥有"__iter__"属性
print(hasattr(list, "__iter__"))  # True
print(hasattr(tuple, "__iter__")) # True
print(hasattr(int, "__iter__"))  # False	
b、isinstance(obj,Iterable)

3、迭代器
迭代器的意义:节省内存
迭代器的协议:
1.迭代器类型必须实现__iter__和 next(Python2中是next)
2. __iter__方法必须 返回 self
3. __next__必须返回下一个值,如果没有下一个则抛出StopIterator异常

如何判断某个对象是不是迭代器

a、isinstance(obj,Iterator)

b、看对象有没有 __iter__属性和__next__属性
from typing import Iterator  # Iterator 与 list  tuple  dict  int 一样
obj = iter(range(1, 2))  # 把range(1,2)转换为Iterator类型
for attr in dir(list):
    print(attr)  # __iter__	

4、生成器
生成器的意义: 为了快速方便地创建一个迭代器,所以生成器一定是一个迭代器
yield的关键字,来实现快速创建迭代器
yield怎么用? 在函数中用
如果一个函数中有yield关键字,调用函数的时候不会执行函数的内容,会返回一个对象(这个对象类型是生成器类)

def squares(start, stop):  # 第一种
    for i in range(start, stop + 1):
        yield i * i

squares2 = (i * i for i in range(1, 4))  # 第二种

yield return 区别
共同点:都是Python的关键字
不同点:return 是结束函数并返回值,yield是暂时离开函数

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值