­

Python擴展內容

  • 2020 年 2 月 13 日
  • 筆記

Python擴展內容

閱讀本文需要3分鐘

① python中yield關鍵字的使用:

  • yield 是一個類似 return 的關鍵字,只是這個函數返回的是個生成器
  • 當你調用這個函數的時候,函數內部的程式碼並不立馬執行 ,這個函數只是返回一個生成器對象
  • 當你使用for進行迭代的時候,函數中的程式碼才會執行
  • 生成器特點:可迭代;只能讀取一次;實時生成數據,不全存在記憶體中。
def fun():      yield "aaa"      yield "bbb"      yield "ccc"    #返回可迭代對象(生成器)  a = fun()  print(a) # <generator object fun at 0x10f26e990>    #可以將迭代對象轉成列表  # b = list(a)  # print(b) #['aaa', 'bbb', 'ccc']    #遍歷(迭代)輸出,注意:只能讀取一次  for i in a:      print(i)    '''  aaa  bbb  ccc  '''
  • 案例:
import json    #案例一、這是一段過程化程式碼編寫:  str= '[{"name":"zhangsan","age":22},{"name":"lisi","age":19},{"name":"wangwu","age":24}]'  data = json.loads(str) #解碼JSON數據  # 過濾出年齡大於20歲以上的資訊,並輸出  for item in data:      if item['age']>20:          #輸出數據          print('-' * 20)          print(item['name'],":",item['age'])    '''  #輸出結果:  --------------------  zhangsan : 22  --------------------  wangwu : 24  '''    #案例二:程式碼拆分(將數據的處理封裝成函數):  def fun1():      str= '[{"name":"zhangsan","age":22},{"name":"lisi","age":19},{"name":"wangwu","age":24}]'      data = json.loads(str) #解碼JSON數據      #過濾出年齡大於20歲以上的資訊,並輸出      dlist = []      for item in data:          if item['age']>20:              #將過濾出來的數據放置到dlist中              print('-' * 20)              dlist.append(item)        return dlist    # 使用(輸出數據)  for i in fun1():      print(i['name'], ":", i['age'])      '''  #輸出結果:  --------------------  --------------------  wangwu : 24  wangwu : 24  '''    #案例三:程式碼拆分(使用yield返回生成器):  def fun1():      str= '[{"name":"zhangsan","age":22},{"name":"lisi","age":19},{"name":"wangwu","age":24}]'      data = json.loads(str) #解碼JSON數據      #過濾出年齡大於20歲以上的資訊,並輸出      for item in data:          if item['age']>20:              #將過濾出來的數據放置到dlist中              print('-' * 20)              yield item    # 使用(輸出數據)  for i in fun1():      print(i['name'], ":", i['age'])      '''  #輸出結果:  --------------------  zhangsan : 22  --------------------  wangwu : 24    '''

② 裝飾器的使用:

  • python裝飾器就是用於拓展原來函數功能的一種函數,這個函數的特殊之處在於它的返回值也是一個函數,
  • 使用python裝飾器的好處就是在不用更改原函數的程式碼前提下給函數增加新的功能
  • 無參數的裝飾器實例
# 無參數的裝飾器實例  def deco(dd):      def _deco():          print("start....")          dd()          print("end.....")      return _deco    @deco  def demo():      print("demo()............")      if __name__ == "__main__":      d = demo      d()      #demo()
  • 輸出結果
start....  demo()............  end....
# 帶參數的裝飾器實例  def deco(func):      def _deco(a, b):          print("before myfunc() called.")          ret = func(a, b)          print("  after myfunc() called. result: %s" % ret)          return ret      return _deco    @deco  def myfunc(a, b):      print(" myfunc(%s,%s) called." % (a, b))      return a + b    if __name__ == "__main__":      myfunc(1, 2)      myfunc(3, 4)
  • 輸出結果
before myfunc() called.   myfunc(1,2) called.    after myfunc() called. result: 3  before myfunc() called.   myfunc(3,4) called.    after myfunc() called. result: 7

歲月有你,惜惜相處

發現更多精彩

關注公眾