python 生成器物件 常見內建函式

2022-09-10 09:45:13 字數 3864 閱讀 8217

目錄

try:

name

except exception as e:

print("**錯誤")

else:

print('**正常才會執行了')

finally:

print('**不管是否異常都會執行')

# 斷言

name = 'jason'

assert isinstance(name, str)

# 主動丟擲異常

raise zerodivisionerror('除數不能為0')

d = 

res = d.__iter__() # stopiteration的異常,該異常是在迴圈物件窮盡所有元素時的報錯

# while實現迴圈列印

while true:

try:

print(res.__next__())

except stopiteration as e:

break

# for迴圈列印

for i in d:

print(i)

生成器其實就是自定義迭代器

# 定義階段就是乙個普通函式

def my_generator():

print('first')

yield 11

print('second')

yield 22

"""當函式體內含有yield關鍵字 那麼在第一次呼叫函式的時候

並不會執行函式體** 而是將函式變成了生成器(迭代器)

"""res = my_generator() # 呼叫函式不執行函式體**,而是將函式變成生成器(迭代器)

print(res) # ret = res.__next__() # 每執行乙個__next__**往下執行到yield停止 返回後面的資料

print(ret) # first \n 11

ret = res.__next__() # 再次執行__next__接著上次停止的地方繼續往後 遇到yield再停止

print(ret) # second \n 22

def my_range(start, stop=none, step=1):

if not stop:

stop, start = start, 0

while start < stop:

yield start

start += step

for i in my_range(2, 10, 2):

print(i)

def generator_func1(age):

print('age is %s ' % age)

while true:

name = yield

print('%s nb' % name)

res = generator_func1(18) # 不會執行函式體**,而是轉換成生成器

res.__next__()

res.send('json') # 給yield傳值

res.send('***') # 再次給yield傳值

相同點:可以返回值,支援多個並且組織成元組

不同點:

yield:

1. 函式體**遇到yield不會結束,會'停住'

2. yield可以將函式變成生成器,並且支援外界傳值

return:

1. 函式體**遇到return直接結束

# 列表生成式

l1 = [11, 22, 33, 44, 55, 66]

res = [i + 1 for i in l1 if i != 44]

print(res) # [12, 23, 34, 56, 67]

# 生成器表示式

'''生成器表示式內部的**只有在迭代取值的時候才會執行'''

res1 = (i + 1 for i in l1 if i != 44)

print(res1) # at 0x7fbbb7e96ca8>

print(res1.__next__()) # 12

print(res1.__next__()) # 23

print(res1.__next__()) # 24

1. abs()  # 取絕對值

print(abs(-10)) # 10

2. all() any()

l = [11, 22, 0]

print(all(l)) # 所有元素為true才是true

print(any(l)) # 所有元素有乙個為true就是true

3. bin() oct() hex()

print(bin(12)) # 0b1100 二進位制

print(oct(12)) # 0o14 八進位制

print(hex(12)) # 0xc 十六進製制

4. bytes() str()

res = '測試'

ret1 = bytes(res, 'utf8')

print(ret1) # b'\xe6\xb5\x8b\xe8\xaf\x95'

ret2 = str(ret1, 'utf8')

print(ret2) # 測試

5. callable() # 是否看呼叫(看是否能加括號執行)

i = 1

def f():

pass

print(callable(i), callable(f)) # flse true

6. chr() ord()

print(chr(65)) # a 按照asicc碼表的數字列印字元

print(ord('a')) # 65 按照asicc碼表的字元列印數字

7. complex() 複數

print(complex(123)) # (123+0j)

8. dir() # 檢視當前物件可以呼叫的名字

def f():

pass

print(dir(f))

9. divmode() # 接收兩個數字型別引數,返回乙個包含商和餘數的元組(a // b, a % b)

print(divmode(101, 10)) # (10 1)

應用:# 生成頁數

num, more = divmod(201, 10)

if more:

num += 1

print('總共需要%s頁' % num)

10. eval() exec() # 將字串內的內容載入執行

s1 = "print('hello')"

s2 = '''

for i in range(10):

print(i)

'''eval(s1) # 只能執行簡單的內容

exec(s2) # 可以執行複雜的內容

11. isinstance() # 判斷是否屬於某個資料型別

i = 1

print(isinstance(i, int)) # true

12. pow()

print(pow(4, 3)) # 64 4**3

13. round()

print(round(4.5)) # 4

print(round(4.6)) # 5

14. sum() # 求和

l = [11, 22, 33, 44]

print(sum(l)) # 110 將列表 l 中的元素求和

python 生成器和常見的內建函式

try 被監測的 except 錯誤型別 as e else 被監測的 不報錯的時候執行 finally 無論是否報錯最終都會執行 斷言 了解 name assert isinstance name,str 主動報異常 raise 錯誤型別d res d.iter stopiteration whi...

生成器 內建函式

本質就是迭代器,手動寫的迭代器 生成器函式def func print 123 yield 生成器 func 執行結果 沒有結果 ret func 這個過程相當於 例項化物件 print ret 生成器物件 想執行這個 要用next 和迭代器一樣 或者遍歷它 next ret 123 print n...

生成器物件

python的for語句迴圈本質上就是通過呼叫iterable可迭代物件的 iter 方法獲得乙個iterator迭代器物件,然後不斷呼叫iterator迭代器物件 next 方法實現的。iterator迭代器物件則是乙個需要實現 iter 和 next 兩個迭代器協議方法的物件。python中生成...