成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Python的三大神器,你知道是哪三大嗎?史上最詳細的入門教程!

開發 后端
Python的三大神器:裝飾器.迭代器與生成器!這就是Python的三大神器,好了廢話不多說。直接來上干貨吧!

[[232170]]

Python的三大神器:裝飾器、迭代器與生成器!這就是Python的三大神器,好了廢話不多說。直接來上干貨吧!

生成器

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

創建一個生成器函數

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

把生成器賦值給一個對象

  1. >>> r = scq() 

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

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

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

Python的三大神器,你知道是哪三大嗎?史上最詳細的入門教程!

 

Python的三大神器,你知道是哪三大嗎?史上最詳細的入門教程!

 

執行結果

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

迭代器

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

特點:

  1. 訪問者不需要關心迭代器內部的結構,僅需通過next()方法不斷去取下一個內容
  2. 不能隨機訪問集合中的某個值 ,只能從頭到尾依次訪問
  3. 訪問到一半時不能往回退
  4. 便于循環比較大的數據集合,節省內存

優化上面range或xrange的生成器

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

Python之裝飾器

Python的三大神器,你知道是哪三大嗎?史上最詳細的入門教程!

 

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

  1. #!/usr/bin/env python 
  2. # _*_ coding: utf-8 _*_ 
  3.  
  4. def decorator(func): # 創建一個裝飾器函數,接受的參數arg參數就是func函數名 
  5.  
  6. def inner(*args, **kwargs): 
  7. print("執行函數之前"
  8. ret = func(*args, **kwargs) 
  9. print("執行函數之后"
  10. return ret 
  11.  
  12. return inner 
  13.  
  14. @decorator # 如果要讓某個函數使用裝飾器,只需要在這個函數上面加上@+裝飾器名 
  15. def func(arg): 
  16. print(arg) 
  17.  
  18. func("Hello World!"

輸出結果為:

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

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

  1. #!/usr/bin/env python 
  2. # _*_ coding: utf-8 _*_ 
  3.  
  4. def decorator1(func): 
  5. def inner(): 
  6. print("開始之前執行裝飾器01"
  7. ret = func() 
  8. print("結束之后執行裝飾器01"
  9. return ret 
  10.  
  11. return inner 
  12.  
  13.  
  14. def decorator2(func): 
  15. def inner(): 
  16. print("decorator2>>>Start..."
  17. ret = func() 
  18. print("decorator2>>>End..."
  19. return ret 
  20.  
  21. return inner 
  22.  
  23.  
  24. @decorator1 
  25. @decorator2 
  26. def index(): 
  27. print("執行函數..."
  28.  
  29. index() 

輸出結果:

  1. /usr/bin/python3.5 /home/ansheng/Documents/PycharmProjects/blogcodes/裝飾器.py 
  2. 開始之前執行裝飾器01 
  3. decorator2>>>Start... 
  4. 執行函數... 
  5. decorator2>>>End... 
  6. 結束之后執行裝飾器01 
  7.  
  8. 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()) 
     
責任編輯:龐桂玉 來源: 今日頭條
相關推薦

2020-09-29 07:38:22

Python裝飾器框架

2024-06-24 21:10:12

2023-11-26 00:26:00

2022-11-27 08:12:11

RocketMQ源碼工具類

2018-09-04 22:50:19

區塊鏈去中心化區塊鏈技術

2016-09-13 19:21:07

CTO管理技術

2021-03-15 13:30:06

自動駕駛智能停車機器人

2023-05-05 07:12:09

GPT產品主題

2012-12-25 09:53:40

域名

2011-04-21 13:53:52

2013-08-05 11:34:02

2019-07-17 10:55:40

Kubernetes工具Katacoda

2022-04-01 06:30:50

云計算 3.0云計算去中心化

2023-12-06 07:36:27

前端開發

2021-09-27 10:37:36

人工智能AI深度學習

2017-07-28 10:55:49

AITayAlexa

2021-01-31 20:51:55

PuppeteerNode核心

2024-09-29 09:12:47

分布式系統性能

2021-11-30 09:11:48

數據泄露勒索軟件攻擊

2018-03-15 09:53:48

大數據機器學習云服務
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 97国产爽爽爽久久久 | 成人在线视频网站 | 欧美色视频免费 | 精品久久久一区 | 日韩在线视频一区二区三区 | 中文字幕 在线观看 | 亚洲欧美日韩久久久 | 久久99精品视频 | 中文字幕av高清 | 91成人午夜性a一级毛片 | 一级免费毛片 | 国产精品永久免费观看 | 国产精品中文在线 | a级黄色毛片免费播放视频 国产精品视频在线观看 | 性视频网 | 黄网站在线播放 | 亚洲永久精品国产 | 在线视频 欧美日韩 | 久久久久中文字幕 | 黄色三级免费网站 | 欧美成ee人免费视频 | av一区二区三区四区 | 一区二区欧美在线 | www.婷婷亚洲基地 | 国产免费一区二区三区免费视频 | 在线播放国产一区二区三区 | 欧美国产视频一区二区 | 欧美国产视频一区二区 | 亚洲精品aⅴ | 免费三级黄 | 午夜小电影 | 韩国理论电影在线 | 中文字幕在线精品 | 国产精品爱久久久久久久 | 亚洲精品视频播放 | 久久精品91久久久久久再现 | 有码在线 | 国产精品99久久久久久宅男 | 黄网站免费在线看 | 欧美激情综合 | 欧美区日韩区 |