网站被谷歌降权,海口网红美食餐厅,wordpress 前端发帖,推广网站的方法有哪些1.迭代器#xff08;Iterator#xff09;
概念#xff1a;
迭代意味着重复多次#xff0c;就像循环一样。
迭代器是一个可以记住遍历的位置的对象。
迭代器对象从集合的第一个元素开始访问#xff0c;直到所有的元素被访问完结束。
迭代器只能往前不会后退。
1.iter…1.迭代器Iterator
概念
迭代意味着重复多次就像循环一样。
迭代器是一个可以记住遍历的位置的对象。
迭代器对象从集合的第一个元素开始访问直到所有的元素被访问完结束。
迭代器只能往前不会后退。
1.iter()返回迭代器自身。2.next()返回容器的下一个元素如果没有元素了抛StopIteration异常。也可以使用内置函数
nextnext(it)和it.next()等效。
1、可迭代对象Iterable
可以被用作如for循环之中对象通常都是可迭代的。
其中一些包括所有的序列类型如liststrtuple。
集合类型如setfrozenset。
映射类型如dict。
文件对象和其他满足迭代协议的对象即实现了iter方法或者getitem方法
2、不可迭代对象
那些不支持迭代协议的对象都是非迭代对象常见的有数字类型intfloat ...
#[1.list]
#列表是可迭代的
my_list[1,2,3]
for item in my_list:print(item)会依次打印1,2,3#[2.string]
#字符串也是可迭代的
my_stringhello
for char in my_string:print(char)会依次打印h,e,l,l,o#[3.dict]
#字典是可迭代的迭代的是它的键
my_dict{a:1,b:2}
for key in my_dict:print(key)#会依次打印a,b#[4.int]
#数字是非可迭代的
my_number10
print(my_number.__iter__)#报错#[5.float]
#浮点类型是非可迭代的
float_number0.34
print(float_number.__iter__)#报错
2、生成器
1、概念
Python中一种特殊类型的迭代器本质上是可以记住执行位置的函数。
生成器使用yield语句来生成一个值序列不是一次性地产生一个完整的数据集并返回。
2、特点
1.与迭代器类似生成器也支持惰性计算它们一次只生成一个项目
2.在每次产生输出之后其状态会被挂起直到下一次使用next()函数或for循环请求下一个值
3.当生成器函数执行完成时或者遇到无法再产生新值的条件时会抛出StopIteration异常
4.使用生成器函数定义生成器
5.生成器是通过在函数中使用yield关键字来定义的。
每当yield语句运行时它会返回一个值并在此时挂起函数的状态包括局部变量、指针位置等。下一次调用时它会从中断点继续执行
3、实例
1、简单生成器函数
def count_up_to(max):count1
while countmax:yield countcount1
#创建生成器
countercount_up_to(5)
#使用next()获取值
print(next(counter))#输出1
print(next(counter))#输出2
#可以继续调用next()获取剩余的值或者使用for循环
for number in counter:print(number)
#输出3 4 5
在这个示例中生成器函数count_up_to接受参数max并计数到这个值。
每次yield被调用它就会产生当前的计数值
并在下一次调用时从上次离开的地方继续执行。 2、生成器表达式
#使用生成器表达式创建生成器
gen_exp(x*x for x in range(4))
#使用for循环迭代生成器
for num in gen_exp:print(num)
#依次打印0,1,4,9生成器表达式看起来类似于列表推导
但使用圆括号而不是方括号。
它们非常适合于简单
的场景
其中一个完整的生成器函数可能显得过于冗长。
3、yield关键字
用于定义生成器函数中的一个位置这里会产出yield一个值给调用者并暂停函数的执行直到下一次通过next()来请求另一个值。
当生成器函数中执行到一个yield表达式时它会返回该表达式后面的值给生成器的调用者并暂停执行所有局部变量和状态都会被保留。
yield的挂起的函数执行可以在下一次调用next()或迭代时继续从上次暂停的位置恢复。
def simple_generator():print(Stage1)yield 1print(Stage2)yield 2print(Stage3)yield 3
gensimple_generator()
#每次调用next()时生成器从上次暂停的地方开始直到遇到下一个yield
valnext(gen)
#输出Stage1返回1
valnext(gen)
#输出Stage2返回2
总结生成器的特点
内存效率可以用于无法放在内存中的大型数据集。
改善性能惰性计算意味着只有在必要时才计算值可以减少不必要的计算节省计算资源。
简洁性使用生成器和生成器表达式可以使代码更简洁易懂。
适用于管道处理生成器可以被链式结合用于构建复杂的数据管道。