中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python生成器怎么使用

發布時間:2021-11-23 17:01:13 來源:億速云 閱讀:226 作者:iii 欄目:編程語言

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

生成器

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

創建一個生成器函數

>>>  def scq():... print("11")# 當函數代碼塊中遇到yield關鍵字的時候,這個函數就是一個生成器函數... 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>

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

Python生成器怎么使用

Python生成器怎么使用

執行結果

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

迭代器

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

特點:

  1. 鴻蒙官方戰略合作共建——HarmonyOS技術社區

  2. 訪問者不需要關心迭代器內部的結構,僅需通過next()方法不斷去取下一個內容

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

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

  5. 便于循環比較大的數據集合,節省內存

優化上面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循環只要遇到StopIteration就會停止"""  print(n)ret = irange(1, 20) print(ret)  # 返回一個生成器,相當于只在內存中創建了一個值 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生成器怎么使用

現要在執行func這個函數前后執行一些操作,就可以創建一個裝飾器來實現:

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

輸出結果為:

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

多個裝飾器裝飾同一個函數

#!/usr/bin/env python # _*_ coding: utf-8 _*_  def decorator1(func): def inner(): print("開始之前執行裝飾器01") ret = func() print("結束之后執行裝飾器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("執行函數...")  index()

輸出結果:

/usr/bin/python3.5 /home/ansheng/Documents/PycharmProjects/blogcodes/裝飾器.py 開始之前執行裝飾器01 decorator2>>>Start... 執行函數... decorator2>>>End... 結束之后執行裝飾器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. 函數裝飾器 

  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. 帶參數的函數裝飾器 

  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. 帶參數的類裝飾器 

  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. 帶參數的類裝飾器 

  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. 為函數中和類中的方法添加裝飾器 

  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生成器怎么使用”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

鄂温| 开鲁县| 讷河市| 海南省| 错那县| 崇州市| 益阳市| 濉溪县| 广河县| 郓城县| 台北县| 长泰县| 永登县| 云梦县| 庆阳市| 全南县| 宁陵县| 江北区| 榆中县| 孟村| 军事| 安达市| 嫩江县| 霍林郭勒市| 大冶市| 瑞丽市| 贵南县| 格尔木市| 陆川县| 余干县| 溧阳市| 观塘区| 扎鲁特旗| 延川县| 平舆县| 北辰区| 南部县| 鄄城县| 平凉市| 同江市| 恩平市|