99精品久久精品一区二区-亚洲熟妇无码?v在线播放-日本国产精品无码字幕在线观看-久久久亚洲永夜AV-亚洲一级无码一区二区一-免费国产成高清人在线视频-中文字幕乱码免费观看-国产毛片精品妇女久久久

ARTICLE DETAIL

資訊詳情

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

Python函數(shù)完全指南:從封裝到作用域,解決重復(fù)代碼與變量管理

Python函數(shù)完全指南:從封裝到作用域,解決重復(fù)代碼與變量管理 1. 函數(shù)到底解決了什么問題從一段重復(fù)代碼說起先聊點(diǎn)帶新人的體會。這兩年我陸陸續(xù)續(xù)帶過一些從零開始學(xué)Python的朋友發(fā)現(xiàn)大多數(shù)人并不是卡在語法本身而是卡在一個(gè)更基礎(chǔ)的問題上不明白函數(shù)這東西到底有什么用。很多人學(xué)def的時(shí)候覺得哦就是把一段代碼包起來但真到自己寫項(xiàng)目時(shí)幾十行腳本平鋪下來改一個(gè)需求要翻三個(gè)地方最后干脆復(fù)制粘貼改一處漏一處。最典型的場景就是數(shù)據(jù)處理。幾個(gè)朋友最初寫爬蟲時(shí)代碼長這樣price_text response.find(span, class_price).text price float(price_text.replace(¥, ).replace(,, )) if price 100: print(貴了)這段邏輯如果只在頁面上查一次價(jià)格沒問題。但爬蟲通常要爬幾十個(gè)商品同樣的清洗代碼就得復(fù)制幾十遍。等改需求把貨幣符號從¥換成USD你就得全局搜索替換稍不留神就漏掉一處。這種事情我當(dāng)年干過不止一次每次都在心里罵自己當(dāng)初為什么不寫個(gè)函數(shù)。1.1 一段邏輯出現(xiàn)了兩次以上就有必要封裝這里沒有很懸的理論判斷標(biāo)準(zhǔn)非常樸素一段邏輯只要出現(xiàn)兩次以上就有必要考慮封裝成函數(shù)。封裝之后調(diào)用方只需要關(guān)心輸入輸出不關(guān)心中間過程。就好比你用洗衣機(jī)只需要把衣服放進(jìn)去、按開始不需要知道里面的電機(jī)怎么轉(zhuǎn)、水位傳感器怎么判斷水位。封裝成函數(shù)之后上面的價(jià)格清洗可以寫成這樣def parse_price(text): return float(text.replace(¥, ).replace(,, )) price parse_price(response.find(span, class_price).text)看著很簡單但好處是實(shí)打?qū)嵉?。以后貨幣符號變了只需要改parse_price一處的邏輯以后格式判斷規(guī)則復(fù)雜了也只需要在函數(shù)內(nèi)部加代碼。調(diào)用方一行都不用動。1.2 函數(shù)封裝的三個(gè)直接好處第一個(gè)好處是消除重復(fù)。代碼量減少出錯(cuò)面也隨之減少這是最直觀的收益。第二個(gè)好處是隔離復(fù)雜度。函數(shù)內(nèi)部隨便你怎么寫只要保持參數(shù)和返回值穩(wěn)定外面的代碼就不會被影響。寫的時(shí)候腦子里有個(gè)邊界這個(gè)函數(shù)只負(fù)責(zé)把文本變成浮點(diǎn)數(shù)不負(fù)責(zé)判斷價(jià)格是否合理。邊界劃清楚了代碼就能拆成一塊塊獨(dú)立調(diào)試。第三個(gè)好處是可測試性。有了函數(shù)你可以在交互式環(huán)境里單獨(dú)驗(yàn)證它 parse_price(¥1,299.00) 1299.0 parse_price($12.99)這個(gè)時(shí)候你就能發(fā)現(xiàn)——哦美元符號沒處理函數(shù)拋了ValueError。如果是平鋪的腳本你得把整個(gè)爬蟲跑起來才能發(fā)現(xiàn)這個(gè)問題。1.3 什么時(shí)候不值得抽函數(shù)話又說回來不是所有代碼都要抽函數(shù)。我見過一些朋友為了抽象而抽象三行代碼也要包一層函數(shù)結(jié)果整個(gè)項(xiàng)目里全是轉(zhuǎn)發(fā)型函數(shù)讀起來反而費(fèi)勁。我的經(jīng)驗(yàn)是三個(gè)判斷維度重復(fù)次數(shù)、邏輯復(fù)雜度、變化頻率。一段邏輯只出現(xiàn)一次、邏輯只有兩行、以后基本不變——這種情況完全沒必要抽函數(shù)。反過來說一段邏輯會出現(xiàn)多次、內(nèi)部狀態(tài)多、需求方經(jīng)常改——這種情況不抽函數(shù)就是給自己埋雷。2. def到return函數(shù)從定義到調(diào)用的完整執(zhí)行邏輯很多教程講函數(shù)上來就給你看語法什么def、參數(shù)、返回值列一遍看起來都認(rèn)識但自己寫就懵。我后來發(fā)現(xiàn)真正的問題在于很多人不理解函數(shù)的執(zhí)行流程。函數(shù)不是隨便寫的一段帶名字的代碼它在Python里有非常明確的執(zhí)行機(jī)制。2.1 def是一個(gè)可執(zhí)行語句不是聲明先糾正一個(gè)很常見的誤解很多人以為def像C語言里的函數(shù)聲明一樣是告訴編譯器我要定義一個(gè)函數(shù)。實(shí)際上Python里的def是一條運(yùn)行時(shí)執(zhí)行的語句。什么意思解釋器執(zhí)行到def那一行的時(shí)候會創(chuàng)建一個(gè)函數(shù)對象然后把這個(gè)對象綁定到def后面的名字上。舉個(gè)直觀的例子這段代碼能正常運(yùn)行if True: def greet(): return hello else: def greet(): return world print(greet()) # hellodef寫在if分支里完全合法。因?yàn)閐ef就是普通語句解釋器執(zhí)行到哪條就創(chuàng)建哪個(gè)函數(shù)。同理你可以在函數(shù)里面再定義函數(shù)這也是后面講閉包的基礎(chǔ)。順便提一句因?yàn)閐ef是執(zhí)行語句函數(shù)對象在定義之后才存在。如果你在def之前去調(diào)用這個(gè)函數(shù)必然會得到NameError。這個(gè)順序問題很多新手踩過坑其實(shí)理解了def是運(yùn)行時(shí)語句就不會再犯。2.2 調(diào)用的三個(gè)步驟壓棧、綁定參數(shù)、執(zhí)行函數(shù)體函數(shù)調(diào)用在Python里是這樣發(fā)生的。當(dāng)解釋器執(zhí)行到greet(張三)這樣的表達(dá)式時(shí)它會在內(nèi)存中創(chuàng)建一塊新的命名空間也就是局部作用域把實(shí)參張三綁定到函數(shù)定義里的形參name上在這個(gè)新的命名空間里逐行執(zhí)行函數(shù)體代碼執(zhí)行完畢后銷毀這個(gè)命名空間把返回值如果有的話交給調(diào)用方整個(gè)過程可以想象成你打開一個(gè)便簽本在便簽本上寫函數(shù)內(nèi)部的草稿寫完撕下來帶走結(jié)果便簽本丟掉。函數(shù)內(nèi)部建立的變量在函數(shù)結(jié)束那一刻就沒了——這就是局部變量的本質(zhì)。2.3 return真正的含義結(jié)束函數(shù)并把值送回調(diào)用點(diǎn)return的作用有兩層。第一層是立即結(jié)束函數(shù)的執(zhí)行。函數(shù)體里不管后面還有多少代碼只要遇到return函數(shù)就結(jié)束了。第二層是把值傳回調(diào)用點(diǎn)。有一點(diǎn)需要注意如果函數(shù)體里沒有寫returnPython會隱式返回None。很多新手發(fā)現(xiàn)一個(gè)函數(shù)打印正常、賦值卻是None原因就在這里def add(a, b): result a b # 忘了寫 return result total add(1, 2) print(total) # None這是新手最容易踩的坑之一而且不太好排查因?yàn)榭雌饋砗瘮?shù)內(nèi)部一切正常。解決方案也簡單寫函數(shù)的時(shí)候先想清楚這個(gè)函數(shù)要對外提供什么結(jié)果然后確保所有分支都return了。2.4 函數(shù)定義的基本骨架一個(gè)完整的函數(shù)由四部分組成函數(shù)名、參數(shù)列表、函數(shù)體、返回值。函數(shù)名要能表達(dá)這段代碼做了什么參數(shù)列表是外部傳入的輸入函數(shù)體是處理邏輯返回值是對外提供的輸出。def 函數(shù)名(參數(shù)列表): 文檔字符串說明這個(gè)函數(shù)的功能 函數(shù)體 return 返回值文檔字符串這個(gè)東西我強(qiáng)烈建議養(yǎng)成習(xí)慣。不用寫很長兩三行就行說明函數(shù)做什么、參數(shù)是什么、返回什么?;仡^過一個(gè)月再來看自己的代碼你就知道這玩意多值錢了。3. 參數(shù)傳遞的演化從位置參數(shù)到關(guān)鍵字參數(shù)到*args和**kwargs參數(shù)是函數(shù)和外部交互的窗口這塊學(xué)扎實(shí)了函數(shù)寫的才能靈活。很多教程把參數(shù)類型一口氣列出來看的人一頭霧水。我的建議是不要背按需求場景去理解。3.1 最簡單的場景位置參數(shù)最基礎(chǔ)的是位置參數(shù)調(diào)用時(shí)按順序傳值def profile(name, age, city): return f{name}{age}歲來自{city} print(profile(李雷, 25, 北京)) # 李雷25歲來自北京這種方式的缺點(diǎn)是調(diào)用時(shí)必須記住參數(shù)順序。如果profile定義是(name, city, age)調(diào)用方寫錯(cuò)順序程序不一定報(bào)錯(cuò)但結(jié)果就錯(cuò)了。所以當(dāng)參數(shù)數(shù)量多、順序容易混的時(shí)候就用關(guān)鍵字參數(shù)print(profile(name李雷, city北京, age25))關(guān)鍵字參數(shù)的好處是顯式寫明每個(gè)值的含義且不依賴順序。我給自己定了個(gè)習(xí)慣函數(shù)參數(shù)超過三個(gè)調(diào)用時(shí)一律用關(guān)鍵字參數(shù)。這不是強(qiáng)制規(guī)范但能減少很多低級錯(cuò)誤。3.2 給參數(shù)一個(gè)默認(rèn)值但不是所有參數(shù)都適合默認(rèn)值參數(shù)的場景很容易理解大部分時(shí)候這個(gè)參數(shù)用一個(gè)值偶爾需要改。比如def connect(host, port3306): return f連接 {host}:{port}調(diào)用時(shí)可以只傳hostport用默認(rèn)值也可以兩個(gè)都傳。但要注意默認(rèn)值參數(shù)必須放在非默認(rèn)參數(shù)后面。def connect(port3306, host)是語法錯(cuò)誤因?yàn)镻ython沒法判斷調(diào)用connect(127.0.0.1)時(shí)傳的是哪個(gè)參數(shù)。3.3 吃過大虧的坑默認(rèn)值不要用可變對象這是Python函數(shù)定義里最有名的一個(gè)坑幾乎每個(gè)寫過一段時(shí)間Python的人都撞過??催@個(gè)例子def add_item(item, items[]): items.append(item) return items你覺得兩次調(diào)用會返回什么直覺告訴你是[a]和[b]實(shí)際上第二次調(diào)用返回的是[a, b] add_item(a) [a] add_item(b) [a, b]原因是默認(rèn)值是在def語句執(zhí)行時(shí)被創(chuàng)建一次之后所有調(diào)用共享同一個(gè)列表對象。每次調(diào)用append都是在同一個(gè)列表上操作。解決方案是習(xí)慣性的寫法——默認(rèn)值設(shè)為None函數(shù)內(nèi)部再創(chuàng)建def add_item(item, itemsNone): if items is None: items [] items.append(item) return items我現(xiàn)在的規(guī)則是任何默認(rèn)值只要是可變對象list、dict、set一律用None內(nèi)部創(chuàng)建的寫法。這不是強(qiáng)迫癥是為了不給自己埋雷。3.4 不確定參數(shù)個(gè)數(shù)怎么辦*args和**kwargs有時(shí)候你確實(shí)不知道調(diào)用方會傳多少個(gè)參數(shù)。比如實(shí)現(xiàn)一個(gè)求和函數(shù)def sum_all(*args): return sum(args) print(sum_all(1, 2, 3)) # 6 print(sum_all(1, 2, 3, 4, 5)) # 15*args會把所有傳入的位置參數(shù)收集成一個(gè)元組。**kwargs則收集關(guān)鍵字參數(shù)成一個(gè)字典def print_options(**kwargs): for key, value in kwargs.items(): print(f{key} {value}) print_options(debugTrue, levelINFO)*args和**kwargs最常見的用法是在封裝、擴(kuò)展已有函數(shù)時(shí)。比如你想給一個(gè)現(xiàn)有的函數(shù)加日志但不想改它原本的參數(shù)簽名就可以用這兩個(gè)。4. return的秘密返回值的類型、多值返回與提前返回return是函數(shù)和外部世界的交接棒。很多函數(shù)寫不好不是因?yàn)檫壿嫃?fù)雜而是不明確這個(gè)函數(shù)到底對外提供什么。理清返回值函數(shù)的設(shè)計(jì)就順了一半。4.1 函數(shù)返回類型要穩(wěn)定這一點(diǎn)我想放在最前面強(qiáng)調(diào)。寫函數(shù)時(shí)最好保證同一個(gè)函數(shù)在正常情況下返回的類型是一致的。比如一個(gè)解析配置的函數(shù)要么返回字典要么返回None表示解析失敗不要有時(shí)候返回字符串有時(shí)候返回列表。返回類型不穩(wěn)定調(diào)用方就得寫一堆isinstance判斷代碼質(zhì)量直線下降。Python雖然沒有靜態(tài)類型檢查但習(xí)慣上可以在函數(shù)簽名里標(biāo)注返回類型def parse_price(text: str) - float: 把價(jià)格文本轉(zhuǎn)成浮點(diǎn)數(shù) return float(text.replace(¥, ).replace(,, ))類型標(biāo)注不會強(qiáng)制檢查但對閱讀代碼的人幫助極大??吹? float調(diào)用方就知道這個(gè)函數(shù)返回浮點(diǎn)數(shù)不用去翻函數(shù)體。4.2 返回多個(gè)值其實(shí)是返回一個(gè)元組Python的函數(shù)能不能返回多個(gè)值語法上可以def get_user(): name 李雷 age 25 return name, age user_name, user_age get_user()看起來像返回了兩個(gè)值本質(zhì)上是返回了一個(gè)元組(李雷, 25)然后調(diào)用方用解包的方式分別賦值。這是一種非常Pythonic的寫法適合返回少量、彼此相關(guān)的值。但如果要返回的值超過三個(gè)我的建議是使用命名元組或字典否則調(diào)用方很容易搞混順序from collections import namedtuple User namedtuple(User, [name, age, email]) def get_user(): return User(李雷, 25, lileiexample.com) user get_user() print(user.name) # 比 user[0] 可讀性強(qiáng)多了4.3 提前return防御式編程的利器return不僅僅用來返回結(jié)果它還是個(gè)控制流工具。當(dāng)一個(gè)函數(shù)有很多前置條件時(shí)用提前return可以讓代碼層級從深嵌套變成平鋪。舉個(gè)例子下面是“嵌套地獄”的風(fēng)格def process_data(data): if data is not None: if len(data) 0: result analyze(data) if result is not None: return result return None用提前return重寫def process_data(data): if data is None: return None if len(data) 0: return None result analyze(data) if result is None: return None return result兩種寫法結(jié)果一樣但第二種明顯更容易讀懂和修改。每增加一個(gè)條件就加一個(gè)ifreturn不需要把新邏輯嵌到已有的縮進(jìn)里去。提前return讓非法路徑先走合法路徑留在最后這是我很推薦的一種風(fēng)格。4.4 不寫return的函數(shù)也能影響外部嗎有一種特殊情況函數(shù)內(nèi)部不寫return但通過修改傳入的可變對象來輸出結(jié)果。這種用法并不少見比如往傳入的list里添加元素def add_tags(tags, new_tag): tags.append(new_tag) my_tags [python] add_tags(my_tags, 函數(shù)) print(my_tags) # [python, 函數(shù)]函數(shù)沒有返回任何東西但外部變量被改了。這不算錯(cuò)誤但隱式的副作用會讓代碼難排查——調(diào)用方很難看出變量是否被修改。我的建議是如果一個(gè)函數(shù)會修改傳入的可變對象名字里最好體現(xiàn)出來比如add_tag_to_list調(diào)用方看到名字就知道它動手了。能通過返回值表達(dá)的邏輯盡量用返回值少用副作用。5. 全局還是局部作用域規(guī)則如何決定變量的命運(yùn)函數(shù)里能訪問哪些變量不能訪問哪些變量這個(gè)規(guī)則不搞清楚寫出來的代碼就是薛定諤的Bug——看起來偶爾正常偶爾報(bào)NameError讓人摸不著頭腦。5.1 LEGB規(guī)則Python查找變量的順序Python在函數(shù)內(nèi)部查找一個(gè)變量時(shí)按這個(gè)順序去找局部作用域Local→ 嵌套函數(shù)的外層作用域Enclosing→ 全局作用域Global→ 內(nèi)置作用域Built-in。這就是LEGB規(guī)則。舉個(gè)例子x 全局 # 全局作用域 def outer(): x 外層 # Enclosing作用域 def inner(): x 內(nèi)層 # Local作用域 print(x) inner() outer() # 內(nèi)層如果inner里沒有定義x它會向外層找外層沒有再找全局全局沒有就去內(nèi)置作用域找比如len、print這類內(nèi)置函數(shù)。一路找不到就拋NameError。5.2 一個(gè)讓很多人懵掉的現(xiàn)象局部變量遮蔽全局變量看這段代碼count 10 def show_count(): count 20 print(count) show_count() # 20 print(count) # 10函數(shù)內(nèi)的count 20創(chuàng)建了一個(gè)新的局部變量和外面的全局count無關(guān)。函數(shù)結(jié)束后局部count銷毀外面的count還是10。這就是“遮蔽”——局部變量把全局變量擋住但只在自己這一畝三分地里擋住。很多初學(xué)者會誤以為函數(shù)內(nèi)修改全局變量全局就變了其實(shí)不然。只有在函數(shù)內(nèi)顯式聲明global才能修改全局變量count 10 def change_count(): global count count 20 change_count() print(count) # 205.3 UnboundLocalError一個(gè)極其迷惑的報(bào)錯(cuò)比5.2更坑的是這個(gè)場景count 10 def show_count(): print(count) # 報(bào)錯(cuò) count 20這行print(count)會拋UnboundLocalError它不去讀全局的10。原因是Python在編譯函數(shù)的時(shí)候發(fā)現(xiàn)函數(shù)體里有count 20這個(gè)賦值語句于是把count標(biāo)記為局部變量。局部變量在賦值之前使用就是未綁定所以報(bào)錯(cuò)。解決方式就是5.2里說的用global聲明或者換個(gè)局部變量名不要和全局變量重名。這個(gè)報(bào)錯(cuò)的迷惑性在于它不像NameError那樣容易理解很多人會想count不是定義在外面了嗎為什么不能用理解了Python按賦值語句判斷局部性這個(gè)機(jī)制就不會再被它絆住了。5.4 nonlocal嵌套函數(shù)中修改外層變量global解決的是函數(shù)內(nèi)修改全局變量的問題nonlocal解決的是嵌套函數(shù)里修改外層函數(shù)局部變量的問題def outer(): total 0 def inner(): nonlocal total total 1 return total return inner counter outer() print(counter()) # 1 print(counter()) # 2這里inner通過nonlocal聲明表示total是外層函數(shù)的變量允許修改。如果不加nonlocaltotal 1會報(bào)UnboundLocalError和5.3是一個(gè)道理。nonlocal是學(xué)習(xí)閉包時(shí)的關(guān)鍵一環(huán)但也別濫用——嵌套層級太深了代碼讀起來也費(fèi)勁。6. 函數(shù)也是對象嵌套、傳遞、lambda和高階函數(shù)進(jìn)入這個(gè)部分函數(shù)就不只是執(zhí)行的代碼段了它變成了一種可以操作的數(shù)據(jù)。這個(gè)思維轉(zhuǎn)變很重要很多編程技巧都建立在這個(gè)基礎(chǔ)之上。6.1 函數(shù)是一等公民意味著什么在Python里函數(shù)和整數(shù)、字符串一樣是對象。對這個(gè)函數(shù)對象你可以賦值給變量、放進(jìn)列表、作為參數(shù)傳給另一個(gè)函數(shù)、作為返回值從函數(shù)里出來。def add(a, b): return a b my_func add # 賦值不帶括號 print(my_func(3, 5)) # 8不帶括號的add引用的是函數(shù)對象本身帶括號的add(3, 5)是在調(diào)用這個(gè)函數(shù)并得到結(jié)果。這個(gè)區(qū)別是理解函數(shù)可以當(dāng)參數(shù)的關(guān)鍵。6.2 高階函數(shù)函數(shù)作為參數(shù)和返回值接收函數(shù)作為參數(shù)或者返回函數(shù)的函數(shù)統(tǒng)稱高階函數(shù)。最典型的例子是sorted的key參數(shù)students [ {name: 李雷, score: 85}, {name: 韓梅梅, score: 92}, ] students.sort(keylambda s: s[score])這里的key接收一個(gè)函數(shù)sorted內(nèi)部會對每個(gè)學(xué)生調(diào)用這個(gè)函數(shù)用返回值作為排序依據(jù)。如果不理解函數(shù)可以作為參數(shù)傳遞你就沒法理解為什么key這里要寫一個(gè)函數(shù)。自己動手寫一個(gè)高階函數(shù)也很簡單def run_twice(func, value): return func(func(value)) def add_one(x): return x 1 print(run_twice(add_one, 5)) # 76.3 lambda一句話寫一個(gè)匿名函數(shù)lambda是一種簡化寫法適合函數(shù)邏輯非常簡單、不需要名字的時(shí)候。比如上面sort例子里lambda s: s[score]等價(jià)于def get_score(s): return s[score]lambda的語法是lambda 參數(shù): 表達(dá)式。注意lambda只能寫一行表達(dá)式不能寫多條語句。如果你發(fā)現(xiàn)lambda寫得太復(fù)雜說明這個(gè)場景不該用lambda老老實(shí)實(shí)def一個(gè)具名函數(shù)可讀性更好。6.4 裝飾器高階函數(shù)最經(jīng)典的應(yīng)用理解了函數(shù)可以作為參數(shù)和返回值裝飾器就順理成章了。裝飾器的本質(zhì)是給函數(shù)增加額外功能但不修改函數(shù)本身的代碼def my_decorator(func): def wrapper(*args, **kwargs): print(調(diào)用前) result func(*args, **kwargs) print(調(diào)用后) return result return wrapper my_decorator def say_hello(): print(你好) say_hello()這里的my_decorator只是語法糖它等價(jià)于say_hello my_decorator(say_hello)。裝飾器接收原函數(shù)返回一個(gè)新的wrapper函數(shù)原來的say_hello名字被重新綁定到wrapper上。調(diào)用say_hello時(shí)真正執(zhí)行的是wrapperwrapper內(nèi)部再調(diào)用原函數(shù)。寫裝飾器的時(shí)候wrapper用*args和**kwargs接收所有參數(shù)就能兼容任何原函數(shù)。這是*args和**kwargs使用頻率最高的場景之一。7. 從TypeError到NameError把最常見的函數(shù)報(bào)錯(cuò)一次講清最后這部分整理一些我在教學(xué)和代碼評審中反復(fù)看到的函數(shù)相關(guān)報(bào)錯(cuò)。這些錯(cuò)誤每個(gè)都有人踩過把報(bào)錯(cuò)信息和原因記住自己能省不少排查時(shí)間。7.1 調(diào)用時(shí)參數(shù)數(shù)量不匹配TypeErrordef greet(name, age): print(f{name} {age}) greet(李雷) # TypeError: greet() missing 1 required positional argument: age這個(gè)報(bào)錯(cuò)最好處理要么補(bǔ)齊參數(shù)要么給age一個(gè)默認(rèn)值。還有一種情況是傳多了greet(李雷, 25, 北京)報(bào)錯(cuò)是takes 2 positional arguments but 3 were given。如果你不確定函數(shù)簽名可以交互式環(huán)境里用help(greet)查看。7.2 UnboundLocalError和NameError作用域問題UnboundLocalError在5.3里已經(jīng)詳細(xì)講過了這里補(bǔ)充一個(gè)容易混淆的場景函數(shù)內(nèi)訪問了一個(gè)不存在的全局變量名。比如def show(): print(name) # NameError: name name is not definedNameError是變量從頭到尾就沒綁定過UnboundLocalError是變量被標(biāo)記為局部但賦值之前就用了。兩個(gè)報(bào)錯(cuò)看著像根因完全不同。排查方法先看函數(shù)體內(nèi)有沒有同名變量的賦值語句。有就是UnboundLocalError沒有就是NameError。7.3 返回值使用不當(dāng)把打印當(dāng)返回這個(gè)錯(cuò)太常見了我再強(qiáng)調(diào)一次def add(a, b): print(a b) # 打印不是返回 result add(1, 2) print(result) # None區(qū)別在于print是把結(jié)果輸出到控制臺人能看到return是把結(jié)果交還給調(diào)用方程序能拿到。函數(shù)內(nèi)部可以用print調(diào)試但最終對外提供結(jié)果必須用return。如果看到函數(shù)算得對但拿到的是None優(yōu)先檢查是不是把print當(dāng)成return了。7.4 函數(shù)調(diào)試的三個(gè)實(shí)用建議最后分享三個(gè)我實(shí)際調(diào)試函數(shù)時(shí)常用的方法都是笨辦法但很有效第一步先單獨(dú)測。在交互式環(huán)境里用一個(gè)具體輸入調(diào)用函數(shù)看返回值是否符合預(yù)期。不要在完整項(xiàng)目里調(diào)試函數(shù)那會引入太多干擾變量。第二步檢查邊界。測試數(shù)據(jù)不要只挑正常情況多試試空字符串、空列表、None、邊界數(shù)值。很多函數(shù)Bug都是邊界條件沒處理好。第三步加臨時(shí)打印。在函數(shù)入口打印參數(shù)、在關(guān)鍵節(jié)點(diǎn)打印中間值、在return前打印結(jié)果。定位到問題后再把print刪掉。雖然現(xiàn)在有各種調(diào)試器但臨時(shí)print依然是最直接的手段之一。我寫函數(shù)還有一個(gè)習(xí)慣每個(gè)函數(shù)盡量控制在一個(gè)屏幕能看完的長度。如果一個(gè)函數(shù)超過三十行通常意味著它做了好幾件事可以考慮拆分成幾個(gè)更小、更專注的函數(shù)。這樣每個(gè)函數(shù)都容易理解、容易測試組合起來的系統(tǒng)反而更穩(wěn)定。這算是這幾年寫Python、也帶人寫Python下來最值錢的一條經(jīng)驗(yàn)了。
返回列表
PREV
查看更多資訊
NEXT
返回資訊列表
久久98| 九九热精品6| 久久婷五月综合| 婷婷久久五月天丁香| 丁香色色色| 久久99最新| 就去色色五月丁香婷婷久久久| 丁香五月天在线| 九九偷拍网| 久久久WWW| 激情综合5月| 日本久久激情| 免费看欧美成人A片无码| 国产精品久久久60086| 丁香婷婷久| 丁香五月欧美激情| 噜噜色噜噜网| 无月播播激情在线观看视频| 五月天伊人综合| 嫩草AV久久伊人妇女超级A| 久草热视频在线观看| 99日本黄站| 久久久久久久久月丁| 激情五月天开心| 97人人干| 亚洲中文av| 色五月天婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷婷 | 五月激激激情综合网| 强伦轩人妻一区二区电影| 青青青在线视频国产| 亚洲另类视频| 夜夜夜夜夜操| 久久精品亚洲热| 96丁香六月婷婷蜜桃综合久久| 在线看片h站| 丁香婷婷视频一区二区| 五月婷婷插一插| 亚洲第一成人无码A片| 久久久这里有精品| 激情色色色| 日本va欧美va欧美精品88| 丁香五月综合色婷婷| 久碰综合| 9999热精品| 99re8热精品免费视频| 五月色婷| 亚洲综合久| 思思久久99热只有频精品66| 久久成人精品视频| 26UUU在线观看| 亚州色婷婷| 久青草大香蕉| 天堂网色色| 婷婷在线五月综合| 啪啪啪综合网| 九九精品视频免费在线| 噜噜色天天开心| 九九狠狠干| 亚州第一A片| 成AV人片一区二区三区久久| 偷偷与邻居做爰完整视频| PORNY九色9l自拍视频成人| 噜噜综合网| 97色在线视频| 99热久只有精品首页| 99ri在线播放| 亚洲精品乱码久久久久久综合| 九九色欲网| 婷婷五月天国产传媒| 99碰碰| 女婷久久| 最近中文字幕2019视频1| 人妻AV在线| 人妻中文在线| 婷婷月五天在线在线看| AV成人在线播放| 亚洲无码yw| 久久综合丁香| 婷婷五月六月丁香综合| 99爱在线免费视频| 4399在线观看免费高清毛片| 婷婷丁香五月天影院| 丝袜激情网| 久久网日本| 久久婷婷五月丁香网| 婷婷综合五月天| 成人在线不卡| 人妻VideOssS人妻| 久久爱婷婷| 五月亭亭开心网| 久99视频在线观看| 三级毛片视频| 欧洲S级在线观看| 成人在线网| 久久久久亚洲AV无码网影音先锋| 婷婷欧美色| 丁香六月高清视频| 91久久九久久九久久九久久九久久| 五月婷视频| 五月婷婷亚洲| 99久久97| 久久黄A片| 激情综合丁| 成人婷99最新| 日本毛片内射| 六月丁香好婷婷| AA丁香综合激情| 婷婷激情五月呦呦| 丁香五月综合在线| 99成人| 九九re精品视频在线观看| 色人久久| 亚洲操逼片| 亚洲最大五月六月丁香婷婷| 婷婷色婷婷| 久久精品系列| 欧美成人日韩| 91好好热日本在线| 人人操AV| 青青草Avb在线| 26uuu激情五月天| 五月天婷婷伊人| 《亚洲操B久久免费在线观看,亚洲操B久久在线播放》在线播放 - 高清资源 - 97 | 99久久这里只有精品| 九九热只有精品| 丁香久月| 噜噜噜久久| 婷婷亚洲在线| 66精品成人免费网站在线观看| 亚洲五月婷婷| 超碰在线观看99| 人人爱国产| 黑人巨粗进入警花疼哭A片| 99在线69| 色色色色网| 色色九九五月天 | 97色操| 人操91在线| 天天综合久久| 免费无码毛片一区二区A片 | 久久99热免费最新版| 99se丁香| 这里只有精品在线视频在线观看| 丁香色五月AV在线| 99爽视频| 亚洲视99| 熟女人妻视频| 99热这里只有免费精品| 欧美超碰亚洲| av在线观看网站| 99热加勒比| 中文av网| 五月婷婷av| 六月婷婷综合激情| 久久综合激情五月天| 大香蕉啪啪| 1024手机在线观看看片_日韩精品| 青青草原伊人网| 99久精品| 婷婷五月天久久久| 五月丁香婷婷综合网色欲| 96自拍视频九色在线观看| 26uuu国产精品| 第四色在线观看| 日韩狠狠色婷婷| 久久视频九九视频| 婷婷久久欧美| 日韩成人无码人妻| 我爱婷婷五月天综合88| 激情丁香久久| 婷婷成人五月天| 亚洲性天天| 免费观看全黄做爰的视频| 一區四區歐美日韓| 五月婷婷国产| 26uuu欧美| 丁香六月婷婷综合色| 婷婷久久网| 中文无码婷婷| 深爱开心激情网| 九九色网专区| 噜噜国产| 国产精品久久久久久久久久| 五月婷婷av| 99热丁香| 婷五月天影院| 激情综合五月天| 丁香五月大片| 久天综合| 色色色五月天婷婷| 婷婷色中文字幕| 狠狠色丁香婷婷基地| 婷婷激情五月天桃花网| 久久久久9| 六月丁香激情综合| 色VA| 色色色婷婷五月天| 手机AVAV天堂看网| 五月天无码| 五月丁香啪啪综合| 九九99精品免费播放| 婷婷色色网| 婷婷五月乱交换| 激情综合久久| 色婷婷五月综合| 99re思思热在线视频| 超极99精品| 99ri国产| 婷婷狠狠色| 99re熱| 99热午夜精品| 极品人妻VIDEOSSS人妻| 五月天激情小说| 99热6色| 99思思在线视频| 中文字幕不卡视频| 婷婷伊人欧美| 中国女人内射6XXXXX| 五月天综合| 色 丁香婷婷| 六月撸婷婷| 日本不卡高字幕在线2019| 婷婷爱爱蜜臀天天操| 激情五月天丁香| 色婷婷的五月天| 五月丁香婷婷成人伊人网| 任你操精品免费| 91九九九九九九| 婷婷五月天久久久| 欧洲亚洲精品| 狠狠色色| 亚洲热视频| 97碰碰视频| 天天日夜夜帕| 狠狠se| 五月丁香婷在线| 草综合网| 六月色婷婷色| 日本久久99| 无码G高清天| www.五月丁香| 99热久久这里只有精品| 色婷网| 日婷婷久久开心| 91日韩在线| 五月天激情综合| 色色色色色五月| 国产精品久久久久9999小说 | 国产亚洲99久久精品| 五月丁香六月激情欧美综合| 亚洲国产va| 日本成人噜噜噜噜噜| 婷婷亚洲五| 日本三级大片| 亚洲婷婷开心五月| 欧美激情综合色综合色| 99免费| 互月天综合| 思思热久久久久思思热| 99精品在| 五月丁香六月综合基地| 五月婷婷色播| 激情五月天视频| 人人草人人爱| 亚洲无码影音| 97操| 国产色色在线| 99精品在线下载| 狠狠狠狠狠操| 九九精品自拍| 亚洲人妻av伦理| 国产精品久久久久久久久久免费| 久久看九九90| 免费97碰碰| 九艹在线| 丁香月五月天婷婷久久| 五月婷视频| 日韩精品999| 五月天激情小说| 五月激情站| 久久综合婷婷| 久久九九囯产| 丁香五月天欧美成人| 爱草视频在线观看| 天天做天天爽| 大香蕉九九热| 日本久久超碰| 婷婷五月在线视频| 五月丁香综合精品欧美| 色九月婷婷丁香| 99啪啪视频| 凹凸探花电影| 激情无码网| 777色色色| 97精品人人A片免费看| 久久91久久精品久久| 中文字幕五月久久婷婷| 欧美激情丁香五月天久久婷婷一区| 白天AV月月| 五月激情站| 色情五月婷婷| 99自拍视频网站| 色综合久久88色综合天天人守婷| 9热精品| 色婷婷狠狠| 欧美日本99| 色五月综合激情| 这里只有精品久| 99综合成人视频在线观看| 久/久精品99看9| 五月丁香婷婷激情在线| 在线视频另类| 久久久色情| 欧美狠狠一在草| 婷婷五月天毛片| 9久精品视频| 色狠狠色噜噜AV天堂五区| 高清资源站日A美A欧亚…| 91色逼| 激情五月天视频| 91丁香五月| 久久婷婷五月天| 97干视频在线| 激情五月婷婷开心网| 欧美性爱五月天| 激情婷婷综合网| 丁香激情合作五月| 亚洲色色色| 婷婷五月精品中文| 天天爽日日爽夜夜爽| 国产超碰在线| 色婷婷操逼| 人人妻久久妻| 精品五月花| 蜜臀av无码久久久久久久久| 九九五月天| 婷婷日本色| 五月天色婷婷视频| 97精品人人A片免费看| 色婷婷欧美| 六月激情婷婷| 玖玖五月丁香| 色综合天天| 国产在线网址1| www.婷婷网| 色色色干| www.五月天婷婷| 人人综合91网| 在线成人视频免费| 日本高清久| 深爱激情丁香| 一起肏在线视频| 日本色色色| 亚洲超碰中文字幕| 久久久精品色| av激情在线| 五月婷视频| 丁香婷婷综合色五月激情国产基地| 欧美色色色| 国产精品激情AV久久久青桔| 色狠狠色| 98毛片| 超碰久热| 六月色日韩| 五月天久久婷婷| 操操操www.com| 色噜噜综合网| 婷婷成人五月天一区| 成人国产欧美大片一区| 色五狠狠| 日韩色五月| 色婷丁香| 婷婷六月开心网| 久久久天堂国产精品女人| 97色伦另类图片小说视频 | 91xxxx九色| 激情综合网色播五月| 日本免费91| 中文字幕在线免费| 婷婷五月永远18免费久久久| 色情五月婷婷| 丁香久久五月婷综合| 伊人久久大香蕉网| 很很干在线视频| 奇米影视在线视频| 日韩欧美颜射| 天天综合永久| 亚洲综合在线播放| 亚洲蜜桃精久久久久久久久久久久| 99色视频在线观看| 天天干,天天操,天天射| 99热综合| 九九成人| 久色成人| 99热在线资源| 搡BBBB搡BBB搡18 | 色综合久久44| 婷婷五月天成人综合网| 婷婷五月天色色| 色色国产| 婷婷五月综合社区| 俺去啦综合网| 狠狠做六月爱婷婷综合aⅴ| 国自产拍偷拍精品啪啪一区二区| www.色婷婷| 九九免费精品在线视频| 热久久思思热思思| 天天操婷婷| 五月天婷婷激情小说电影| 狠狠色婷婷7777久综合| 激情五月丁香激情综合网| 嫩草视频。| 亚洲第一黄网| 婷婷丁香五月高清| 有码人妻久久| 五月丁香啪综合| 色天堂婷婷| 成人欧美日韩| 亚洲热热视频| 五月开心激情网| 天堂A∨在线| Www.久久| 性欧美大战久久久久久久83| 九月丁香| 玖玖五月| 九九视频在线观看| 五月天久久成人| 五月久熟女| 96丁香婷婷九月蜜桃综合久久| 日本天堂免费99| 99热久久最新地址| www.99热日韩.com| 激情六月婷婷| 99热在线资源| 91色干| 四川女人毛多水多A片| 欧美内射AA| 六月丁香五月天| renrencaoav| 99精品热| 就是色婷婷五月亚洲色| 99九九在线观看免费| 香蕉曰比| 成人免费超碰| 综合色七七| 亚洲综合色网| 五月天激情四射| 91婷婷在线| 殴美综合激情五月天免费视频| 五月婷AV| 五月婷婷亞洲中文| 人人草人人视| 亚洲婷婷免费| 天天日天天草| 婷婷激情综合| AV成人在线播放| 欧洲S级在线观看| 激情五月天婷婷播播久久综合91| 91男同视频| 久久99网站| 国产毛片精品一区二区色欲黄A片| 久操大香蕉| 开心婷婷五月天激情网| 99热在线精品观看| 天天爽综合网| 五月婷婷之综合激情| 亚洲性爱区无码区| 日韩无码色色| www.91.com黄| 五月天婷婷色| 色综合久久888| 亚洲另类在线观看| 国产精品A成V人在线播放| 国精产品一区一区三区免费视频| 亚洲婷婷性爱| 亚洲在线播放| 久久激情五月天| 久久久99久久| 国内裸舞二区| 五月天激情婷婷小说| 国产另类综合| 狠狠干在线| 日韩啪啪视频| 99色在线| 婷久久综合| 色丁香五月| 丁香丁婷五月激情| 五月色婷婷激情| 五月天五月天成人网亭亭成人色网站| 99狠狠| 9191avse| 婷婷综合网伊人| 五月草视频| 成人五月天丁香| 啪啪一区| 久久99网| 激情五月天黄色小说| 操逼123网| 六月激情综合| 99性爱| 亚洲成人综合网在线免费观看| 免费看片操逼| 这里只有视频精品| 五月天婷婷久久视频| 天天爽免费视频| WWW色色色COm| 26uuu欧美亚洲日韩| www,天天干| 婷婷激情社区| 免费99色| 六月婷婷视频| 日日爽夜夜爽| 中文成人在线| 99日本精品视频热| 激情六月日韩| 性做爰1一7伦| 色婷婷六月天| 99热在线精品观看| 婷婷久久久| 狠狠草网| 丁香六月无码| 五月婷婷激情| 色噜噜狠狠色综合网| 亚洲99手机免费看视频| 久热超碰| 一区二区你懂的| 玖玖爱资源站| 激情婷婷激情在线不卡| 色五月偷偷| 丁香九月综合在线| 成人小说 五月天 婷婷| 婷婷九九| 94干大香蕉| 天天做综合网色综合| 99久久99久久综合| 日本99色| 免费在线观看欧美激情xx小视频| 国外亚洲成AV人片在线观看| 99热九九这里只有精品| 色综合中文| 亚洲成人日韩无码精品| 免费久久这里只有精品99| a在线观看| 狠爱婷色| 五月天开心激情综合网| yw国产AV| 久草xx性爱视频| 热久久这里只有精品| 99热18| 久狠狠| 五月色婷丁香| 激情深爱五月| 97久操| 99热这里只有的精品视| 五月婷婷视频| 第四色婷婷五月| 99在线免费视频| 精a品a视a频| 久9视频| 99综合| 激情AV中文| 色五月丁香婷婷| 涩涩激情五月婷婷| 996er热| 色99婷婷五月天| 噜噜国产| 在线观看av网站| 婷婷 伊人 久久| 国产成人AV在线播放| 婷婷八月丁香激情综合| 色五月五月婷婷| 日本激情91| www.婷婷六月天| 99激情在线| 综合色播| 在线观看免费视频| 五月草影视| 91精品国产色猫| 五月丁香婷婷免费视频| 五月丁香 啪啪| 色五月天激情| 99热20| 丁香五月婷中字在线| 久久激情五月网| 99热伊人综合| 久久伦乱| ,99视频久久| 欧美69久成人做爰视频| 婷婷五月视屏| 色综合com| 丁香六月婷婷久久综合| 激情综合网激情五月丁香| 毛片蕉地一二| 日本三级日本三级99| 国产亚洲精品久久久久久郑州| 丁香五月天偷拍| 桃色成人网| 五月天激情www| 亚洲av网站| 五婷婷综合网| 综合XX网| 久鲁鲁色网| 久久六月婷婷| 九色91国产| 五月丁香色色综合| 99碰碰碰| 五月天激情久久| 激情五月com| 亚洲顶级VA在线观看-高清完整版在线影院观看-S022AV | 另类少妇人与禽zOZZ0性伦| 激情九九这里只有精品| 99九九热在线观看| av婷婷六月丁香社区在线观看| 狠狠操狠狠| 色婷婷婷av| 在线亚洲综合网| 开心五月网| 婷婷干五月综合在线播放| 久9热在线视频| 淫五月停停| 熟女激情网| 色色色色色色色色色999| 超碰无码318604| 蜜桃成语时李时珍 免费| 99久久五月婷婷| 激情婷婷人妻| 97碰久久| 亚洲色综合色网| 午夜不卡久久精品无码免费| 久久性操| 九九九九九九九九九九九九九国产精品| 综合久久婷婷| 婷婷婷婷婷婷婷婷| 呦呦视频无码播放| 中文字幕丰满乱孑伦无码专区| 免费看片操逼| 久久婷婷综合五月| 六月丁香久久| 操碰99| 久久激情五月天| 成人久久天天x资源站| 久久久久8888| 99色久| 婷婷九月久久| 国产精产国品一二三在观看| 五月丁香六月欧美综合网站| 婷婷激情人妻| www.久热| 青青草成人网| av狠狠操| 丁香五月婷婷在线观看| 丁香五月婷婷激情123| 五月婷婷黄色| www久久99| 九九人人自拍| 日本专区久久| 超碰国产AV| 丁香婷婷午夜| 色婷婷色综合激情91| 一区操| 强辱丰满人妻HD中文字幕| 日韩成人av在线| 婷婷丁香九月| 久久五月激情综合| 91黄址| 五月丁香自拍| 丁香综合网| 婷婷五月色惰| 久久99精品久久久久久噜噜| 97热九九| 99九九在线| 五月天丁香综合| 国产五月天婷婷| 丁香久久综合| 国产一级片| 永久的网站AAAA| 天天爽成人综合网站| 《诡秘之主》在线观看| 五月天婷综合网站| 激情五月婷婷综合视频| 懂色AⅤ| 老司机日日夜夜青草| 日本狠狠网| 五月天激情网站| 五月天激情亚洲| 国产操B视频| 色欲天天综合| 伊人青草成人| 日韩精品色| 色五月综合激情| 激情综合网五月天| 91操网| 色丁香久久| 国产伦亲子伦亲子视频观看| 久久久久久婷| 五月丁香激情综合六月涩涩爱| 久久精品9| 亚洲激情丁香五月天色| 99久久免费性爱视频`| 亚洲99精品欧美一区| 中文字幕黄色片| AV激情五月| 天天干天天干天天干天天干天天干天天干天天| 色播五月丁香| 久热大香蕉| 这里只有精品久久| 精品自拍97| 综合激情在线| 色五月aV| 超碰网站在线观看| 五月婷婷色色| 五月婷婷婷| 4399在线日本A片| 人妻久久久| 1024欧美日韩精品久久久| 97色干| Www.婷婷五月| 99九色视频在线观看| 嫩草AV久久伊人妇女超级A| 91av无码| 99热 免费| 国产色色视频| 成人做爰高潮A片免费视频| 久久久婷婷色五月资源网| 一区色色色色网| 色婷婷久久综合丁香五月| 久久久97| 成人国产网站| 国产五月婷| 激情久久综合| 丁香五月成人自拍| 丁香五月婷婷色综合基地| 欧美 日韩 成人| 亚洲情综合五月天| www激情| 毛片毛片毛片毛片| 无码少妇高潮喷水A片免费| 狠狠干在线| 久久精品永久免费| 色婷婷六月天| 五月天婷婷操逼视频| 五月婷婷欲色| 99精品偷自拍| 9色在线| 五月丁香六月综合激情| 婷婷六月丁香五月图区| 开心六月丁香五月婷婷| 狼人婷婷久久| 99玖玖人人| 丁香五月婷婷亚洲另类| 天天爽夜夜操| 91超级碰| 99re免费精品视频| 丁香五月停停基地| 99精品在这里| 国产欧美大香蕉一区| 久久婷婷五月综合激情国产| 天天做天天爱| 欧美va视频| 色色色在线观看| 五月黄色婷婷| 亚洲天码视频www蛋播视频| 天堂AV在线看| 国产精品成人AV在线观看春天| 99啪啪| 九九99免费理论| 欧美性猛交99久久久99| 久久综合人妻| 久人人操| 婷婷五月天美女21p| 成人视频免费观看高清完整版在线观看| 激情综合激情五月| 风流少妇A片一区二区蜜桃| 婷婷四月 成人 狠狠干| 99色色| 性爱AV天堂| 人人播| 五月丁香怕啪啪| 狠狠操天天干| 亚洲精99| 无人区码一码二码三码医生系列| 成人婷婷五月天| 五月丁香日本一抹本| 九色91视频| 99re青青草| 丁香五月婷婷五月| 五月丁香黄色| 久久xx| 婷婷五月天免费小说| 九九色综合九九色| 久久婷婷丁香五月一二三| 超碰在线91| 亚洲爱爱无码婷婷色五月| 少妇搡BBBB搡BBB搡毛茸茸| 婷婷丁香五月激情图片| 久cao香蕉影院| 天天日夜夜帕| 婷婷六月综合| 婷婷欧美| 99色看| 五月激情久久| 99A级片| 色VA| 91婷婷视频| 五月婷婷av| 综合久久97| 免费无码毛片一区二区A片| 思思热再线视频| 人妻在线网站| 丁香五月在线| 色色色色色色97| 日韩视频女神99| 俺去也五月天| 久久99精品久| www.色综合.com| 狠狠狠婷婷五月综合| 婷婷五月激情基地| 婷婷色五月开心五月| 久久久思思热| 无毒黄色网址| 国产免费一区二区在线A片视频| 国内婷婷丁香社区在线播放| 国产黄色大片| 九九热视频这里只有精品| 色情五月天婷婷| 色噜噜狠狠色综合网| 丁香婷婷综合激情五月色| 五月丁花六月丁香综合| 六月丁香婷婷视频综合在线观看| 激情九月婷婷九月| 九九精品综合| 婷婷亚洲在线| 综合啪啪| 精品国产a| 五月天色色网站| 夜夜干夜夜操| 天天上天天爽| 六月丁香色色色| 亚洲午夜成人av电影网| 丁香九月婷婷综合| 婷婷亚洲色| 五月丁香色色综合| 天堂综合久| 1024操逼| 丁香五月成人网| 婷婷成人五月天| 深爱丁香激情| 五月婷婷在线丁香| 77777亚洲午夜久久| 免费视频WWW在线观看网站| 欧美激情综合色综合啪啪五月| 色婷婷欧美在线| 91avse| 爱狠射| 97caop| 99在线精品视频| 91久久九久久九久久九久久九久久| 伊人五月人妻精品| wWwCom夜操wwW| 99在线视频女女视频| 激情五月天天| 人妻久久久| 婷婷五月激情综合| 天天干天天干天天| 操日挥操日日| 亚洲综合视频一下| 五月激情婷婷图片基地| 97色婷婷五月天| 日韩在线一级| 人妻激情网| 人人操婷婷| 婷婷丁香五月综合网| 五月婷婷激情| 我爱大香蕉| 婷婷六月啪啪| 激情伊人五月天| 超碰成人在线观看| 亚洲无码成人| 久久久久久久久99精品| 亚洲综合五月天| 色欲一区二区三区精品A片| 99热精地址| 天天看夜夜看| 久色五月| 天天精品视频在线观看视频| 天天舔天天| ss99热| 婷婷开心综合人妻小说网址| 丁香婷停五月激情综合深爱| 激情综合激情五月| 久久99久久99精品免视看婷婷| 亚洲第一色色色色| 六月色色综合| 婷婷基地五月色| 丁香婷婷五月六月天| 丁香五月激情综合网激情五月| 亚洲婷婷月丁香五月| 婷婷五月天AV激情| 天天成人丁香美女AV| 五月天玖玖狠狠色色| 五月婷丁香亚洲| 五月婷婷色激情| 99热免费在线| 丁香六月激情四射| 五月婷婷黄色| 婷婷91| 人与禽A片啪啪| 伊人激情综合| www,超碰| 成人AV在线电影| 五月天婷婷一起草| 六月天六月婷| 在线观看中文字幕| 思思热久久艹| 9色在线| 天天日色情| 九九九午夜视频| 九九精品99| 高清激情av在线观看| 色丁香婷婷美女视频网站| 九九精品视频在线观看| 国产婷婷综合| 天天做天天爱天天爽| 成人做爰黄A片免费看直播室男男| 8050一级网| 天堂五月婷婷| 五月色婷婷亚洲 | 色色网站免费在线视频| 天天综合天天做天天综合| 欧美爆乳一区二区三区| 国产精品视频免费看| 日本三级日本三级99| 激情图片亚洲| 久久伦乱| 婷婷六月激情啪啪| 亚洲激情五月天| 99热精品在这里| 久久婷婷五月天大香蕉| 激情五月,激情综合网| 丁香五月婷婷无码AV| 色五狠狠| 一起草AV| 久久38视频| 激情五月深爱五月观看| 婷婷射婷婷舔| 99久在线精品99re8| 黄色AAAA韩国guochansanji| 91成人品| 激情五月少妇| 天天做天天爱天天高潮| www.九九婷婷| 色情·com| 99这里有精品| 国产精品第一国产精品| www.97碰碰com| 五月花婷婷最新| 久久9久| 在线播放 精品| 色丁香五月天射婷婷爱婷婷| 色综合激情| 99免费视频| 亚洲啪啪网| 婷婷丁香五月,狠狠综合| www.99视频| 五月天之色情综合网| 婷婷综合五月激情| 日本欧美在线| 婷婷五月a| 亚洲综合色丁香五月天| 99热伊人| 激情伊人网| 五月香六月婷| 五月丁香在线| 亚洲天堂99| 精品人妻一区| 日韩国产AV播放| 丁香五月婷婷偷拍| 婷婷五月丁香综合桃花色网| 清色五月天| 色色色色色色色色综合网| 色婷亚洲| 深爱五月网| 免费无码毛片一区二区A片| 亚洲激情在线| 综合网啪啪| 婷婷丁香综合在线| 狠狠狠狠操| 久久人妻熟女一区二区| sesesesezonghe| 大香蕉啪啪| 97色婷婷在线观看| 九九热精品视频| 超碰在线资源| 巴基斯坦粉嫩无码视频| 欧美三9久九观看| 欧美激情五月天在线观看| 亚洲色99| 成人网站在线观看视频| 国产成人在线精品| 99九九热视频| 国产精品色| 色综合偷拍| 天天插天天射| 99精品高潮| 九九无码| 五月丁香婷婷综合视频| 97碰碰视频| 五月丁香久久呀| www久久艹| 色欲五月婷婷| 超碰超碰在线| 91久久久久久| 精品久久人妻| 538在线| 少妇高潮A片无套内谢麻豆传| 丁香五月AV在线| 色色操| 6080av| 九九热这里只有精品9| 五月婷婷久| 婷婷色一二三区波多野结衣| 五月婷婷啪啪| 五月丁香激情四射| 国产成人+综合亚洲+天堂| 九九精品热| 爱射综合| 五月婷婷久久网| 九九中文色色| 我去色色网五雨天| 五月婷婷黄色| 91一起操| 人人舔天天| 丁香五月婷婷亚洲激情四射| 97精品自拍视频| 激情小说五月天| 无码AV免费精品一区二区三区| 亚洲精品性色| 成人人操| 日韩1区2区| 激情亚洲色图片丁香综合| wuyuedingxiang| 五月婷婷成人| 快乐婷婷五月天| 丁香婷婷成年| 大天天伊人| 日韩 欧美 国产 一区 二区| 日韩AV中文在线观看| 涩综合婷婷| 亚洲中文字幕网| 精品亚洲国产成AV人片传媒| 成人丁香婷婷| 久久久激情| 青青草青青草五月天| 欧美精品18| 亚洲婷婷丁香五月在线| 婷婷桃色网| 婷婷五月天激情网| 婷婷在线午夜| 色99自拍| 国产精品久久久爽爽爽麻豆色哟哟| 婷婷五月激情视频在线| 欧美情月伍月天| 在线色婷婷| 噜噜五月天综合| 99热日韩| 久久久久久久五月婷婷六月丁香综合,开心激情综合网 | www。88热在线视频免费观看| 五月色亭丁香| AV性爱网| 婷婷丁香小说| 五月人人丁香婷婷五月人人丁香| 99ri视频在线观看| 日韩一级片| 五月天久久综合婷婷| 婷婷丁香六月影视| 大香线蕉伊人| 色婷婷狠狠禁18久久| 久久人操| 婷婷色爱| 79亚洲精品少妇| 色情婷婷。| 天堂久久久久天堂网| 色日本五月天| 丁香五月天婷婷中文字幕| 提提热五月天婷婷| 色三级色三级| 97碰碰人人视频| 国产又爽又猛又粗的视频A片| 婷婷五月天综合久久| 五月综合六月婷婷| 老司机午夜福利视频金瓶梅| 六月婷欧美| 人妻免费网站| 五月丁香久久| 伊人激情| 天天日天天舔| 男人的天堂五月丁香| 成人欧美一区二区三区在线观看 | 亚洲婷婷免费| 丁香五月婷婷亚洲另类| 久久这里都是精品免费| 色蜜婷婷| 亚洲精品444久久久久久| 中文字幕日产A片在线看| 天天色综网| 欧美色久| 五月婷婷影院| 亚洲99精品欧美一区| 亚洲色欲AAAAAA| 五月丁色AV| 五月婷婷大香蕉| 美女网黄| 激情五月天啪啪| 人妻中文字幕精品| 伊综合蕉| 4399无码视频二区| 日韩黄在免| 婷婷成人基地| 精品一区二区三区免费毛片爱| 天天操天天曰| 五月丁香婷婷色| 丁香六月久久| 九九99九九99偷拍视频免费看| 丁香五月六月| 六月天婷婷| 狠狠穞A片一區二區三區| 天天草天天摸| 色综合激情| www.五月丁香| 久久久天天啊| 丁香六月激情综合| 激情第四色| 欧美日本黄色| 九月丁香婷婷综合| 久99视频| 婷婷五月天精品| 五月天国产| 亚洲1区| 性做久久久久久久免费看| 99这里只有精品| 成人午夜天| 色婷婷成人色网| 婷婷97C| 《久久综合九色综合97婷婷| 国内久久亭亭| 五月天丁香综合| 开心五月激情网| 另类色视频| 啄木鸟黑丝一区二区| 呦呦视频无码播放| 丁香激情五月少妇| 99综合网| 九九性视频| 99这里只有精品| 精品日本视频444| 丁香九月综合在线| 五月丁香婷婷色色色| 玖玖在线视频福利| 丁香八月综合激情| 久久久久人妻精选| 停婷丁五月在线| 丁香五月电影| 日日影院 | 丁香五月天亚洲综合| 美女黄频aⅴ视频| 亚洲激情校园| 婷婷五月色網站| 色婷婷免费视频| 婷婷色婷婷| 99久久偷拍视频| 伊人激情啪啪| 五月婷婷熟女| 久久久天天啊| 天天干,天天日| 91综合视频丁香| 婷婷欧美激情综合| 三区激情四射av| 天天精品视频免费观看| 大香蕉520| 大色鬼综合| 五月丁香婷草| 最新激情五月天| 婷婷综合在线| av中文在线| 五月婷婷精品| 色五月综合婷婷久久综合婷婷久久综合婷婷久久综合婷婷久久 | 狠狠婷婷爱| 舔色婷婷| 五月天激情小说| 色综合av超碰| 98毛片| 看片视频在线免费日产在线看| 五月婷婷六月色| 综合婷| www.夜夜夜| 99操无码视频观看| 亚洲深喉aV| 日韩在线9| 97韩国久久电影院| 99热91| 伊人热婷婷| 丁香五月六月婷婷自拍| 国产免费一区二区三区三州老师F1F1.CC | 久久婷婷网址| 天天综合亚洲综合网天天αⅴ| 激情五月天开心总和网| 91五月天| 国产精品日日躁夜夜躁| AAA亚洲AV| 婷婷综合五月天| 婷婷六月综合基地| 激情五月婷婷中文字幕| 日韩无码专区| www.久9| 先锋av性爱成人电影| 色色色色色综合| 成人在线高清| 热99精品视频| www.天天干| 日韩另类| WWW.17C亚洲精品| 91色五月在线观看| 色综合天天网| 婷婷六月丁| 激情丁香九九五月综合网| 人草人人| 激情婷婷丁香五月| 色VA| 亚洲人妻av| 人人综合久| 五月丁香六月婷婷欧美综合| 午夜不卡久久精品无码免费| 国产乱码久久| 成人片在线播放| 爆乳熟女一区二区三区爆乳| 日韩精品无码99| 天天躁日日躁狠狠躁日日躁2022年5月9日| 九九亚洲视频| 久久狼人天堂| 一起草无码| 欧美激情综合色综合啪啪五月| 97碰91| 五月婷婷自拍| 欧美天堂婷婷日韩| 日本久久99| 久久性爱视频| 91九色精品| 欧美狠狠色| 日韩色色一区| 五月天开心婷婷激情网站 | 99热国品免费| 五月婷婷,六月丁香| 黄色成人网站在线播放| 久久99热这里只频精品6学生| 丁香九月综合在线| 丁香五月天论坛| 中文成人在线| 激情丁香五月天| 影音先锋91资源站| 五月丁香色婷婷| 激情五月天色婷婷综合| 天天日天天草| 99色五月| 97干在线视频| 色频玖玖五月天| 国自产拍偷拍精品啪啪一区二区|