try:
被監測的**
except 錯誤型別 as e:
...else:
被監測的**不報錯的時候執行
finally:
無論是否報錯最終都會執行
# 斷言(了解)
name = '***'
assert isinstance(name,str)
# 主動報異常
raise 錯誤型別
d =
res = d.__iter__() # stopiteration
while true:
try:
print(res.__next__())
except stopiteration as e:
break
for i in d:
print(i)
"""
迭代取值
優點:1.不依賴於索引的一種通用取值方式
缺點:1.取值的順序永遠都是固定的從左往右 無法重複獲取
索引取值
缺點:1.需要提供有序容器型別才可取值(不是一種通用的方式)
優點:1.可以重複取值
"""
"""
生成器其實就是自定義迭代器
"""# 定義階段就是乙個普通函式
def my_ge():
print('first')
yield 123,222,333
print('second')
# yield 456,444,555
"""當函式體內含有yield關鍵字 那麼在第一次呼叫函式的時候
並不會執行函式體** 而是將函式變成了生成器(迭代器)
"""# 呼叫函式:不執行函式體** 而是轉換為生成器(迭代器)
# res = my_ge()
# ret = res.__next__() # 每執行乙個__next__**往下執行到yield停止 返回後面的資料
# print(ret)
# ret = res.__next__() # 再次執行__next__接著上次停止的地方繼續往後 遇到yield再停止
# print(ret)
def my_range(start, stop=none, step=1):
if not stop:
stop = start
start = 0
while start < stop:
yield start
start += step
# res = my_range(10)
# for i in res:
# print(i)
# res = my_range(1,10)
# for i in res:
# print(i)
res = my_range(1,10,3)
for i in res:
print(i)
def eat(name):
print('%s 準備乾飯!!!'%name)
while true:
food = yield
print('%s 正在吃 %s' % (name, food))
res = eat('jason') # 並不會執行** 而是轉換成生成器
res.__next__()
res.send('肉包子')
res.send('蓋澆飯')
yield
1.可以返回值(支援多個並且組織成元組)
2.函式體**遇到yield不會結束而是"停住"
3.yield可以將函式變成生成器 並且還支援外界傳值
return
1.可以返回值(支援多個並且組織成元組)
2.函式體**遇到return直接結束
l = [11, 22, 33, 44, 55, 66, 77, 88, 99]
# res = [i+1 for i in l if i!=44]
# print(res)
# res1 = (i+1 for i in l if i!=44)
"""生成器表示式內部的**只有在迭代取值的時候才會執行
"""# print(res1.__next__())
# print(res1.__next__())
# print(res1.__next__())
"""迭代器物件 生成器物件 我們都可以看成是"工廠"
只有當我們所要資料的時候工廠才會加工出"資料"
上述方式就是為了節省空間
"""# 求和
def add(n, i):
return n + i
# 呼叫之前是函式 呼叫之後是生成器
def test():
for i in range(4):
yield i
g = test() # 初始化生成器物件
for n in [1, 10]:
g = (add(n, i) for i in g)
"""第一次for迴圈
g = (add(n, i) for i in g)
第二次for迴圈
g = (add(10, i) for i in (add(10, i) for i in g))
"""res = list(g)
print(res)
#a. res=[10,11,12,13]
#b. res=[11,12,13,14]
#c. res=[20,21,22,23]
#d. res=[21,22,23,24]
# 1.abs() 絕對值
# print(abs(123))
# print(abs(-123))
# 2.all() any()
# l = [11,22,33,0]
# print(all(l)) # 所有的元素都為true結果才是true
# print(any(l)) # 所有的元素只要有乙個為true結果就為true
# 3.bin() oct() hex() 進製數
# print(bin(123))
# print(oct(123))
# print(hex(123))
# 4.bytes() str()
# res = '金牌班 最牛逼'
# res1 = bytes(res,'utf8')
# print(res1)
# res2 = str(res1,'utf8')
# print(res2)
# res1 = res.encode('utf8')
# print(res1)
# res2 = res1.decode('utf8')
# print(res2)
# 5.callable() 是否可呼叫(能不能加括號執行)
# s1 = 'jason'
# def index():
# pass
# print(callable(s1),callable(index)) # false true
# 6.chr() ord()
# print(chr(65)) # 根據ascii碼轉數字找字元
# print(ord('a')) # 65
# 7.complex() 複數
# print(complex(123)) # (123+0j)
# 8.dir() 檢視當前物件可以呼叫的名字
# def index():
# pass
# print(dir(index))
# print(index.__name__)
# 9.divmod()
# print(divmod(101,10))
"""總資料100 每頁10條 10頁"""
"""總資料99 每頁10條 10頁"""
"""總資料101 每頁10條 11頁"""
# num,more = divmod(233,10)
# if more:
# num += 1
# print('總共需要%s頁'%num)
# 10.eval()只能識別簡單的語法 exec()可以識別複雜語法 都是將字串中的資料內容載入並執行
# res = """
# 你好啊
# for i in range(10):
# print(i)
# """
# res = """
# print('hello world')
# """
# eval(res)
# exec(res)
# 11.isinstance() 判斷是否屬於某個資料型別
# print(isinstance(123,float)) # false
# print(isinstance(123,int)) # true
# 12.pow()
# print(pow(4,3))
# 13.round()
# print(round(4.8))
# print(round(4.6))
# print(round(8.5))
# 14.sum()
# l = [11,22,333,44,55,66]
# print(sum(l))
python 生成器物件 常見內建函式
目錄try name except exception as e print 錯誤 else print 正常才會執行了 finally print 不管是否異常都會執行 斷言 name jason assert isinstance name,str 主動丟擲異常 raise zerodivisi...
生成器 內建函式
本質就是迭代器,手動寫的迭代器 生成器函式def func print 123 yield 生成器 func 執行結果 沒有結果 ret func 這個過程相當於 例項化物件 print ret 生成器物件 想執行這個 要用next 和迭代器一樣 或者遍歷它 next ret 123 print n...
python 生成器作用 Python生成器
生成器介紹 在函式內部包含yield關鍵字,那麼該函式執行的結果是生成器,生成器就是迭代器。生成器的功能 把函式結果做成迭代器 以一種優雅的方式封裝好iter,next 提供了一種自己定義迭代器的方式。使用生成器建立乙個迭代器 def a print a yield 11 使用yield,執行後返回...