一、列表推导式
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是暂时离开函数