迭代器:
可以通过for遍历的对象,比如:列表,元组,字符串等
迭代对象需要有__iter__()
方法,他们均可使用for循环。使用isinstance()
方法判断对象是否为可迭代对象
例:
3.9
from typing import Iterable
print(isinstance('aaa',Iterable))
自定义迭代器
from typing import Iterable
print(isinstance('aaa',Iterable))
# 自定义迭代器
class MyIterator:
def __init__(self):
self.s = '阿阿斯蒂芬'
self.i = 0
def __iter__(self):
return self
def __next__(self):
if self.i<4:
n=self.s[self.i]
self.i+=1
return n
else :
raise StopIteration
mi=iter(MyIterator())
for i in mi:
print(i)
生成器
用来创建迭代器的工具,使用yield语句。yield语句返回的是一个生成器(在python中,一边循环一边计算的机制称为生成器)
创建
1,使用yield语句
def reverse(data):
for i in range(len(data)-1,-1,-1):
yield data[i]
for char in reverse('hello'):
print(char)
range函数是python内置函数,使用:https://www.runoob.com/python/python-func-range.html
2,使用生成器表达式(使用小括号)
# 列表
lis=[x*x for x in range(5)]
print(lis)
# 生成器
gen=(x*x for x in range(5))
for g in gen:
print(g)
装饰器
学习前提:闭包
def x(id):
def y(name):
print('id:',id,'name:',name)
return y
y=x('it')
y('这是啥')
实现方式:函数实现,类实现
使用方式:通过@标识
支持多个装饰器
基于函数:
def funA(fun):
def funB(*args,**kw):
print('函数'+fun.__name__+'开始执行')
fun(*args,**kw)
print('函数'+fun.__name__+'执行完成')
return funB
@funA
def funC(name):
print('hello',name)
funC('www')
基于类实现:
class Test(object):
def __init__(self,func):
print('函数名是:%s'%func.__name__)
self.__func=func
def __call__(self, *args, **kwargs):
self.__func()
@Test
def hello():
print('hello')
hello()