乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      生成器 推導(dǎo)式 內(nèi)置函數(shù)

       印度阿三17 2019-07-19

      今日總結(jié)

      1. 生成器

        生成器的本質(zhì)就是一個(gè)迭代器

        生成器和迭代器的區(qū)別:

        ? 生成器是 python 自帶的

        ? 生成器是程序員寫的

      2. 生成器

      • 節(jié)省空間-------惰性機(jī)制
      • 不能逆行
      • 一次性
      • 一個(gè) next 對應(yīng)一個(gè) yield
      • yield 能夠返回內(nèi)容,還能夠返回多次
      • yield 能夠臨時(shí)停止循環(huán)
      • yield 能夠記錄執(zhí)行的位置
      • yield from —— 將一個(gè)可迭代對象的元素逐個(gè)返回
      1. 定義一個(gè)生成器

        基于函數(shù)

        函數(shù)體中存在 yield 就是一個(gè)生成器

        函數(shù)名 ( ) 就是產(chǎn)生一個(gè)生成器

      推導(dǎo)式

      list : [ ] [ 變量(加工后的變量) for 循環(huán) 加工條件]

      dic : {} {鍵 : 值 for 循環(huán) 加工條件}

      set : { } {變量 (加工后的變量) for 循環(huán) 加工條件 }

      生成迭代器 : ( 變量 (加工后的變量) for 循環(huán) 加工條件)

      內(nèi)置函數(shù)

      生成器

      迭代器:python 中內(nèi)置的一種節(jié)省空間的工具

      生成器的本質(zhì)是一個(gè)迭代器

      迭代器和生成器額區(qū)別 : 一個(gè)是 python 自帶的,一個(gè)是程序員自己寫的

      def func():
          if 3 > 2:
              yield "你好"
          if 4 > 2:
              yield "我好"
          yield "大家好"
      g = func()
      print(g.__next__())
      print(g.__next__())
      print(g.__next__())
      
      #
      你好
      我好
      大家好
      
      下面這樣的結(jié)果也是一樣的
      def func():
          if 3 > 2:
              yield "你好"
          if 4 > 2:
              yield "我好"
          yield "大家好"
      g = func()
      for i in g:
          print(i)
      
      
      # for 循環(huán)的本質(zhì)
      while True:
          try:
              print(g.__next__())
          except StopIteration :
              break
      def foo():
          for i in range(10):
              pass
              yield i
          count = 1
          while True:
              yield count
              count  = 1
      g = foo()
      print(next(g))
      print(next(g))
      print(next(g))
      
      # 或者for i in g
            print(i)
      這里是新的坑
      
      
      def foo():
          for i in range(10):
              pass
              yield i
          count = 1
          while True:
              yield count
              count  = 1
      print(foo().__next__())
      print(foo().__next__())    #記住這個(gè)是調(diào)用新的生成器
      
      #
      0
      0
      send()   只是了解
      
      
      def func():
          a = yield "是send"
          print(a)
          yield "你好"
      g = func()
      print(g.send(None))  #send  第一次只能是 None
      print(g.send(123))

      生成器應(yīng)用場景

      def func():
          lst = []
          for i in range(1000000):
              lst.append(i)
          return lst
      print(func())   #這個(gè)結(jié)果實(shí)在是太強(qiáng)大了,雞蛋太多  所以找只雞 想吃就下一個(gè)
      
      
      所以參考下面的代碼
      
      
      def func():
          for i in range(100000):
              yield i
      g = func()
      for i in range(50):     #想吃幾個(gè)拿幾個(gè)
          print(next(g))
      
      def func():
          lst1 = ["牛肉羊","雞蛋羹","玉米","火腿腸","米飯","拉面"]
          for i in lst1:
              yield i
      g = func()
      print(next(g))
      print(next(g))
      #
      牛肉羊
      雞蛋羹
      def func():
          lst1 = ["牛肉羊","雞蛋羹","玉米","火腿腸","米飯","拉面"]
          lst2 = ["小浣熊","蘋果","梨子","桃子","西瓜","芒果"]
          yield from lst1
          yield from lst2
      g = func()
      print(next(g))
      print(next(g))
      
      
      結(jié)果
      
      牛肉羊
      雞蛋羹
      def func():
          lst1 = ["牛肉羊","雞蛋羹","玉米","火腿腸","米飯","拉面"]
          lst2 = ["小浣熊","蘋果","梨子","桃子","西瓜","芒果"]
          yield from lst1
          yield from lst2
      g = func()
      print(next(g))
      print(next(g))             #是先走完 lst1   然后再走 lst2
      for i in g :
          
      #結(jié)果
      
      牛肉羊
      雞蛋羹
      玉米
      火腿腸
      米飯
      拉面
      小浣熊
      蘋果
      梨子
      桃子
      西瓜
      芒果

      生成器總結(jié):

      1. 在函數(shù)中將return 改寫成yield 就是一個(gè)生成器
      2. yield 會記錄執(zhí)行位置
      3. return 和 yield 都是返回
      4. return 可以寫多個(gè)但是只執(zhí)行一次,yield 可以寫多個(gè),還可以返回多次
      5. 一個(gè)__next__對應(yīng)一個(gè) yield
      6. 生成器可以利用 for 循環(huán)獲取值
      7. yield from—— 將可迭代元素逐個(gè)返回
      8. 在函數(shù)內(nèi)部,能將 for 循環(huán)和 while 循環(huán)臨時(shí)暫停

      推導(dǎo)式

      list  推導(dǎo)式
      [變量 for i in range(20)]
      
      lst = []
      for i in range(20):
          lst.append(i)
      print(lst)         為了簡潔代碼  有了以下的操作
      
      print(list(i for i in range(20)))
      
      篩選模式
      [變量(加工后的變量) for 循環(huán)  加工方式]
      
      
      lst = []
      for i in range(20):
          if i % 2 == 0:
              lst.append(i)
      print(lst)
      
      
      #print([i for i in range(20) if i % 2 == 0 ])
      
      這兩個(gè)的結(jié)果是一樣的,你看第二個(gè)多簡潔
      生成器表達(dá)式
      循環(huán)模式
      
      g = (i for i in range(20))
      print(next(g))
      print(next(g))
      
      print(list([i for i in range(20)]))
      
      #字典模式
       #  {鍵:值 for 循環(huán)  加工條件}
      
      print({i:i 1 for i in range(10)})
      #{0: 1, 1: 2, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}
      
      print({i:i 1 for i in range(20) if i % 2 == 0})
      {0: 1, 2: 3, 4: 5, 6: 7, 8: 9, 10: 11, 12: 13, 14: 15, 16: 17, 18: 19}
      
      集合推導(dǎo)式
      
      
      print({i for i in range(20)})
      {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19}
      
      
      print({i for i in range(20) if i % 2 == 0 })
      {0, 2, 4, 6, 8, 10, 12, 14, 16, 18}
      
      生成器總結(jié)
      list:
      
      # [變量(加工后的變量) for循環(huán)]
      
      # [變量(加工后的變量) for循環(huán) 加工條件]
      
      
      
      # 生成器表達(dá)式:
      
      # (變量(加工后的變量) for循環(huán))
      
      # (變量(加工后的變量) for循環(huán) 加工條件)
      
      
      
      # 字典推導(dǎo)式:
      
      # {鍵:值 for循環(huán) 加工條件}
      
      
      
      # 集合推導(dǎo)式:
      
      # {變量(加工后的變量) for循環(huán) 加工條件}

      內(nèi)置函數(shù)一

      eval:執(zhí)行字符串類型的代碼,并返回最終結(jié)果。

      eval('2   2')  # 4
      n=81
      eval("n   4")  # 85
      eval('print(666)')  # 666

      exec:執(zhí)行字符串類型的代碼。

      s = '''
      for i in [1,2,3]:
          print(i)
      '''
      exec(s)

      以上兩個(gè)內(nèi)置函數(shù)很強(qiáng)大 工作中禁止使用

      hash:獲取一個(gè)對象(可哈希對象:int,str,Bool,tuple)的哈希值。

      print(hash(12322))
      print(hash('123'))
      print(hash('arg'))
      print(hash('alex'))
      print(hash(True))
      print(hash(False))
      print(hash((1,2,3)))
      
      '''
      -2996001552409009098
      -4637515981888139739
      1
      2528502973977326415
      '''

      help:函數(shù)用于查看函數(shù)或模塊用途的詳細(xì)說明。

      print(help(list))
      print(help(str.split))

      callable:函數(shù)用于檢查一個(gè)對象是否是可調(diào)用的。如果返回True,仍然可能調(diào)用失?。坏绻祷谾alse,調(diào)用對象ojbect絕對不會成功。

      name = 'alex'
      def func():
          pass
      print(callable(name))  # False
      print(callable(func))  # True

      int:函數(shù)用于將一個(gè)字符串或數(shù)字轉(zhuǎn)換為整型。

      print(int())  # 0
      print(int('12'))  # 12
      print(int(3.6))  # 3
      print(int('0100',base=2))  # 將2進(jìn)制的 0100 轉(zhuǎn)化成十進(jìn)制。結(jié)果為 4

      float:函數(shù)用于將整數(shù)和字符串轉(zhuǎn)換成浮點(diǎn)數(shù)。

      complex:函數(shù)用于創(chuàng)建一個(gè)值為 real imag * j 的復(fù)數(shù)或者轉(zhuǎn)化一個(gè)字符串或數(shù)為復(fù)數(shù)。如果第一個(gè)參數(shù)為字符串,則不需要指定第二個(gè)參數(shù)。。

      print(float(3))  # 3.0
      print(complex(1,2))  # (1 2j)

      bin:將十進(jìn)制轉(zhuǎn)換成二進(jìn)制并返回。

      oct:將十進(jìn)制轉(zhuǎn)化成八進(jìn)制字符串并返回。

      hex:將十進(jìn)制轉(zhuǎn)化成十六進(jìn)制字符串并返回。

      print(bin(10),type(bin(10)))  # 0b1010 <class 'str'>
      print(oct(10),type(oct(10)))  # 0o12 <class 'str'>
      print(hex(10),type(hex(10)))  # 0xa <class 'str'>

      divmod:計(jì)算除數(shù)與被除數(shù)的結(jié)果,返回一個(gè)包含商和余數(shù)的元組(a // b, a % b)。

      round:保留浮點(diǎn)數(shù)的小數(shù)位數(shù),默認(rèn)保留整數(shù)。

      pow:求xy次冪。(三個(gè)參數(shù)為xy的結(jié)果對z取余)

      print(divmod(7,2))  # (3, 1)
      print(round(7/3,2))  # 2.33
      print(round(7/3))  # 2
      print(round(3.32567,3))  # 3.326
      print(pow(2,3))  # 兩個(gè)參數(shù)為2**3次冪
      print(pow(2,3,3))  # 三個(gè)參數(shù)為2**3次冪,對3取余。

      bytes:用于不同編碼之間的轉(zhuǎn)化。

      # s = '你好'
      # bs = s.encode('utf-8')
      # print(bs)
      # s1 = bs.decode('utf-8')
      # print(s1)
      # bs = bytes(s,encoding='utf-8')
      # print(bs)
      # b = '你好'.encode('gbk')
      # b1 = b.decode('gbk')
      # print(b1.encode('utf-8'))

      ord:輸入字符找當(dāng)前字符編碼的位置

      chr:輸入當(dāng)前編碼的位置數(shù)字找出其對應(yīng)的字符

      # ord 輸入字符找該字符編碼的位置
      # print(ord('a'))
      # print(ord('中'))
      
      # chr 輸入位置數(shù)字找出其對應(yīng)的字符
      # print(chr(97))
      # print(chr(20013))

      repr:返回一個(gè)對象的string形式(原形畢露)。

      # %r  原封不動(dòng)的寫出來
      # name = 'taibai'
      # print('我叫%r'%name)
      
      # repr 原形畢露
      print(repr('{"name":"alex"}'))
      print('{"name":"alex"}')

      all:可迭代對象中,全都是True才是True

      any:可迭代對象中,有一個(gè)True 就是True

      # all  可迭代對象中,全都是True才是True
      # any  可迭代對象中,有一個(gè)True 就是True
      # print(all([1,2,True,0]))
      # print(any([1,'',0]))
      來源:https://www./content-4-339751.html

        本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多