判斷是否可迭代babel
In [4]: from collections import Iterableapp
In [6]: isinstance(123,Iterable)
Out[6]: Falsedom
In [11]: isinstance((123),Iterable)
Out[11]: False函數
In [12]: isinstance((123,),Iterable)
Out[12]: Trueurl
In [13]: isinstance([123],Iterable)
Out[13]: Truespa
In [14]: isinstance("123",Iterable)
Out[14]: Truecode
In [15]: isinstance({1:1,2:2},Iterable)
Out[15]: True對象
迭代器blog
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) ])
gevent 圖片下載
import urllib.request import gevent from gevent import monkey monkey.patch_all() def downloader(img_name,img_url): req = urllib.request.urlopen(img_url) img_content = req.read() with open(img_name, "wb") as f: f.write(img_content) def main(): gevent.joinall([ gevent.spawn(downloader,"1.jpg","http://img20.360buyimg.com/babel/s1180x940_jfs/t1/51493/25/9615/95389/5d6e06c8Ef20c0dc8/fac5b4df2a2359d4.jpg"), gevent.spawn(downloader,"2.jpg","http://img20.360buyimg.com/mobilecms/s300x300_jfs/t3103/354/455086795/183887/79ea92ac/57b6e31cNc8c760d8.jpg!q70.jpg") ]) if __name__ == "__main__": main()