日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python二十二:迭代,三元表达式,列表解析

發布時間:2025/6/15 python 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python二十二:迭代,三元表达式,列表解析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? 迭代器協議:對象必須提供一個next方法,執行該方法要么返回迭代中的下一項,要么就引起一個StopIteration異常,以終止迭代(只能往后走,不能往前退)
? 可迭代對象:實現了迭代器協議的對象(如何實現:對象內部定義一個_iter_()方法)
? 協議是一種約定,可迭代對象實現了迭代器協議,python的內部工具(如for循環,sum,min,max函數等)使用迭代器協議訪問對象

? python中強大的for循環機制

? ? ? ? ? ? ?for循環本質:循環所有對象,全都是使用迭代器協議.

lt = ['l', 'i', 'u'] # 下標訪問方式 lt[0] lt[1] lt[2] # lt[3] # 超出邊界報錯# 遵循迭代器協議訪問方式 iter_test = lt.__iter__() iter_test.__next__() iter_test.__next__() iter_test.__next__() # iter_test.__next__()# 超出邊界報錯# for 循環訪問方式 # for 循環的本質就是遵循迭代器協議的方式,先調用iter_test = lt.__iter__() # 再調用iter_test.__next__(),直到for循環捕捉到StopIteration終止循環 # for 循環所有對象的本質都是一樣的道理 for i in lt:print(i)# while模仿for循環 iter_test = lt.__iter__() while True:try:print(iter_test.__next__())except StopIteration:print("迭代完畢,循環終止了...")break

生成器初步探索

? 生成器:可以理解為一種數據類型,這種數據類型自動實現了迭代器協議(其他的數據類型需要調用自己內置的__iter__()方法).所以生成器就是可迭代對象.

? 生成器分類及在python中的表現形式:1.生成器函數:常規函數定義,但是使用yield而不是return返回結果.yield一次返回一個結果,在每個結果中間,掛起函數的狀態,以便下次重它離開的地方繼續執行.

? ? ? ?2. 生成器表達式:類似于列表推導,但是生成器返回按需產生結果的一個對象,而不是一次構建一個結果列表.

? ? ? python使用生長器對延遲操作提供了支持.所謂延遲操作,是指在需要的時候產生結果,而不是立刻產生結果.這也是生成器的主要好處.

name="劉備" # 三元表達式 res = "厲害了" if name=="劉備" else "不行"列表解析:語法:[expression for iter_val in iterable][expression for iter_val in iterable if cond_expr]lt = [i+2 for i in range(10) ]lt = [i+2 for i in range(10) if i>6]生成器:1.來自函數(生成器函數,可以保存函數的運行狀態)def gene():yield 6yield 7yield 8v = gene()print(v.__next__())# 可以在之間加上代碼代碼print(v.__next__())2. 來自列表解析 v = (i for i in range(10)) print(v.__next__()) # 生成器本身就有 __next__()

生成器特性:

? ?1. 語法上和函數類似. 只是生成器函數使用yield返回一個值

? ?2. 自動實現迭代器協議,可以直接__next__()

? ?3. 狀態掛起:生成器使用yield語句返回一個值.

?生成器優點: 1.延遲計算,一次返回一個結果.并不會一次產生全部結果,這樣不僅節省內存,而且這種機制非常適合處理大數據.

三國人物.txt文件內容{"name":"劉備", "age":"25"}{"name":"關羽", "age":"24"}{"name":"張飛", "age":"23"}{"name":"曹操", "age":"24"}{"name":"郭嘉", "age":"23"}{"name":"曹丕", "age":"5"}def getPeople():with open("三國人物", "r", encoding="utf-8") as f:for i in f:yield igene = getPeople() # for g in gene: # print(eval(g)["age"]) # 使用三元表達式求和 res = sum(int(eval(g)["age"]) for g in gene) print(res)

?

總結

以上是生活随笔為你收集整理的python二十二:迭代,三元表达式,列表解析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。