Python生成器怎么使用

本篇內(nèi)容介紹了“Python生成器怎么使用”的有關(guān)知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習一下如何處理這些情況吧!希望大家仔細閱讀,能夠?qū)W有所成!

目前創(chuàng)新互聯(lián)公司已為上千多家的企業(yè)提供了網(wǎng)站建設(shè)、域名、虛擬空間、網(wǎng)站托管、服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計、博愛網(wǎng)站維護等服務(wù),公司將堅持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

生成器

僅僅擁有生成某種東西的能力,如果不用__next__方法是獲取不到值得。

創(chuàng)建一個生成器函數(shù)

>>>  def scq():... print("11")# 當函數(shù)代碼塊中遇到y(tǒng)ield關(guān)鍵字的時候,這個函數(shù)就是一個生成器函數(shù)... yield  1... print("22")... yield 2... print("33")... yield 3...

把生成器賦值給一個對象

>>> r = scq()

查看r的蘇劇類型并且輸出r的值

>>> print(type(r),r)<class 'generator'> <generator object scq at 0x000001F117D8DF10>

當執(zhí)行生成器的__next__的時候,代碼會按照順序去執(zhí)行,當執(zhí)行到y(tǒng)ield時會返回并提出,yield后面的值就是返回值,然后記錄代碼執(zhí)行的位置,并退出

Python生成器怎么使用

Python生成器怎么使用

執(zhí)行結(jié)果

C:Python35python.exe F:/Python_code/sublime/Week5/Day03/s1.py0 1 2 3 4Process finished with exit code 0

迭代器

具有訪問生成器的能力,可以訪問到生成器的值,類似于生成器的__next__方法,一個一個值一個值得去迭代,只能夠按照順序的去查找。

特點:

  1. 鴻蒙官方戰(zhàn)略合作共建——HarmonyOS技術(shù)社區(qū)

  2. 訪問者不需要關(guān)心迭代器內(nèi)部的結(jié)構(gòu),僅需通過next()方法不斷去取下一個內(nèi)容

  3. 不能隨機訪問集合中的某個值 ,只能從頭到尾依次訪問

  4. 訪問到一半時不能往回退

  5. 便于循環(huán)比較大的數(shù)據(jù)集合,節(jié)省內(nèi)存

優(yōu)化上面range或xrange的生成器

def  irange(start, stop, step=1): while start != stop: yield start start +=  step  else:  raise StopIteration for n in irange(1, 10):  """for循環(huán)只要遇到StopIteration就會停止"""  print(n)ret = irange(1, 20) print(ret)  # 返回一個生成器,相當于只在內(nèi)存中創(chuàng)建了一個值 print(list(ret)) # 如果想要得到全部的值,變成列表就可以 /Library/Frameworks/Python.framework/Versions/3.5/bin/python3.5 /Users/ansheng/MyPythonCode/hello.py 1 2 3 4 5 6 7 8 9 <generator object irange at 0x1021df7d8> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]  Process finished with exit code 0

Python之裝飾器

Python生成器怎么使用

現(xiàn)要在執(zhí)行func這個函數(shù)前后執(zhí)行一些操作,就可以創(chuàng)建一個裝飾器來實現(xiàn):

#!/usr/bin/env python # _*_ coding: utf-8 _*_  def decorator(func): # 創(chuàng)建一個裝飾器函數(shù),接受的參數(shù)arg參數(shù)就是func函數(shù)名  def inner(*args, **kwargs): print("執(zhí)行函數(shù)之前") ret = func(*args, **kwargs) print("執(zhí)行函數(shù)之后") return ret  return inner  @decorator # 如果要讓某個函數(shù)使用裝飾器,只需要在這個函數(shù)上面加上@+裝飾器名 def func(arg): print(arg)  func("Hello World!")

輸出結(jié)果為:

/usr/bin/python3.5 /home/ansheng/Documents/PycharmProjects/blogcodes/裝飾器.py 執(zhí)行函數(shù)之前 Hello World! 執(zhí)行函數(shù)之后  Process finished with exit code 0

多個裝飾器裝飾同一個函數(shù)

#!/usr/bin/env python # _*_ coding: utf-8 _*_  def decorator1(func): def inner(): print("開始之前執(zhí)行裝飾器01") ret = func() print("結(jié)束之后執(zhí)行裝飾器01") return ret  return inner   def decorator2(func): def inner(): print("decorator2>>>Start...") ret = func() print("decorator2>>>End...") return ret  return inner   @decorator1 @decorator2 def index(): print("執(zhí)行函數(shù)...")  index()

