如何理解Python關鍵字yield
阿新 • • 發佈:2018-12-11
>>> class Bank(): # 建立銀行,構建ATM機,只要沒有危機,就可以不斷地每次從中取100 ... crisis = False ... def create_atm(self): ... while not self.crisis: ... yield "$100" >>> hsbc = Bank() # when everything's ok the ATM gives you as much as you want >>> corner_street_atm = hsbc.create_atm() >>> print(corner_street_atm.next()) $100 >>> print(corner_street_atm.next()) $100 >>> print([corner_street_atm.next() for cash in range(5)]) ['$100', '$100', '$100', '$100', '$100'] >>> hsbc.crisis = True # 危機來臨,沒有更多的錢了 >>> print(corner_street_atm.next()) <type 'exceptions.StopIteration'> >>> wall_street_atm = hsbc.create_atm() # 即使建立一個新的ATM,銀行還是沒錢 >>> print(wall_street_atm.next()) <type 'exceptions.StopIteration'> >>> hsbc.crisis = False # 危機過後,銀行還是空的,因為該函式之前已經不滿足while條件 >>> print(corner_street_atm.next()) <type 'exceptions.StopIteration'> >>> brand_new_atm = hsbc.create_atm() # 必須構建一個新的atm,恢復取錢業務 >>> for cash in brand_new_atm: ... print cash $100 $100 $100 $100 $100 $100 $100 $100 $100 ...