判断是否可迭代
In [4]: from collections import Iterable
In [6]: isinstance(123,Iterable)
Out[6]: False
In [11]: isinstance((123),Iterable)
Out[11]: False
In [12]: isinstance((123,),Iterable)
Out[12]: True
In [13]: isinstance([123],Iterable)
Out[13]: True
In [14]: isinstance("123",Iterable)
Out[14]: True
In [15]: isinstance({1:1,2:2},Iterable)
Out[15]: True
迭代器
nums = list() a = 0 b = 1 i = 0 while i < 10: nums.append(a) a, b = b, a + b i += 1 for num in nums: print(num)
import time from collections import Iterable from collections import Iterator class Fibonacci(object): def __init__(self, all_num): self.all_num = all_num self.current_num = 0 self.a = 0 self.b = 1 def __iter__(self): return self def __next__(self): if self.current_num < self.all_num: ret = self.a self.a, self.b = self.b, self.a + self.b self.current_num += 1 return ret else: raise StopIteration fibo = Fibonacci(10) for num in fibo: print(num, end=" ")
def create_num(all_num): print("---1---") a, b = 0, 1 current_num = 0 while current_num < all_num: print("---2---") yield a # 如果一个函数中有yield语句 那么就不是函数 而是一个生成器模板 print("---3---") a, b = b, a + b current_num += 1 print("---4---") # 如果在调用函数的时候,发现这个函数中有yield 那么不是调用函数 而是创建一个生成器对象 obj = create_num(10) # for num in obj: # print(num) result = next(obj) print(result)
import gevent import time def f1(n): for i in range(n): print(gevent.getcurrent(), i) gevent.sleep(0.5) def f2(n): for i in range(n): print(gevent.getcurrent(), i) gevent.sleep(0.5) def f3(n): for i in range(n): print(gevent.getcurrent(), i) gevent.sleep(0.5) print("--1--") g1 = gevent.spawn(f1, 5) print("--2--") g2 = gevent.spawn(f2, 5) print("--3--") g3 = gevent.spawn(f3, 5) print("--4--") g1.join() g2.join() g3.join()
gevent demo
from gevent import monkey import gevent import random import time # 有耗时操作时需要 monkey.patch_all() # 将程序中用到的耗时操作的代码,换位gevent中自己实现的模块 def f1(n): for i in range(n): print(gevent.getcurrent(), i) time.sleep(random.random()) def f2(n): for i in range(n): print(gevent.getcurrent(), i) time.sleep(random.random()) def f3(n): for i in range(n): print(gevent.getcurrent(), i) time.sleep(random.random()) gevent.joinall([ gevent.spawn(f1, 5), gevent.spawn(f2, 5), gevent.spawn(f3, 5) ])