輸出結(jié)果:

/usr/bin/python3.5 /home/ansheng/Documents/PycharmProjects/blogcodes/裝飾器.py 開始之前執(zhí)行裝飾器01 decorator2>>>Start... 執(zhí)行函數(shù)... decorator2>>>End... 結(jié)束之后執(zhí)行裝飾器01  Process finished with exit code 0

更多實例

  1. #!/usr/bin/env python 

  2. # _*_ coding:utf-8 _*_ 

  3.  

  4. # Created by 安生 on 2017/2/9 

  5.  

  6. """ 

  7. 函數(shù)裝飾器 

  8. """  

  9.  

  10. def decorator(func): 

  11. def wrapped(*args, **kwargs): 

  12. return func(*args, **kwargs) 

  13.  

  14. return wrapped  

  15.  

  16. @decorator 

  17. def func(a, b): 

  18. return a + b  

  19.  

  20. print(func(1, 2)) 

  21. """ 

  22. 類裝飾器 

  23. """  

  24.  

  25. class decorator: 

  26. def __init__(self, func): 

  27. self.func = func 

  28.  

  29. def __call__(self, *args, **kwargs): 

  30. return self.func(*args, **kwargs)  

  31.  

  32. @decorator 

  33. def func(a, b): 

  34. return a + b  

  35.  

  36. print(func(1, 2)) 

  37. """ 

  38. 帶參數(shù)的函數(shù)裝飾器 

  39. """  

  40.  

  41. def parameter(a, b): 

  42. print(a, b) 

  43.  

  44. def decorator(func): 

  45. def wrapped(*args, **kwargs): 

  46. return func(*args, **kwargs) 

  47.  

  48. return wrapped  

  49. return decorator  

  50.  

  51. @parameter(1, 2) 

  52. def func(a, b): 

  53. return a + b 

  54.  

  55.  

  56. print(func(10, 20)) 

  57. """ 

  58. 帶參數(shù)的類裝飾器 

  59. """  

  60.  

  61. def parameter(a, b): 

  62. print(a + b) 

  63.  

  64. class decorator: 

  65. def __init__(self, func): 

  66. self.func = func 

  67.  

  68. def __call__(self, *args, **kwargs): 

  69. return self.func(*args, **kwargs) 

  70.  

  71. return decorator  

  72.  

  73. @parameter(1, 2) 

  74. def func(a, b): 

  75. return a + b  

  76.  

  77. print(func(10, 20)) 

  78.  

  79. """ 

  80. 帶參數(shù)的類裝飾器 

  81. """ 

  82.  

  83.  

  84. def parameter(a, b): 

  85. print(a, b) 

  86.  

  87. def decorator(cls): 

  88. class wrapped: 

  89. def __init__(self, *args, **kwargs): 

  90. self.cls = cls(*args, **kwargs) 

  91.  

  92. def __getattr__(self, item): 

  93. return getattr(self.cls, item) 

  94.  

  95. return wrapped 

  96.  

  97. return decorator  

  98.  

  99. @parameter(1, 2) 

  100. class CLS: 

  101. def __init__(self): 

  102. self.a = 'a' 

  103.  

  104. def P(self, v): 

  105. print(v) 

  106.  

  107.  

  108. obj = CLS() 

  109. print(obj.a) 

  110. obj.P('Hello,') 

  111.  

  112. """ 

  113. 為函數(shù)中和類中的方法添加裝飾器 

  114. """  

  115.  

  116. def Call(aClass): 

  117. calls = 0 

  118.  

  119. def onCall(*args, **kwargs): 

  120. nonlocal calls 

  121. calls += 1 

  122. print('call %s to %s' % (calls, func.__name__)) 

  123. return aClass(*args, **kwargs) 

  124.  

  125. return onCall  

  126.  

  127. @Call 

  128. def func(a, b): 

  129. return a + b  

  130.  

  131. print(func(1, 2))  

  132.  

  133. class CLS: 

  134. def __init__(self): 

  135. self.a = 'a' 

  136.  

  137. @Call 

  138. def b(self): 

  139. return self.a  

  140.  

  141. obj = CLS() 

  142. print(obj.b()) 
     

“Python生成器怎么使用”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實用文章!

新聞名稱:Python生成器怎么使用
文章網(wǎng)址:http://www.muchs.cn/article48/iheihp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供App開發(fā)、做網(wǎng)站全網(wǎng)營銷推廣、ChatGPT網(wǎng)站排名、

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運營