个人网站二级域名做淘宝客,怎么创建,网站制作可以询价么,光谷做网站推广公司装饰器
什么是装饰器#xff1f;
用来装饰其他函数#xff0c;即为其他函数添加特定功能的函数。
装饰器的两个基本原则#xff1a;
装饰器不能修改被装饰函数的源码
装饰器不能修改被装饰函数的调用方式 什么是可迭代对象#xff1f;
在python的任意对象中#xff…装饰器
什么是装饰器
用来装饰其他函数即为其他函数添加特定功能的函数。
装饰器的两个基本原则
装饰器不能修改被装饰函数的源码
装饰器不能修改被装饰函数的调用方式 什么是可迭代对象
在python的任意对象中只要它定义了可以返回一个迭代器的__iter__方法或者定义了可以支持下标索引的__getitem__方法那么它就是一个可迭代对象通俗低讲就是可以通过for循环进行遍历。 如何判断一个对象是否是可迭代对象
方法一isinstanceiterable
方法二hasattr__getitem__
from collections import Iterableclass Student:pass
print(isinstance([],Iterable)) #True
print(isinstance(Student(),Iterable)) #Falseprint(hasattr([],__getitem__)) #True
print(hasattr(Student(),__getitem__)) #False 什么是迭代器
迭代器就是实现了__next__和__iter__方法(缺一不可)的对象就叫迭代器。
其实__iter__方法返回迭代器自身__next__方法不断返回迭代器中的下一个值直到容器中没有更多的元素时则抛出Stoplteration异常以终止迭代。
为什么有了可迭代对象还要有迭代器呢
工厂模式(需要什么数据就生成什么数据)节约内存空间
from itertools import countcounter count(start10)
print(type(counter))
print(dir(counter))
print(next(counter))
print(next(counter))
for i in range(100):print(next(counter))
print(len(counter)) #报错迭代器没有len属性print(isinstance(counter,Iterator)) #True
print(isinstance([],Iterator)) # False
a [1,2,3,45,6]
#将a这个可选代对象转变为选代器对象
a_iter iter(a)
print(type(a_iter))print(len(a_iter)) #报错没有len属性
print(next(a_iter))
print(next(a_iter))
for item in a iter:print(item)
for item in a_iter:print(item)
for item in a:print(item)
# print(next(a iter)) #报错
生成器中yield关键字的作用
1.程序每次在代码中遇到yield关键字后会返回结果
2.保留当前函数的运行状态等待下一次调用下次调用时从上一次返回yield的语句处开始执行后面的语句
生成器是一种特殊的迭代器
def demo():print(hello)tyield 5 # returnprint(world)print(t)def demo1():print(hello)return 5
print(type(demo()))
print(dir(demo()))c demo() #没有执行生成器函数 这行代码没有输出代表没有执行生成器函数a demol() #普通函数在调用时直接执行 这行代码执行输出的结果是hello
print(next(c)) #预激活生成器 这行代码执行输出的是hello5print(c.send(None))
c.spend(test) #send方法调用生成器并且把test字符串传入到生成器内部 def demo():print(hello)tyield5 #returnprint(world)print(t)
def demo1():print(hello)return 5print(type(demo()))
print(dir(demo()))cdemo() #没有执行生成器函数 这个步骤的时候没有执行生成器
ademo1() #普通函数在调用时直接执行
print(next(c))# 预激活生成器
# 这个步骤执行生成器了yield是执行一次先返回结果下一次保留之前的状态然后执行yield后的代码
print(c.send(None))
c.send(test) # send方法调用生成器并且把test字符串传入到生成器内部