久久亚洲成a人片熟女精品色一区二区三区|国产精品视频第一精品视频|av天堂热无码手机版|亚洲?v无码久久无遮挡|国产精品偷伦视频免费观看国产|麻豆国产自产精品丰满熟妇|av无码av不卡一区二区|久久亚洲精品中文字

ARTICLE DETAIL

資訊詳情

深耕商務(wù)建站與企業(yè)官網(wǎng)運(yùn)營(yíng)的一線(xiàn)實(shí)戰(zhàn)洞察。

Python流程控制核心語(yǔ)法詳解:從縮進(jìn)、條件分支到循環(huán)與match-case

Python流程控制核心語(yǔ)法詳解:從縮進(jìn)、條件分支到循環(huán)與match-case 寫(xiě)Python斷斷續(xù)續(xù)也有幾年了陸陸續(xù)續(xù)帶過(guò)不少剛?cè)腴T(mén)的新人。我發(fā)現(xiàn)一個(gè)很有意思的現(xiàn)象很多從C、Java轉(zhuǎn)過(guò)來(lái)的同學(xué)寫(xiě)流程控制語(yǔ)句時(shí)總是下意識(shí)地找大括號(hào)找不到就開(kāi)始慌。其實(shí)Python的流程控制語(yǔ)法比大多數(shù)語(yǔ)言都要簡(jiǎn)單——它真正勸退新人的點(diǎn)藏在縮進(jìn)、冒號(hào)和幾個(gè)不起眼的細(xì)節(jié)里。恰好最近有不少朋友在后臺(tái)問(wèn)我Python基礎(chǔ)語(yǔ)法怎么學(xué)最扎實(shí)借著這篇核心語(yǔ)法二我把流程控制這塊徹底講透把我在真實(shí)項(xiàng)目里踩過(guò)的坑、總結(jié)的技巧一并交代清楚。無(wú)論你是剛裝好Python、還在折騰VSCode或PyCharm環(huán)境配置的新手還是寫(xiě)過(guò)一陣子但總覺(jué)得自己代碼不夠地道的半熟手這篇都適合你。1. 縮進(jìn)與冒號(hào)Python流程控制的第一道門(mén)檻1.1 為什么縮進(jìn)是語(yǔ)法的一部分而不是代碼風(fēng)格很多從其他語(yǔ)言轉(zhuǎn)過(guò)來(lái)的同學(xué)第一次寫(xiě)Python的if語(yǔ)句時(shí)都會(huì)產(chǎn)生一個(gè)疑問(wèn)為什么if下面一定要縮進(jìn)不縮進(jìn)行不行這就要說(shuō)到Python設(shè)計(jì)哲學(xué)里一個(gè)非常核心的決策——用縮進(jìn)來(lái)表達(dá)代碼塊。在C語(yǔ)言里if后面用花括號(hào){}圈定范圍縮進(jìn)純粹是為了好看不縮進(jìn)代碼照樣跑。Python則干脆把縮進(jìn)本身變成語(yǔ)法的一部分。同一個(gè)代碼塊內(nèi)的語(yǔ)句必須有相同的縮進(jìn)量解釋器就靠這個(gè)來(lái)判斷哪些語(yǔ)句屬于同一個(gè)分支、同一個(gè)循環(huán)體。這不是風(fēng)格問(wèn)題是語(yǔ)法規(guī)則。違反它解釋器會(huì)直接拋IndentationError。我自己的體會(huì)是這個(gè)設(shè)計(jì)其實(shí)是在幫你強(qiáng)迫養(yǎng)成好習(xí)慣。因?yàn)榭s進(jìn)參與語(yǔ)法解析你只要打開(kāi)任何一個(gè)Python文件一眼就能看出哪些代碼在哪個(gè)邏輯塊里可讀性天然有保障。壞處也很明顯——如果項(xiàng)目里有人用Tab縮進(jìn)、有人用空格縮進(jìn)合并代碼時(shí)就會(huì)出現(xiàn)代碼看著對(duì)齊了但解釋器認(rèn)為不在一個(gè)代碼塊的詭異情況。注意PEP8官方推薦使用4個(gè)空格作為縮進(jìn)單位。無(wú)論你多喜歡Tab鍵的手感在Python項(xiàng)目里請(qǐng)統(tǒng)一用空格。1.2 我在真實(shí)項(xiàng)目里遇到的縮進(jìn)災(zāi)難現(xiàn)場(chǎng)說(shuō)一個(gè)我剛開(kāi)始帶項(xiàng)目時(shí)真實(shí)發(fā)生的事。當(dāng)時(shí)團(tuán)隊(duì)里有個(gè)新同事從某編輯器里粘貼了一段代碼所有行開(kāi)頭都變成了Tab而項(xiàng)目其他文件全是4個(gè)空格。代碼貼進(jìn)去之后看起來(lái)縮進(jìn)層次完全沒(méi)問(wèn)題編輯器里顯示也是對(duì)齊的但一運(yùn)行就報(bào)IndentationError: unindent does not match any outer indentation level。排查了很久才發(fā)現(xiàn)在某些行Tab被編輯器自動(dòng)展開(kāi)成了8個(gè)空格另一些行則保持了Tab字符。同一個(gè)邏輯塊的代碼有的行縮進(jìn)是8個(gè)空格有的是一個(gè)Tab視覺(jué)上可能同樣是8個(gè)空格寬解釋器就認(rèn)為它們不是同一個(gè)代碼塊。怎么解決兩個(gè)辦法。第一在VSCode里按下CtrlShiftP輸入Convert Indentation to Spaces把整個(gè)文件的Tab統(tǒng)一轉(zhuǎn)成空格。第二更推薦的方式——在VSCode的設(shè)置里搜索editor.insertSpaces勾選Insert spaces when pressing Tab然后editor.tabSize設(shè)為4。這樣你按Tab鍵時(shí)編輯器會(huì)自動(dòng)插入4個(gè)空格從根本上杜絕混用問(wèn)題。PyCharm里則是Editor - Code Style - Python - Tabs and Indents把Indent設(shè)為4并在右下角把Tab顯示成4 spaces。其實(shí)還有一種更隱蔽的情況有時(shí)候代碼是從網(wǎng)頁(yè)、PDF或者聊天工具里復(fù)制過(guò)來(lái)的復(fù)制進(jìn)來(lái)的時(shí)候縮進(jìn)已經(jīng)被改成了全角空格。這種字符普通編輯器根本看不出來(lái)但解釋器會(huì)報(bào)錯(cuò)。排查方式很簡(jiǎn)單在VSCode里開(kāi)啟Render Whitespace設(shè)置項(xiàng)editor.renderWhitespace設(shè)為all所有空格和Tab字符都會(huì)以灰點(diǎn)和箭頭形式顯示出來(lái)一眼就能看出哪里混入了奇怪字符。1.3 冒號(hào)到底在冒什么縮進(jìn)之外Python流程控制語(yǔ)句還有一個(gè)視覺(jué)特征——冒號(hào)。if、for、while、def、class這些語(yǔ)句的行尾都有冒號(hào)很多新手容易忽略寫(xiě)完條件回車(chē)發(fā)現(xiàn)報(bào)語(yǔ)法錯(cuò)誤回頭一看冒號(hào)忘了。冒號(hào)的作用是告訴解釋器接下來(lái)這行開(kāi)始是一個(gè)新的代碼塊請(qǐng)按縮進(jìn)規(guī)則解析。它背后其實(shí)反映了Python一個(gè)重要的設(shè)計(jì)取舍不靠關(guān)鍵字或符號(hào)去結(jié)束一個(gè)代碼塊而是靠縮進(jìn)回歸到上一級(jí)。你可能覺(jué)得這個(gè)設(shè)計(jì)啰嗦但真正常寫(xiě)之后會(huì)發(fā)現(xiàn)它極其舒服。C語(yǔ)言里一個(gè)復(fù)雜函數(shù)的花括號(hào)嵌套會(huì)讓你數(shù)得眼花繚亂Python里縮進(jìn)層次就是邏輯層次基本不會(huì)出現(xiàn)少寫(xiě)一個(gè)右花括號(hào)導(dǎo)致一大片代碼邏輯錯(cuò)亂這種經(jīng)典災(zāi)難。2. if/elif/else條件分支的坑與正確姿勢(shì)2.1 真假值判斷Python的條件比你想象的寬泛絕大多數(shù)編程語(yǔ)言里if后面必須接一個(gè)布爾表達(dá)式true或false。Python不一樣它允許你在if后面放任意對(duì)象解釋器會(huì)沿著bool()這條隱式轉(zhuǎn)換路徑去判斷這個(gè)對(duì)象是真是假。這條規(guī)則極其重要因?yàn)樾率衷谶@個(gè)地方踩坑的概率非常高。Python中以下值在布爾上下文中全部被視為False常量False和None數(shù)值0、0.0、0j空字符串空列表[]、空元組()、空字典{}、空集合set()自定義對(duì)象中定義了__bool__()返回False或者定義了__len__()返回0除此之外的絕大多數(shù)對(duì)象都是True。這個(gè)設(shè)計(jì)最大的好處是你可以寫(xiě)出非常自然的判斷代碼。比如判斷一個(gè)列表是否為空初學(xué)者可能會(huì)這樣寫(xiě)if len(items) 0: print(有數(shù)據(jù))而Pythonic的寫(xiě)法是if items: print(有數(shù)據(jù))同理判斷一個(gè)字符串是否為空# 不推薦 if name ! : print(名字不為空) # 推薦 if name: print(名字不為空)這兩者的邏輯等價(jià)但后者讀起來(lái)更像人話(huà)。如果items有東西、如果name非空這就是Python的truthiness機(jī)制帶來(lái)的表達(dá)紅利。不過(guò)要注意這有個(gè)前提是你清楚自己在判斷什么。如果你原本想判斷的是變量是None還是為空字符串那必須顯式寫(xiě)if x is None和if not x這兩者有本質(zhì)區(qū)別——前者判斷身份后者判斷真假值??兆址荈alseNone也是False但它們是兩個(gè)完全不同的值。另一個(gè)高頻踩坑點(diǎn)是和is的混淆。Python中比較的是值is比較的是內(nèi)存身份對(duì)象是否是同一個(gè)。對(duì)于小整數(shù)、短字符串這種被解釋器緩存的不可變對(duì)象5 is 5偶爾會(huì)返回True導(dǎo)致一些人誤以為is就是。一旦遇到大整數(shù)或者動(dòng)態(tài)拼接的字符串is的結(jié)果就變成了False于是莫名其妙的bug就出現(xiàn)了。我的建議是判斷值用判斷是不是同一個(gè)對(duì)象比如對(duì)比None用is別混著來(lái)。2.2 elif不是else if的簡(jiǎn)單縮寫(xiě)Python里沒(méi)有其他語(yǔ)言那種else if關(guān)鍵字組合而是專(zhuān)門(mén)設(shè)計(jì)了elif。這一點(diǎn)本身沒(méi)什么坑但很多人對(duì)elif的理解停留在else if縮寫(xiě)了這一層沒(méi)有真正理解它背后的執(zhí)行邏輯——短路匹配??催@個(gè)例子score 85 if score 90: grade A elif score 80: grade B elif score 70: grade C else: grade DPython解釋器會(huì)從上到下依次判斷每個(gè)條件。一旦某個(gè)條件為T(mén)rue執(zhí)行對(duì)應(yīng)的代碼塊然后整個(gè)if-elif-else鏈直接結(jié)束后面的elif和else都不再判斷。這帶來(lái)一個(gè)非常實(shí)際的優(yōu)化思路條件順序會(huì)影響性能。如果一組條件互斥你應(yīng)該把最容易命中的條件放在最前面。比如一個(gè)Web接口要校驗(yàn)用戶(hù)身份先從緩存里取數(shù)據(jù)、再?gòu)臄?shù)據(jù)庫(kù)取、最后才走外部接口那你應(yīng)該把命中緩存這個(gè)概率最高的分支寫(xiě)在最前面減少無(wú)謂的條件判斷。同時(shí)elif和多個(gè)獨(dú)立if有本質(zhì)區(qū)別。我見(jiàn)過(guò)有人寫(xiě)出下面這種代碼if score 90: grade A if score 80: grade B # 注意如果score95這里會(huì)把grade又改成B兩個(gè)if之間沒(méi)有互斥關(guān)系都會(huì)依次執(zhí)行于是后面那個(gè)條件直接覆蓋了前面的結(jié)果。這是新手非常容易犯的邏輯錯(cuò)誤——該用elif的時(shí)候用了if導(dǎo)致變量被多次賦值、結(jié)果被意外覆蓋。我建議在任何互斥分支場(chǎng)景下無(wú)條件選擇elif把多個(gè)if留給需要逐個(gè)獨(dú)立判斷的場(chǎng)景。2.3 三元表達(dá)式一句話(huà)條件分支的取舍Python支持條件表達(dá)式俗稱(chēng)三元表達(dá)式語(yǔ)法是a if condition else b。它在某些場(chǎng)景下能讓代碼變得簡(jiǎn)潔無(wú)比status 成年 if age 18 else 未成年但這個(gè)東西有個(gè)致命陷阱——可讀性。一旦你嵌套使用代碼立刻變成天書(shū)result A if score 90 else (B if score 80 else C)這種寫(xiě)法我極其不建議在生產(chǎn)代碼里出現(xiàn)。嵌套三元表達(dá)式雖然語(yǔ)法上合法但讀起來(lái)要一層層扒開(kāi)非常反人類(lèi)。我的原則是三元表達(dá)式只用于簡(jiǎn)單的兩者擇一一旦涉及三個(gè)及以上分支老老實(shí)實(shí)寫(xiě)if-elif-else。用一個(gè)可以量化的標(biāo)準(zhǔn)來(lái)判斷——如果一行代碼超過(guò)80個(gè)字符或者需要括號(hào)包裹才能表達(dá)清楚就別用三元。3. for循環(huán)Python里最常用的流程控制結(jié)構(gòu)3.1 range的參數(shù)細(xì)節(jié)不只是三個(gè)數(shù)字range()是Python for循環(huán)里最常搭檔的內(nèi)置函數(shù)但它不像很多人想的那么簡(jiǎn)單。完整寫(xiě)法range(start, stop, step)生成的數(shù)字從start開(kāi)始到stop結(jié)束前為止不包括stop本身間隔是step。這個(gè)左閉右開(kāi)的設(shè)計(jì)讓很多新手困惑為什么range(5)生成的是0到4而不是0到5其實(shí)這是有數(shù)學(xué)上的考慮——它可以讓兩個(gè)相鄰range完美拼接而不重疊比如range(5)和range(5, 10)合起來(lái)正好是0到9中間沒(méi)有缺口也沒(méi)有重疊。幾個(gè)容易踩的細(xì)節(jié)range(5)等價(jià)于range(0, 5, 1)start默認(rèn)0step默認(rèn)1。如果只傳一個(gè)參數(shù)它代表stop傳兩個(gè)參數(shù)代表start和stop傳三個(gè)才是完整的。少傳參數(shù)時(shí)不要搞混位置。step可以為負(fù)數(shù)。range(5, 0, -1)生成[5, 4, 3, 2, 1]注意此時(shí)start必須大于stop否則循環(huán)體一次也不執(zhí)行。range()返回的不是列表而是一個(gè)range對(duì)象它是一個(gè)惰性序列。這意味著它不會(huì)占大量?jī)?nèi)存——range(1000000000)并不會(huì)真的創(chuàng)建一個(gè)包含十億個(gè)數(shù)字的列表。但如果你直接打印range(5)看到的是range(0, 5)而不是[0, 1, 2, 3, 4]。在實(shí)際工作中最常見(jiàn)的循環(huán)場(chǎng)景是用range(len(...))配合下標(biāo)訪(fǎng)問(wèn)列表但這其實(shí)不太Pythonic。更好的方式是把迭代對(duì)象直接交給for循環(huán)# 不推薦 for i in range(len(cities)): print(cities[i]) # 推薦 for city in cities: print(city)如果需要同時(shí)拿到下標(biāo)和值用enumerate()for idx, city in enumerate(cities, start1): print(f{idx}. {city})注意enumerate的第二個(gè)參數(shù)start可以指定起始下標(biāo)默認(rèn)是0。很多業(yè)務(wù)場(chǎng)景比如從1開(kāi)始編號(hào)都會(huì)用到這個(gè)參數(shù)。3.2 迭代對(duì)象解包for循環(huán)真正的威力Python for循環(huán)和其他語(yǔ)言最大的不同在于它不是一個(gè)數(shù)字計(jì)數(shù)器而是徹底的迭代協(xié)議。你不需要下標(biāo)不需要手動(dòng)遞增變量只要把任何可迭代對(duì)象放在in后面它就一個(gè)接一個(gè)地取出里面的元素。這個(gè)設(shè)計(jì)讓Python的循環(huán)表達(dá)能力遠(yuǎn)超同類(lèi)語(yǔ)言配合解包unpacking更是如虎添翼。同時(shí)遍歷兩個(gè)或多個(gè)列表用zip()names [張三, 李四, 王五] scores [88, 92, 76] for name, score in zip(names, scores): print(f{name}: {score})zip()的工作原理是并行地從每個(gè)可迭代對(duì)象中取出一個(gè)元素組合成元組。它的一個(gè)隱藏特性是以最短的迭代對(duì)象為準(zhǔn)。如果你兩個(gè)列表長(zhǎng)度不一致zip會(huì)默默截?cái)嗖粓?bào)錯(cuò)也不提示。這在某些場(chǎng)景下是我們想要的比如對(duì)齊前N個(gè)元素但在另一些場(chǎng)景下會(huì)造成數(shù)據(jù)靜默丟失。如果你需要嚴(yán)格校驗(yàn)長(zhǎng)度一致Python 3.10之后可以用zip(strictTrue)參數(shù)一旦長(zhǎng)度不一致直接拋ValueError。遍歷字典的時(shí)候解包更是高頻操作user_info {name: 張三, age: 30, city: 北京} # 遍歷鍵 for key in user_info: print(key) # 遍歷值 for value in user_info.values(): print(value) # 同時(shí)遍歷鍵和值——這是最常用的 for key, value in user_info.items(): print(f{key}: {value})Python官方文檔里特別提醒過(guò)遍歷字典時(shí)不要在循環(huán)體內(nèi)修改字典的大小增加或刪除鍵。因?yàn)樽值浔闅v依賴(lài)內(nèi)部的哈希表游標(biāo)改動(dòng)大小后行為是未定義的可能在Python 3.12里直接報(bào)RuntimeError: dictionary changed size during iteration。如果你確實(shí)需要邊遍歷邊刪數(shù)據(jù)先拷貝一份key列表for key in list(user_info.keys()):或者用字典推導(dǎo)式重建一個(gè)新字典。3.3 推導(dǎo)式把for循環(huán)壓成一行當(dāng)你的循環(huán)體只是為了構(gòu)建一個(gè)列表、字典或集合時(shí)Python引入了一類(lèi)極其簡(jiǎn)潔的語(yǔ)法——推導(dǎo)式comprehension這是Python流程控制體系中我非常偏愛(ài)的一環(huán)。列表推導(dǎo)式的基本形式是[表達(dá)式 for 變量 in 可迭代對(duì)象 if 條件]# 傳統(tǒng)寫(xiě)法 squares [] for i in range(1, 10): if i % 2 0: squares.append(i * i) # 推導(dǎo)式寫(xiě)法 squares [i * i for i in range(1, 10) if i % 2 0]兩者的核心區(qū)別不僅在于代碼行數(shù)。推導(dǎo)式在CPython內(nèi)部有專(zhuān)門(mén)的優(yōu)化路徑執(zhí)行速度通常比等效的for循環(huán)append方式快20%-30%。在大規(guī)模數(shù)據(jù)處理場(chǎng)景下比如從幾萬(wàn)條日志里提取特定字段這個(gè)性能差異是很明顯的。字典推導(dǎo)式和集合推導(dǎo)式同理# 字典推導(dǎo)式把列表變成索引字典 names [張三, 李四, 王五] name_to_id {name: idx for idx, name in enumerate(names)} # 集合推導(dǎo)式去重 prices [120.5, 88.0, 120.5, 66.0] unique_prices {p for p in prices}但我必須提醒一點(diǎn)——推導(dǎo)式不是萬(wàn)能的。如果循環(huán)體里有多個(gè)語(yǔ)句、有副作用比如打印日志、修改其他變量、或者循環(huán)邏輯很復(fù)雜強(qiáng)行塞進(jìn)推導(dǎo)式會(huì)讓代碼變得極其難讀。我見(jiàn)過(guò)一段嵌套了三層推導(dǎo)式的代碼看了整整一個(gè)下午才理清邏輯。這里的判斷標(biāo)準(zhǔn)是一行推導(dǎo)式能承載的邏輯復(fù)雜度是有限的超過(guò)兩個(gè)for或兩個(gè)if就應(yīng)該寫(xiě)成普通循環(huán)??勺x性永遠(yuǎn)優(yōu)先于簡(jiǎn)潔性。4. while循環(huán)與循環(huán)控制四件套4.1 while和for的選型邏輯Python里的while循環(huán)語(yǔ)法很簡(jiǎn)單while 條件:條件為真就反復(fù)執(zhí)行循環(huán)體直到條件變成假。但什么時(shí)候該用while、什么時(shí)候該用for很多人其實(shí)沒(méi)有想清楚。我的選型邏輯非常簡(jiǎn)單如果你知道要迭代多少次且迭代對(duì)象是一組明確的數(shù)據(jù)用for如果你不知道要循環(huán)幾次、需要根據(jù)回路里的條件動(dòng)態(tài)決定是否繼續(xù)用while。典型的使用while的場(chǎng)景從用戶(hù)輸入讀取數(shù)據(jù)直到輸入特定指令如quit才停止輪詢(xún)某個(gè)異步任務(wù)的狀態(tài)直到任務(wù)完成二分查找算法——每次循環(huán)把搜索區(qū)間減半直到區(qū)間為空游戲主循環(huán)——每一幀檢查退出條件下面是一個(gè)典型的讀輸入直到退出的寫(xiě)法command while command ! quit: command input(請(qǐng)輸入指令輸入quit退出: ) # 處理指令寫(xiě)while循環(huán)最需要警惕的問(wèn)題就是死循環(huán)——條件永遠(yuǎn)為真程序永遠(yuǎn)不停。常見(jiàn)的原因條件里比較的變量沒(méi)有被更新或者更新邏輯寫(xiě)在了continue之后導(dǎo)致永遠(yuǎn)執(zhí)行不到。我在本地調(diào)試的時(shí)候一直強(qiáng)調(diào)一個(gè)習(xí)慣凡是寫(xiě)while True:這種結(jié)構(gòu)先想清楚循環(huán)體內(nèi)哪一行代碼最終會(huì)讓break執(zhí)行到。如果找不到這一行那這代碼一跑就是一個(gè)死循環(huán)。4.2 break、continue、pass三個(gè)容易混淆的小角色break、continue、pass是流程控制里的三個(gè)小關(guān)鍵字作用完全不同混用的概率極高。break立即終止當(dāng)前所在的整個(gè)循環(huán)不管循環(huán)條件是否還滿(mǎn)足。循環(huán)體后面的代碼不會(huì)執(zhí)行循環(huán)直接結(jié)束。continue跳過(guò)當(dāng)前這一次迭代立即進(jìn)入下一輪循環(huán)。注意在while循環(huán)中遇到continue會(huì)直接跳到條件判斷處在for循環(huán)中會(huì)跳到下一個(gè)元素的迭代。pass什么都不做就是個(gè)占位符。它本身不產(chǎn)生任何行為。網(wǎng)上有個(gè)經(jīng)典的坑新手想在循環(huán)里跳過(guò)空值并繼續(xù)寫(xiě)了continue但放在錯(cuò)誤的結(jié)構(gòu)里導(dǎo)致提前跳過(guò)了某段重要代碼。我們來(lái)看正確和錯(cuò)誤的對(duì)比data [hello, , world, ] for item in data: if not item: continue # 跳過(guò)空字符串立即處理下一個(gè)元素 print(item.upper())這個(gè)沒(méi)問(wèn)題。但如果有人把continue放在一個(gè)子循環(huán)內(nèi)部它跳過(guò)的只是內(nèi)層循環(huán)的本次迭代外層循環(huán)不受影響。很多人誤以為continue會(huì)跳過(guò)整個(gè)外層循環(huán)的下一次迭代實(shí)際并不是——它只作用于離它最近的那一層循環(huán)。這個(gè)細(xì)節(jié)在嵌套循環(huán)中非常容易引發(fā)邏輯bug。pass的典型用于場(chǎng)景是你還沒(méi)想好函數(shù)體里寫(xiě)什么但如果不寫(xiě)任何語(yǔ)句Python會(huì)因?yàn)楹瘮?shù)體為空而報(bào)IndentationError。這時(shí)候可以用pass占位def send_retry_alert(retries): # TODO: 等運(yùn)營(yíng)把告警頻次規(guī)則定下來(lái)再實(shí)現(xiàn) pass4.3 被很多人低估的for-elsePython里有一個(gè)其他主流語(yǔ)言都沒(méi)有的特性——循環(huán)語(yǔ)句可以帶else分支我稱(chēng)之為「循環(huán)的臨終遺言」。它的執(zhí)行規(guī)則是如果循環(huán)是正常結(jié)束的沒(méi)有被break中斷就執(zhí)行一次else分支如果循環(huán)是被break終止的else分支不執(zhí)行。這個(gè)特性在實(shí)戰(zhàn)中極其好用最常見(jiàn)的場(chǎng)景是在循環(huán)里搜索某個(gè)元素如果找到了就做一件事找不到做另一件事。傳統(tǒng)寫(xiě)法是這樣的found False for user in users: if user.id target_id: found True break if not found: add_user(target_id)每次都要定義一個(gè)found標(biāo)志位循環(huán)結(jié)束后再判斷一次。而用for-else可以寫(xiě)得更自然for user in users: if user.id target_id: print(找到了) break else: add_user(target_id)當(dāng)整個(gè)循環(huán)遍歷完都沒(méi)有執(zhí)行break時(shí)else里的代碼就執(zhí)行了相當(dāng)于沒(méi)找到就補(bǔ)錄。很多C系語(yǔ)言的程序員看到這個(gè)會(huì)覺(jué)得不適應(yīng)但掌握之后你會(huì)發(fā)現(xiàn)它避免了標(biāo)志位變量邏輯清晰得多。不過(guò)這里有一個(gè)極其重要的陷阱如果循環(huán)體里連break都沒(méi)有else分支必定執(zhí)行。所以如果你寫(xiě)了個(gè)普通循環(huán)沒(méi)帶break又誤加了else你可能會(huì)發(fā)現(xiàn)else里的代碼每次都會(huì)跑一遍。我就見(jiàn)過(guò)有人把else當(dāng)成循環(huán)結(jié)束后不管怎樣都執(zhí)行來(lái)用了導(dǎo)致業(yè)務(wù)邏輯重復(fù)執(zhí)行。for-else的正確語(yǔ)義是循環(huán)未被中斷時(shí)執(zhí)行而不是循環(huán)結(jié)束后執(zhí)行。沒(méi)有break的循環(huán)配else除非你故意想用否則屬于邏輯錯(cuò)誤。5. match-casePython 3.10帶來(lái)的流程控制新成員5.1 基本的模式匹配語(yǔ)法如果你用的是Python 3.10及以上版本那么流程控制家族里多了一位新成員——match-case語(yǔ)句。它看起來(lái)像其他語(yǔ)言里的switch-case但實(shí)質(zhì)上完全不同。match-case做的是結(jié)構(gòu)模式匹配不只是比較一個(gè)變量等于什么值還能根據(jù)數(shù)據(jù)的結(jié)構(gòu)、類(lèi)型和具體字段來(lái)匹配。最簡(jiǎn)單的用法def describe_status(code): match code: case 200: return OK case 404: return Not Found case 500: return Internal Server Error case _: return Unknown注意這里的case _下劃線(xiàn)是通配符匹配任何值相當(dāng)于其他語(yǔ)言的default。需要注意的是從上到下依次匹配一旦某個(gè)case命中就執(zhí)行對(duì)應(yīng)代碼塊并立即退出整個(gè)match不需要像C語(yǔ)言那樣手動(dòng)寫(xiě)break。雖然這個(gè)簡(jiǎn)單用法看起來(lái)跟switch差不多但match-case的真正威力在于解包模式匹配。它可以直接匹配一個(gè)元組的形狀point (10, 20) match point: case (0, 0): print(原點(diǎn)) case (x, 0): print(fX軸上的點(diǎn)x{x}) case (0, y): print(fY軸上的點(diǎn)y{y}) case (x, y): print(f普通坐標(biāo)點(diǎn) ({x}, {y}))case (x, 0)這種寫(xiě)法不是簡(jiǎn)單比較元組是否等于(x, 0)而是一種模式——它綁定變量x同時(shí)強(qiáng)制第二個(gè)元素必須是0。這種結(jié)構(gòu)性匹配讓代碼非常優(yōu)雅。5.2 什么時(shí)候值得用match-case我個(gè)人的判斷是match-case不是讓你把所有if-elif鏈都改掉而是在特定場(chǎng)景下有明顯優(yōu)勢(shì)判斷一個(gè)對(duì)象的類(lèi)型和結(jié)構(gòu)。比如處理解析樹(shù)、處理JSON數(shù)據(jù)的多種形態(tài)、實(shí)現(xiàn)命令模式CLI指令分發(fā)。分支條件非常多。超過(guò)四五個(gè)elif的條件鏈用match-case會(huì)讓結(jié)構(gòu)更清晰。需要解包和命名的場(chǎng)景。case語(yǔ)句還支持用if加守衛(wèi)條件def classify_number(num): match num: case n if n 0: return 負(fù)數(shù) case 0: return 零 case n if n 10: return 一位數(shù) case n if n 100: return 兩位數(shù) case _: return 大數(shù)如果你在用Python 3.9或更早版本match-case會(huì)直接導(dǎo)致語(yǔ)法錯(cuò)誤。老項(xiàng)目升級(jí)Python版本之前建議先用這個(gè)特性寫(xiě)個(gè)小demo驗(yàn)證環(huán)境沒(méi)問(wèn)題再逐步把條件鏈改造成match-case。我見(jiàn)過(guò)有人把線(xiàn)上代碼切到match-case后直接SyntaxError整個(gè)服務(wù)起不來(lái)就是因?yàn)榉?wù)器上Python版本還是3.8。流程控制語(yǔ)法看著簡(jiǎn)單但版本兼容性一點(diǎn)都不能馬虎。6. 真實(shí)項(xiàng)目踩坑記錄與排查復(fù)盤(pán)6.1 案例一循環(huán)中修改列表元素的詭異結(jié)果這個(gè)坑我印象很深。當(dāng)時(shí)在做一個(gè)數(shù)據(jù)處理任務(wù)需要對(duì)列表里的每個(gè)元素做清洗如果元素違反規(guī)則就把它從列表中刪除。我的第一版代碼長(zhǎng)這樣items [1, 2, 3, 4, 5, 6] for item in items: if item % 2 0: items.remove(item) print(items)我期望輸出的是所有偶數(shù)都被刪掉剩下[1, 3, 5]。但實(shí)際輸出是[1, 3, 5]不實(shí)際輸出是[1, 3, 5]之外的詭異結(jié)果——具體是[1, 3, 5]我再算一下。乖乖跑一遍遍歷索引0值為1不刪索引1值為2刪掉2列表變成[1, 3, 4, 5, 6]索引2此時(shí)是4原來(lái)的3被擠到了索引1的位置4是偶數(shù)刪掉列表變成[1, 3, 5, 6]索引3是6刪掉變成[1, 3, 5]。這個(gè)例子湊巧刪對(duì)了。但我把數(shù)據(jù)換一下就看出來(lái)了items [1, 2, 3, 4, 5, 6, 8] for item in items: if item % 2 0: items.remove(item) print(items) # 得到 [1, 3, 5, 8]8為什么沒(méi)被刪因?yàn)楸闅v到8的時(shí)候8已經(jīng)因?yàn)榍懊娴膭h除操作被移動(dòng)到了索引6而循環(huán)早就走完了。這個(gè)問(wèn)題的根源是在for循環(huán)遍歷列表的同時(shí)修改列表長(zhǎng)度迭代器使用的下標(biāo)和列表實(shí)際元素發(fā)生了錯(cuò)位。排查思路復(fù)盤(pán)先打印每一步的列表內(nèi)容和當(dāng)前遍歷到的值發(fā)現(xiàn)下標(biāo)和值對(duì)不上。意識(shí)到for item in items本質(zhì)上是在內(nèi)部維護(hù)了一個(gè)整數(shù)下標(biāo)每次迭代下標(biāo)加1然后按下標(biāo)取值。remove操作把后續(xù)元素往前挪導(dǎo)致有些元素被跳過(guò)。正確解法是改用列表推導(dǎo)式重建一個(gè)新列表items [item for item in items if item % 2 ! 0]或者如果你必須在原列表上操作先拷貝一份再迭代for item in list(items): if item % 2 0: items.remove(item)這個(gè)坑的教訓(xùn)是凡是迭代集合時(shí)想同時(shí)修改集合刪除或增加元素必須拷貝一份或者改用推導(dǎo)式/新建列表的方式。這個(gè)規(guī)則適用于列表、字典、集合不僅限于for循環(huán)while循環(huán)里用下標(biāo)操作也要格外小心。6.2 案例二短路邏輯救了你但你可能不知道有一次用Python寫(xiě)一個(gè)配置校驗(yàn)函數(shù)需要判斷一個(gè)配置項(xiàng)是否存在且取值合法。第一版代碼if config.get(timeout) 0: print(timeout合法)這段代碼在某些配置下直接拋TypeError: not supported between instances of NoneType and int。原因很簡(jiǎn)單config.get(timeout)在鍵不存在時(shí)返回NoneNone 0在Python里不能運(yùn)算。排查的過(guò)程不復(fù)雜但暴露出的問(wèn)題挺典型很多新手不知道Python的and、or有短路求值的特性。a and b在a為假時(shí)直接返回a根本不會(huì)去計(jì)算ba or b在a為真時(shí)直接返回a不去計(jì)算b。正確寫(xiě)法應(yīng)該把存在性判斷放在前面充分利用短路if config.get(timeout) is not None and config.get(timeout) 0: print(timeout合法)更Pythonic的寫(xiě)法是利用真值判斷比較# 需要先取出值避免重復(fù)調(diào)用get timeout config.get(timeout) if timeout and timeout 0: print(timeout合法)這里if timeout已經(jīng)利用了我們第2節(jié)講的真假值判斷——None是假0也是假。要注意的是如果你的合法值可能為0這種寫(xiě)法會(huì)把0也排除掉這是另一個(gè)隱性問(wèn)題。所以業(yè)務(wù)上真值可能為0時(shí)要改回is not None判斷。短路求值還帶來(lái)一個(gè)非常實(shí)用的技巧Python沒(méi)有其他語(yǔ)言的空值合并運(yùn)算符但可以用or來(lái)模擬默認(rèn)值效果username input_name or 游客當(dāng)input_name為空字符串假值時(shí)整個(gè)表達(dá)式返回游客。這個(gè)寫(xiě)法在配置讀取場(chǎng)景里用得非常廣泛但要注意如果input_name可能為0或False這類(lèi)合法值不能這么寫(xiě)。6.3 案例三for-else的else在我以為不會(huì)觸發(fā)時(shí)觸發(fā)了這是我親身經(jīng)歷的一次線(xiàn)上bug。當(dāng)時(shí)有一段代碼需要在訂單列表里查找特定訂單找到就更新?tīng)顟B(tài)沒(méi)找到就創(chuàng)建一個(gè)新訂單。我當(dāng)時(shí)用了for-elsefor order in orders: if order.id new_order_id: update_order(order) break else: create_order(new_order_id)這段代碼有個(gè)隱患如果orders列表本身是空的for循環(huán)一次都不執(zhí)行但這不算被break中斷所以else分支照樣會(huì)執(zhí)行——于是創(chuàng)建了一個(gè)新訂單。這在業(yè)務(wù)上可能完全正確也可能不是你想要的行為。我那次遇到的實(shí)際情況是上游系統(tǒng)偶爾會(huì)傳一個(gè)空訂單列表過(guò)來(lái)結(jié)果系統(tǒng)每次都走create_order把本來(lái)應(yīng)該判失敗的操作變成了創(chuàng)建新訂單數(shù)據(jù)里出現(xiàn)了大量重復(fù)的單子。排查鏈路是這樣的先看日志發(fā)現(xiàn)某個(gè)接口頻繁執(zhí)行創(chuàng)建訂單操作。翻代碼看到for-else邏輯第一反應(yīng)覺(jué)得沒(méi)找到才創(chuàng)建邏輯沒(méi)問(wèn)題。后來(lái)打印orders長(zhǎng)度才發(fā)現(xiàn)列表為空時(shí)for循環(huán)體根本沒(méi)進(jìn)過(guò)else直接執(zhí)行。這個(gè)坑的本質(zhì)是for-else中的else不關(guān)心循環(huán)體是否執(zhí)行過(guò)哪怕一次只關(guān)心循環(huán)是否被break終止??樟斜肀闅v也會(huì)觸發(fā)else。正確的修復(fù)方式是顯式判斷列表是否為空if not orders: # 空列表按預(yù)定邏輯處理可能告警可能直接返回失敗 create_order(new_order_id) elif any(order.id new_order_id for order in orders): for order in orders: if order.id new_order_id: update_order(order) break else: create_order(new_order_id)這段修復(fù)代碼還引入了一個(gè)重要的生成器函數(shù)any()它可以用來(lái)替代手寫(xiě)for循環(huán)找元素的常見(jiàn)場(chǎng)景。類(lèi)似地all()用來(lái)判斷是否所有元素滿(mǎn)足條件寫(xiě)出來(lái)比f(wàn)or循環(huán)簡(jiǎn)潔許多。這類(lèi)隱藏的流程控制工具建議每個(gè)Python學(xué)習(xí)者在基礎(chǔ)語(yǔ)法之外專(zhuān)門(mén)過(guò)一遍。7. 幾個(gè)延續(xù)思考的進(jìn)階方向如果你把前面這些內(nèi)容都消化了并且在自己的環(huán)境里把代碼都跑了一遍那么流程控制的基礎(chǔ)已經(jīng)打得很扎實(shí)了。接下來(lái)你想進(jìn)階的話(huà)我建議按這個(gè)順序延伸迭代器與生成器。for循環(huán)背后其實(shí)是迭代協(xié)議理解__iter__和__next__能幫你明白為什么所有可迭代對(duì)象都能被for遍歷。生成器函數(shù)里的yield能寫(xiě)出惰性求值的流程控制邏輯在處理超大文件、無(wú)限數(shù)據(jù)流時(shí)非常重要。異常處理作為流程控制。Python的try-except-else-finally結(jié)構(gòu)本質(zhì)上也是一種流程控制它決定了程序在出錯(cuò)時(shí)走哪條路。尤其是try-except-else——try沒(méi)有異常時(shí)走else這個(gè)和for-else有異曲同工之妙很多新手同樣會(huì)搞混。上下文管理器。with語(yǔ)句里的__enter__和__exit__控制了資源申請(qǐng)和釋放的流程網(wǎng)絡(luò)連接、文件讀寫(xiě)都用它這是Python資源管理的標(biāo)準(zhǔn)解法。并發(fā)場(chǎng)景下的循環(huán)控制。如果用asyncio寫(xiě)協(xié)程async for可以異步遍歷數(shù)據(jù)流。這時(shí)候break、continue的語(yǔ)義雖然在但執(zhí)行時(shí)序要放在事件循環(huán)的框架里重新理解。Python的協(xié)程相關(guān)熱詞搜得越來(lái)越多這條線(xiàn)值得走。不過(guò)你有精力弄這塊之前先確保自己同步、同步異常處理都過(guò)關(guān)了再碰異步循環(huán)不然極其容易繞暈。我個(gè)人的體會(huì)是流程控制是任何編程語(yǔ)言的核心骨架學(xué)Python語(yǔ)法不把這一塊吃透后面的數(shù)據(jù)結(jié)構(gòu)、函數(shù)式編程、面向?qū)ο蠖紩?huì)搖搖欲墜。但反過(guò)來(lái)只要這塊扎扎實(shí)實(shí)過(guò)了你去看任何Python項(xiàng)目源碼至少能順暢地讀下來(lái)——知道每一段代碼在什么條件下執(zhí)行、在哪個(gè)循環(huán)里跑。這個(gè)能力比記住幾個(gè)API重要得多。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
亚洲伊人a线观看视频| 97精品视频免费| 91人精品妻入口| 天堂资源站| 中文字幕日韩综合| 美女被艹尤物视频| 国产 日韩 欧美高清| 午夜男人的天堂| 亚洲无限观看| 婷婷15月天青娱乐| 2017大香蕉国产精品久久| 丁香六月婷| 亚洲无码99| 狠狠操,使劲操| 果冻传媒A片麻豆熟妇人妻| 欧美在线l亚洲| 亚洲棕合电彰| 久久久久密| 天天综合色| 亚洲av无线观看| 欧美日韩色综合网| 婷婷中文网| 国产精品亚洲天堂网址| 天天搞在线综合网| 欧美一级国产一级| 熟女这里只有精品6| 日韩熟女无码| 26uuu久久| 欧美高清色| 亚洲在线a| 综合情欲网| 九九九九热只有精品| 亚洲综合69| 婷婷15月天青娱乐| 老司机午夜福利视频一区二区| 97爱欧美| 97超碰久| 青青草好吊| 九九久久国产精品怡红院| 色色青青久久| 色网亚洲人| 九九热九九| 欧美性性性| 妇女一区二区三区| 97欧美精品| 午夜操一操| 中文人妻av高清一区| 久久透逼视频| 8050无码八戒| 337p大胆噜噜噜噜噜91Av| 日韩av乱伦| 狠狠色噜噜狠狠狠狠2018| 日少妇亚洲版| 男人的天堂2018| 欧洲人妻视频| WWW啪啪的com| av优播| 天天天肏屄欧美| 精品网站9999| 色就色综合| 中国操逼无码| 久久精品国产亚洲AV片多多| 五月天婷婷久久| 精品国产嫩穴视频| 亚州综合色图| 四方色播| www.夜夜| 美女诱惑在线一区| 亚洲情色 欧美| 亚洲男人电影天堂| 日本激情免费大片| 精品96久久| 3d成人精品一区二区| 色综合色色| 国产欧美美女免费观看视频| 天天爽入口| 啊啊啊啊啊在线| 乳欲人妻办公室奶水| 超碰99在线观看| 欧美成人综合| 中文字幕99999| 亚洲视频1区| 成人资源中文字幕在线观看天天| 国产美女口爆吞精| 无码外流操逼视频| 日韩一级二级| 精品夜夜澡人妻无码AV| 日韩人妻 中文字幕| 91 国产丝袜在线放观看| 欧美乱妇狂野欧美在线视频| 人妻欧美| 五月丁香| 久久精品高清无码一区| 99久久婷婷国产综合| 91美女在线看| 777琪琪午夜免费A片| 久久超碰久| 久久久96精品| 黄色小视频日本txt| 精品十三区| 亚洲欧美在线丝袜| 96AV精品| .精品人妻一区二区三| 日本久久精品| 国产精品农村妇女| 亚洲精品国产精品乱码不99| 欧美熟妇亚洲版| 84YTCOM性无码| 又大又白奶子| 超碰人妻久久| 中文字幕88av在线| 91大神精品长腿在线观看网站| 五月丁香婷婷色| 大香蕉一人| 国产三级日产三级韩国三级| 免看60秒涩涩视频| AV免费在线播放一区| 牛牛久久国产精品视频一二三| 中文字幕国产在线天堂| 日日天天久久啊啊aaa| 欧美国产婷婷久久| 综合色图,成人综合网| 久久熟女嫩草成人片免费| 日韩无码黄色片| 啊啊啊啊啊啊啊啊啊啊在线观看| 亚洲五码一区二区三区| 91欧美综合| 日本久操视频| 一区二区三区视频国产免费| 一区二区三区四区理论片| 污啪啪啪视频| 熟妇综合一区二区三区| 试看60秒| 欧美少妇大量自拍视频在线观看| 亚洲欧美日韩制服另类| 蜜臀久久在线视频| 午夜120视频在线观看| 久久精品高清无码一区| 天天操av懂色| 美女视频尤物网在线看| 欧美91色| 开心激情站| 天天噜| 男人的天堂在线2| 日本成人免费一区二区三区| 天天躁狠狠躁av| 成人性爱电影一区二区| 美女视频尤物网在线看| 嫩草 我啊~嗯~在线| 国产中文精品一区二区在线观看| 中文字幕乱妇免费视频| 91网站18在线| 色色五月婷| 精品一区二区三区麻豆| 亚州综合色图| 综合 青草 伊久久 影院 综合 | 国模艳艳啪啪一区| 深喉吞精| 欧美激情色婷婷花野真衣一区二区| 日逼国产| 色色香蕉| 亚洲欧洲日本精品中文a∨| 乱色老一区二区三区的观看方式 | 少妇熟女视频一二三区| 亚洲中文制服诱惑| 99热只有这里有精品| 97视频在线播放| 综合网97| 色婷婷在线视频精品导航| 1769精品一区二区三区| 日韩福利综合一区| 99久久国产精品免费高潮| 久久久精品一区二区| 久久久久久夜夜夜夜夜| www激情| 韩三级a视频在线观看| 欧美第五页| 中文字幕十五区| 日韩精品一区二区三区四虎影视| 亚洲成人美女无吗| 国产强奸乱伦xd| 伊人骚琪琪亚洲天堂网站| 亚洲图片 激情小说| 日本三级日本三级三级人妇四虎| 九九热超碰| 操操逼操操逼操操逼逼| 中文字幕精品一区欧美| 福利操逼| 久久精品国产AV一区二区三区| 精品人妻丰满熟妇一区二区三| 99黄页网站| 国产成自自拍在线观看| 色一射色一射| 大香蕉色十月| 小泽玛利亚一二三| 99在线免费观看| 一级久久久久久久久久久| 亚洲无码精品AV久久久| 97在线免费观看视频| 91性网| 蜜桃臀 后入 一区 二区 三区 在线| h在线看免费版在线看| 无码欧美有限公司| 草草影院最新网址| 日韩av性爱在线播放| 欧美骚少妇| 另类图片亚洲加勒比另类图片亚洲加勒比另类图片亚洲加勒比 | 9超碰免费| 一区二区三区四区五区高清无码永久视频 | 成人免费看吃奶视频网站| 2024黄色视频| www.91人妻.com| 秋霞一级鲁丝片A片| 久久久久久久九九九九| 男人的天堂 在线一区| 天天亚洲| 精品无码一区二区三区色欲| 亚洲AV成人精品网站在AV| 人人操欧美风骚| 屁股久久久久久| 久久亚洲AV无码白度| 91爱| 国产无吗在线播放| 久操不卡视频| 狂操嫩妻视频一区二区三区| 亚洲欧美一区二区三区在钱蜜桃| 神马久久久久久久久久| 91精品国| 国产精品九九九| 欧美人与动性人交a| 日韩精品国产一区二区| 熟女色图在线| 超碰 欧美| 成人性生活高清视频在线播放| 91成人18| 噜噜噜在线视频| 亚洲欧美精品福利在线| 九九久久久九九| 91美女在线视频| 欧美人妻另类在线| 丰满少妇一区二区三区免费看| 久久夜夜| 欧美很很操视频| 97中文天堂| 97网址97| 国产色产精品在线观看| 在线观看日韩av不卡| 日本一区二区电影网站| 亚洲双插| 国产精品免费1区2区视频| 青青操狠狠撩| 吉田爱美AV在线| 一区二区播放| 久久五月天婷婷丁香中文字幕| 婷婷伊人网| 久久伊人网视频一区二区三区| 久久精品人妻一区二区| 亚洲中文字幕熟女| 深夜啪啪啪视频免费| 极品后入免费视频| 亚洲自拍偷拍视频在线| av大香蕉| 色欲天香天天综合网-成年人三级片网站-欧美乱妇狂野-日韩国产专区-久久久久久 | 桃花色涩综合影院| 日日骚 av| 加勒比色99999| 国产A v无码专区| 97爱爱爱综合| 97超碰大| 欧美一级A片在线看视频性色| 99精品丰满人妻无| 97久久久久| 亚洲1区2区三区高清中文字幕| 欧美少妇熟女| 风间由美日韩欧美久久| 日本黄 R色 成 人网站| 九七毛片九九毛片| 天天日天天干天天整| 国产a级精品| 久久精品无码专区| 中文字幕 码精品视频网站| 国产精品密臀网在线观看| 在线视频亚洲无码| 亚洲欧美校园另类春色| 手机在线大香蕉| 婷婷色在线| 久久久久久无码人妻中文字幕| 成人七区| 亚洲自拍青操视频| 免费av大片| 九九热精彩视频| 精品久久久久久无码| 亚洲情色五月天 | 97在线观| 久久国产99精品72福利| 中文字幕在线免费观看视频| 中文字幕一二三av| 精品精品精品| 黄片免费日韩| 九九九九九九九九九五码| 无码外流操逼视频| 98福利在线视频| 国产剧情AV不卡在线观看| 91精品久久久久久久久久| 人妻 中文 日韩| 丝袜狂射91| 一区三区啪啪| 男人综合网| 亚洲va综合va国产va中文| AV女优男人的天堂| 淫色网综合| 青青青国产手线观看视频2| 欧美少妇第一页| 啪啪视频亚洲第一| 国产夫妻性生活视频| 五月丁香激情综合| 91人妻人人澡人人爽人人精品| 国产超碰在线一区| 岛国黄色大片网站| 精品人妻一区二区三区四区石在线 | 人人噜夜夜操| 日本日逼视频网| 丰满人妻一区二区三区蜜桃视频| 久久九七| 国产伦精品一区二区三区在线观| 日韩猛交| 亚洲s色图| 激情自拍 校园春色| 老司机午夜精品视频| 人妻内射一区二区在线视频| 日韩在线观看中文字幕视频| 国产精品久久久久久无码红治院| 婷婷丁香人妻| 884t在线| 久久久九97| 国产欧美精选激情视频| 女生看匆91网站| 亚洲永久AV无码精品秋霞| 岛国成人av在线播放网址| 色婷婷国产精品一区在线观看| 久久99精品九九久久久婷婷| 九九热免费国产视频婷婷伊人五月 | 国产成人网| 久久精品国产精品一区 | 超碰无码加勒比| 亚洲区 欧美区| 丝袜天堂| 国产熟女少妇一区| 日本日皮视频逼| 色在线综合| 粉嫩av一区二区三区天美传媒 | 久久久久久久9| 欧美97日韩精品| 五月婷色| 国产呦精品一区二区三区下载| 国产无码精品久久久久久| 玖玖爱综合网| 97bbn| 中文字幕在线观看网页| 天综合网| 欧美五区| 精品人妻一区二区三区-国产| 日韩,欧美,中文在线| 伊人久久综合影院精品久久久| 婷婷国产精品一区二区| 亚欧洲一区二区视频| 久插综合| 欧美色图片91| 男人的天堂色偷偷青青草视频婷婷网| 91丝袜美女| 日韩美一区| 国产刺激视频| 狠狠色婷婷| www.人人cao| 丝袜熟女一区二区三区| 国模无码一区二区三区在线| 啪啪资源网| 夜夜操青青草| 日韩综合无码色欲vv| 亚洲日韩精品久久久久一区壹牛| 蜜臀99久久| 青草精品视频-日本久久久久网站| 亚洲第一男人天堂| 四虎影视国产精品| 97美日韩视频| 亚洲毛片基地专区| 超碰97人妻免费在线| 麻豆成人影音在线| 久久久com| 玖玖资源综合在线视频| 亚洲无码成人精品| 亚乱色| 黄片aaaaa一区| 嫩草影院性色| 综合啪啪| 精品无码久久久| 宗合情欲网| 日韩精品第3页| 色网综合网| 亚洲精品97p| 9Ⅰ超碰| 蜜臀久久99精品久久久| 五码视频在线观看| 久久亚洲AV成人精品无码| 国产成人无码网站在线视频| 亚洲午夜免费狠狠干| 三级片大波波| 麻豆天美AV传媒第一页| 九九热AV| 国产不卡免费在线视频| 激情网五月天| 国产精品久久久久久久久久久久久久久久 | 大香蕉一人在线| 亚洲AV在线资源| 久久久久白虎| 欧美日韩黄片精品在线| 久久九九网| 少妇蜜汁| 大香蕉手机在线| 人妻夜夜爽天天爽三区麻豆AV网站| 欧美真人抽搐一进一出gif| 国产熟女乱论| 97超碰69| 久久久性少妇| 9丨亚洲一区二区在线| 久久草在线综合视频| 中文字幕国产精品1区| 午夜后入| 97视频在线看| 骚逼高潮久久精品| 九九九九九精品十六| 四虎精品一区二区| 99ri精品| 成年人免费观看网站| 天天影视色香欲综合网小说| 六月婷婷一区二区三区| 精品视频一区二区| 91九色首页| 天天日天天屌天天操| 色臀av| 91精品黄在线观看| 麻豆黄站| 中文字幕一区二区三区高清| 97大色网| 1000部熟女视频在线观看| 99热这里是精品| 玖玖草久草99蜜月一区二区三区| 久久久久久久免费A片国产成a人亚洲精∨品无码| 色狠狠 - 百度| 熟女中出视频| 操国产逼| 久久久久久久久久久久久9999| 偷拍导航视频网站| 久久精品美女一区| 嫩草 我啊~嗯~在线| 国产精品麻豆视频网站| 欧美 牲| 国产精品久久久久久久AV大片| 荡小穴在线观看| 熟妇熟女一区二区三区| 99无码视频| 久久久免费高清中文视频| 色色香蕉| 中字一区| 日本护士高潮| 熟女网站最新| 日韩pv中文| 99碰碰| 性爱乱伦一区| 色噜噜日韩精品| 色牛牛AV| 97超碰超| 日韩AV一区二区三区三州三州| 黄骗免费网站| 欧美 传媒 麻豆 日韩 偷拍| 最新国内自拍av免费| 啊啊啊在线观看免费视频| 久久久久亚洲三级电影| 天天看片麻豆| 色婷婷九月天天综合| 视频在线中文字幕| 久久色情| 成人精品无码| 人妻 欧美 中文| 郑州宾馆老熟女露脸啪啪| 五月天亚洲网| 激情五月激情综合网| 国产精品香蕉| 天天干人妻| 婷婷视频在线免费观看| 久一区久久蜜桃| 91色噜噜狠狠| 国产精品免费美女视频| 免费国产视频| 噜噜噜久久亚洲精品色情| 欧美激情中文字幕另类小说| 999精品女人| 麻豆AV96熟妇人妻| 午夜福利视频在线一区| 精品91| 人妻黑丝袜电影| 日本九九九九| 伊人久久综合影院精品久久久| 自拍亚洲综合| 麻豆天美国美国产| 粉嫩不卡一区二区性爱| 黄色视频高清无码网站| 蜜桃臀一区二区aV| 69人妻人人揉人人躁人人精品| 亚洲,日韩,欧美,成人播放| 骚日日av| 亚洲欧美setu| 亚洲日本成人动漫| 93人人操人人| 久久精品国产欧美日韩亚洲欧美日韩中文久久国产一区 | 精品二区三四区五电影| 一区麻豆 高清中文字幕| 精品一区二区人妖| se吧提供国产乱老熟视频胖女人| 久久精品国产97欧美精品亚洲| 精品久久久久9999| 成人精品在线观看| 在线观看成人性爱免费小视频| 无码粉嫩白虎一线天b区| 无码久| 国产精品对白内射| 天天插天天插| 国产福利精品最新在线| 99久国产精品午夜性色福利| 欧美色图片| 又黄又硬又粗又长国产视频| 啊啊啊啊啊,啊啊啊啊好舒服,操我舒服啊啊啊| 天天射,天天操,天天爽-国内精品一区二区三区-成人AV | 麻豆伊人网| 久久精精区一区二区一蜜桃一区二区| 日韩欧美tv一区二区在线观看| 色波多| 天天射日日干| 欧美美女视频| 极品人妻少妇综合| 99精品丰满人妻无码| 欧美中字二区| 久干网| 玖玖蜜臀资源网| 女同亚洲欧美一二三区久久电影| 日本99热| 婷婷五月在线视频| 欧美日韩成人在线| 五月天综合| 综合网色| 狠狠狠狠狠干| 五月婷婷综合激情| 国产日比| 玖玖视频在线资源一区二区三区| 亚洲九九夜夜| 日韩精品 资源| 先锋精品av色鲁| www.99热| AV色天香在线| 亚洲综合码| 裸模AV女优| 欧美日韩精品国产91| 久久綜合很很很| 欧美夜夜骑视频| 色婷婷淫色网| 大但人体久久久久| 老司机香蕉| 国产精品一区二区三| 视频不卡中文字幕| 精品人妻一区二区三区四区石在线| a片自拍直播视频| 亚洲男人久久综合天堂| 操逼片中文| 色综合久久久久| 国产精品一二三免费网站| 91九九九馒头| 久干网| 精品无码一区二区三区| 人人操人人肉久久精品| A级片日韩欧美国产欧美视频精选观看| 日韩啊V| av在线免费一区二区| 精品国产久热在线观看| 青青草九九九九九| 97一区二压| 91美女视频直播| 日韩性爱啪啪视频| 久久久久久国产精品免费网站| 国产精品无码论坛| 色777999综合| 日韩性爱啪啪视频| 户外裸露刺激视频第一区| 亚洲熟妇自偷自拍另欧美| 久久做97| 91综合网在线| 免费观看国产不卡av| 99综合视频| 色综和网| 亚洲毛片基地专区| 婷婷激情五月天小说网| 欧美制服另类丝袜| 日本五区不卡| A一区片| 色婷婷丁香五月| 午夜毛片高清免费不卡| 蜜臀久久99精品久久久久久-DVD| 亚洲精品尤物yw在线影院| 这里只有精品视频在线| 亚av顶级裸体一区二区三区四区五区| 99国产女人| 日韩久久.一级黄色片| 97精彩视频网站| 久久中文字幕女同性恋一区| 午夜性生活av免费在线看| 人妻精品视频一区二区| 欧美乱妇狂野欧美在线视频| 少妇久久| 婷婷久久综合| 国产丁香精品露脸视频| 搡老女人老妇女AAA一VU麻豆| 国产操逼逼网| 亚洲欧美激情小说| 亚洲棕合电彰| 二色av| 超碰人妻久久| 精品v日韩欧美国产| 欧美色997| 人人操人人uiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii | 天天摸天天操视频| 日本加勒比无码专区| 亚洲欧美日韩二区视频| 久艹伊人精品综合在线| 国产路线专区| 91九色精品熟女内射| 亚洲美女黄色| 嫩草一区二区在线观看| 国产不卡中文字幕免费avi| 成人线上超碰| 中出91| 黄页网站成人免费| 欧美系列在线一区二区| 欧美91久久久久| 久久精品国产亚洲AV嘿嘿| 久干网| 午夜亚洲国产理论秋霞| 欧美色图成人网一区二区 | 囯戸精品高潮呻吟旡码| 91在线限制级| 国产精品分类在线观看| 射欧美综合| 欧洲亚洲国产综合在线| 青娱乐蜜桃臀AV色婷| 亚洲AV无码乱码| 99热在线不卡| 一本久道在线综合视频| 久久宗合亚洲| 亚洲精品中文字幕一区在线视频 | 色操逼网| 中文字幕日韩情色| 激情综合网五月婷婷| 0755午夜福利视频| 成人贴图日韩欧美| 亚洲乱色熟女一区| 岛国不卡超碰护士AV在线播放| 亚洲最新中文字幕免费| 欧美日韩国产精品久久色婷婷| 激情久久久| 好吊色青靑草| 夜夜騷av、一區二區| 亚洲国产尤物yw在线观看| 国产精品夜夜| 欧美亚洲综合色| 青青青国产手线观看视频2| 日韩少妇无吗| 亚洲啪啪性视频| 欧美爱爱97| 搞中出视频在线观看| 美国日韩黄色片| 婷婷久月| 天堂网 主播 亚洲| 屌逼麻豆| 日本精品无码三级网站| 国产丝袜啪啪| 人人搡人人肉久久精品| 国产67194| 98人妻精品一区二区色欲| 91欧美综合在线| 先锋精品av色鲁| 无码丰满熟妇一区二区浪潮AV| 久久久免费高清中文视频| 人人妻人人操人人乐| 日韩卡一卡二卡三在线| 日本色日夜干| 人妻少妇久久中文| 国产人伦精品一区二区三区| 日本高清有码网址视频| 亚洲伊人成综合成人网| 亚洲国产福利视频| 裸模AV女优| 天天天天干| 五十路三级片| 亚洲高清视频在线免费观看| 素人伊尹大香蕉免费下载视频| 真实高潮91| 色五月综合网| 播播亚洲小说亚洲| 免费?级毛片无码?∨蜜芽试看| 日韩三级av片| 激情文学小说一区二区 | 激情四射婷婷六月天| 亚洲中文字幕乱码无码一区二区| 免费精品福利在线观看| 国产高清无码一区三区二区| 亚洲国产精品无码AV久久| 91麻豆天美国产欧美高潮| 天天日天天射天天干| 夜夜肏2021| www.91久久| 333kkkk·亚洲com久久| 色视频蜜乳| 亚洲无 码A片在线观看麻豆| 亚洲少妇视频| 国产丁香精品露脸视频| 蜜臀无码一区二区| 欧美变态激情网| 精品美女在线视频| 青青操97| 91青视频| 九久9热| 日韩97超碰中文字幕| 国产亚洲精品自在线亚洲情侣| 国产三级多多影院2022国产AA一级毛片无码| 加勒比伊人| 天美传媒婬乱在| 色欲久久99国产精品久久久久久| 老熟女天天操| 加勒比色99999| 精品在线78| 大香蕉懂9| 99re28在线观看| 密臀在线视频| 一本久道久久综合狠狠爱一密臀精| 自拍第一页| 久久婷婷一区| 久久精品导航| 精品午夜福利| 国产精品精品系列在线观看| 91精品人妻偷情| 国内精品久久人妻性色av| 操B视频日韩无码| 草草影院最新网址| 97人妻免费中文字幕| 亚洲国产麻豆一区二区三区| 国产树林里野战在线看| 九九人人操| 一区二区激情国产熟女| 欧亚乱色熟一区二区三四区| 97亚洲资源| 日日干夜夜欢| 日本大香蕉综合网红本杳社区| 天天干人人乐| 欧洲在线性爱视频| 逼操网站| 人妻熟女av国产网站| 色婷婷六月| 97在线国产精品| 欧美91在线+|+欧美| 俺也射| 96精品久久| 超清福利精品视频在线| 国语国产操逼伊人AV网| 色情成人五月天| 日韩少妇丰满亚洲| 综合大香蕉美。| 麻豆天美一区二区| 国产精品亚洲高清在线| 91精品久久久久久77777| 嗯嗯啊啊操死我| 道久久五香丁月婷婷激情综合| 欧美综合综合| 伊人黄色片| 婷婷激情五月综合| 妇人噜噜| 午夜毛片亚洲精品片国产久久久| 成 人片 黄色大片| 久久久久久久人妻| 亚州综合图片| 久热一区二区| 亚洲精品中文字幕一区在线视频 | 中文字幕一二三| 一线黄色免费性爱片| 另类图片五月天| 99精品人人爽| 天天日天天操天天射河南省| 97任你吞精| 综合干干干av久久久综合网| 夜夜高潮夜夜爽国产伦精品| 熟女激情综合网| 丁香五月偷拍| 嗯~啊~快点 死我视频免费看网站| 中文字幕欧美丝袜07资源| 日本性爱不卡视频| 自拍二页| 天美传媒精品一区二区| 久久艹逼视频| 亚洲综合情色| 亚洲无码国产探花在线观看| 床上啊啊啊一区二区三区| 免费超碰97久久| 操逼逼一区视频| 又大又长又爽| 亚洲日韩电影| 亚洲色五月| 久久久一二三四区| 亚洲乱码国产乱码精网站| 啊啊啊啊二区好大| 国产精品白领在线观看| 丝袜美腿诱惑亚洲欧美视频在线观看| 大干人妻| 欧美亚洲日本激情在线| 久久99深爱久久99精品| 亚洲精品国产熟女| 亚洲另类色图片| 91情色| 欧美少妇大量自拍视频在线观看| 亚洲欧美伦综合| 色播五月丁香| 蜜屁av| 91狠狠色丁香婷婷综合久久精品| 啊啊啊啊,啊啊好多水| 日韩午夜精品一区二区三区电影| baiduhicn.com。| 另类小说综合网| 午夜精品久久久久| 国产日逼视频| 狠狠2050在线观看| 精品人妻av在线播放| 我中文字幕6区| 91精品女厕偷拍视频| 大香蕉欧美国产日韩高潮| 免费啪啪av| 欧美少妇高潮久久91| 亚洲第一狼人丝袜美女另类| 久久少妇人妻| 亚洲免费人妻在| 精品人妻一区二区免费看| 五月激情小说| 精品视频一区二区| 91色五月俺来也| 人妻一区二区三区视频| 另类视频在线| 狠狠激情综合狠狠操中文字幕| 成人情色综合网| 中文字幕一区av| 思思热在线视频在线| 青青草日本中文字幕| 亚洲国产91精品一区二区久久| 欧美天堂超碰97| 国产情侣自拍在线播放| 亚洲精品欧洲色| 麻豆婷婷成人一二三| 五月丁香拍拍激情综合三级| 亚洲色天堂九9| 亚洲天堂综合AV| 国产黄色小视频网站| 久久一区二区加油站| 六月丁香婷| 中文字幕黄片在线| 精彩久久中文| 野狼激情网| 大黄片做爱的大的| 久久久久白虎| 欧美72网页| 亚洲夜夜欢无码一区二区| 欧美日韩中文视频播放| 中文字幕AV片| 一区二区激情国产熟女 | 久久久久久性爱视频| 久久一区二区高清免费| 日韩一级二级三级| 欧美情色贴图| 狠狠狠狠狠| 这里只有精品视频在线观看麻豆| 亚洲综合嫩| 男人的天堂VA在线| 天天色粽合合合合合合合| 国产中文字幕在线点播| 色亚洲欧美| 男插女青青影院| 日韩黄色成人性爱| 人妻无一区二区三区| 欧美草草高清日韩视频| 99蜜桃臀亚洲成人在线观看| 亚洲操操操| 丰满人妻无码一区二区三区| 国产熟女精品一区二区| 国产精品69久久久久孕妇欧美| 一区二区三区 丝袜 高跟 美腿| 在线强奷到舒服的无码视频| 黄色免费一级在线毛片| 男人天堂导航| 超碰一区二区| 最新中文字幕av| 欧美制服网站美腿丝袜| 国产精品久久久久av| 久草免费福利在线播放| 中文?日韩?免费?精品| 成人三级片一区二区三区视频| 欧美日韩青操| 亚洲综合图文| 北条麻妃99精品青青久久| 91啪啪视频| 艹比视频国产精品| 狠狠操夜夜| 国产精品4p在线观看| 92久久| 校园激情狠狠四射| 亚洲AV不卡在线观看| 91 亚洲情侣偷拍 久久| 国产精品欧美激在线| 91色鬼| 免费视频在线观看啊啊啊啊啊| 色婷婷电影网| 婷婷综合网| 日韩成人综合网| 国模精品一区二区三区苹果色戒| 日本操逼视频导航| 中文字幕亚洲永久精品| 黄色片,com| 啪啪啪东京| 性爱乱伦视频免费| 蜜乳Av成人片网站| 奇米四色影视777久久久| 亚洲人妻中文在线视频| 一级片视频啪啪| av激情亚洲五月天| 精品欧美老熟女一二区| 日韩亚洲欧美中文字幕| 久久久97| 久久 国产 无码| 嫩呦国产一区二区三区AV| 成人无码在线超碰网| 天天色天天干天天爱| 日本免费一级AAA大片器 | 偷拍亚洲情色| 视频二区美腿制服人妻欧美| 日本 情色 1区| 精品超碰国产| 欧美黄色片AAAAA| 激情综合五月| 啊嗯好大视频在线观看| 激情亚洲天堂| 91精品少妇搡搡搡| 日韩无码第3页| 天天躁日日躁狠狠躁| 欧美不卡在线一区二区| 天天操天天射天天日| 无码聚合| 鲁鲁色综合网| 麻豆AV短剧| 加勒比性爱成人在线| 无马一区二区| 国产肏逼网站| 亚洲精品xxx| 99热66| 久久天天躁日日躁狠狠躁| 九九九九一级| 精品九九九九九九| 亚洲成人性爱网站在线播放| 国产三级电影免费观看| 情侣开房子拍 日韩无码 女的很漂亮| 色天使大香蕉| 涩亚洲欧洲| 国产在线综合福利网站| av网页一区二区三区| 99这里有精品视频| 色综和网| 精品999一区二区| 黄色视频60分钟| 97操操| 美美91成人国产精品欧美精品久久久久久久| 久久久久久少妇| 99热| 蜜乳AV色欲AVAV无码| 北条麻妃99精品青青久久| 自拍亚洲综合| 亚洲精品久久久久毛片A片拉屎 | 欧洲亚洲人妻无码中字久久三区四区 | 肉丝中文无码高清| 老司机午夜精品视频| 天堂8在线新版官网| 亚洲综合码| 99re这里只有精品2| 免费的黄片有限公司| 中文字幕在线观看丝袜| 97就爱干| 欧美性爱第一页久久| 色狠狠综合| 日本九九久久99| 国产91影院| 激情综合色| 亚州欧美综合| 日韩人妻一区二区| 色综合色综合网| 亚洲精品1区| 1769一区| 校园春色制服丝袜中文字亚洲| 超碰97亚洲区| 热无码中文亚洲H一道本一区二区| 丁香五月婷婷色| 91美女视频电影| 波多野42部无码喷潮在线观看| 人妻啊啊人妻啊| 蜜臀99久久精品| 成人三一级一片aaa| 色月天AV导航| 天天综合-91入口| 日韩成人综合网| 超碰偷拍| 日本一级性爱| 一二视频神马久久传媒| 巨爆乳一区二区爆乳区| 伊人色综合超碰| 国产激情视频一区区三区| 五月天激情四射| 91久久久久| 色一色综合网| 国产中文日韩欧美一区二区三区人妻丝袜美腿 | av日韩手机在线影视| 美女AV一区二区| 性久久久| 午夜福利在线视频1000| 国产探花日韩援交| 91夜夜蜜桃臀1区2区3区| 精品性爱| 日本免费一区二| 热99这里有精品综合久久| 国内91熟女人妻丝袜天天精品视频在线| 久啪视频| 我要看免费韩日黄片| 少妇人妻在线| 久久9视频| 蜜区区视频79| 99操| 美女久久久久久久久久久| 青青草日韩无码| 久久久久久久久久9| 精精夜夜| 人人操人人操人人人操| 伊蕉97蜜桃97狠狠综合干 | 呻吟 欧美 日本 中出| 日韩精品永久在线观看| 精品在线78| 精品一区二区三区蜜桃臀赵总| 好吊色综合| 91色黑人少妇| 日本成人A片免费看| 亚洲精品黑丝| 99久久久99久久91熟女| 国内外内射高清视频| 少妇诱惑视频| 精品久久久久av影院| 夜夜嗨TV| 蜜色网色哟哟| 91在线超高颜值国产| 日韩干B| 国产后入精品| AV在线性爱| 日韩成人人妻网站| 2020中文字幕| se01国产在线视频| 精品人妻一区二区三区蜜桃视频| 五月天啪啪| 精品日韩人妻精品一二三区| 色欧洲97| 特污免视频| 再深点灬舒服灬太大了添视频| 麻豆色约约| 欧美性战999| 制服乱伦| 欧美十八禁视频| 国产97综合| 日本不卡高清免v欧美日韩在线观看| 亚洲图片婷婷五月天| 亚洲色图8| 日夜久久久九九九久| 色五月丁香五月| 国产乱伦性爱区| 啊啊啊啊好疼| 色九九九综合| 麻豆60秒| 男男H黄动漫啪啪无遮挡网站| 欧美91精品国产自产| 免费97视频| 亚洲国产综合久久久性感熟妇| 91操人| 一级成人性爱| 999久久久国产精品| 97超碰中文| 欧美在线伊人色| 色婷婷综合网| 欧美系列在线一区二区| 国产粉嫩蜜臀av一区二区三区 | 日韩性爱网址| 欧美黄色大片在线观看| 欧美色女人| 欧美综合色图片| 久久久久9| 日本加靬比网站发布页| 99无码视频| 操逼逼福利视频| 成人av在线播放| 屁股久久久久久| 色噜噜日韩精品| 91激情综合| 欧美日韩婷婷中文| 蜜桃精品一区二区三区ww | 亚洲天堂无码| 啪啪视频亚洲第一| 激情黄色片在线观看| 97天天综合| 啊啊啊操死我了| 日韩中文9| 婷婷15月天青娱乐| 91视频成人福利网站在线一区 | 亚洲天堂男人天堂| 97在线免费视频观看| 亚洲日韩资源| 97超级色碰碰| 92福利社视频| 神马久久69| 禁十八久久| 午夜福利久久久噜久噜久久综合 | 日韩人妻无码精品系列| 精品人人| 亚洲情色婷婷五月天| 亚洲日韩AV视色| 久久国产三区| 国产精品青青草| 97网址www| 麻豆av一区二区三区| 日韩欧美成人大香蕉| 亚州成人a∨| 中文久久一区| 九一精品牛牛一区二区| 欧美性生活内射| 免费超碰97久久| 视频黄站| 精品少妇一区二区| 国产麻豆91欧美一区二区久久婷婷国产精品| 国产人妻精品一区二区三区秋霞 | 操婷婷逼| 99啪啪| 狠狠中文字幕| 歐美一級亂黃99在綫精品| 久久綜合很很很| 一区二区亚州激情久婷婷欧美| 亚洲天堂久| 欧美色图综合网| 天天射天天操天天干天天吃2018|