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
返回資訊列表
久久er99热精品一区二区 | 狠狠99| 人妻激情视频| 秋霞AV吧| 婷婷香蕉| 激情五月丁香六月综合AVXXXX| 狠狠操狠狠| 99热婷婷| 成人五月天丁香| 久久婷婷五月综合| 亚洲视频五区| 色激情五月天| 停停五月天激情网| 五月天色婷婷小说| 亭亭丁香久久五月| 精品乱码视频| 五月丁香激情四射| 老妇操B| 国产AV一区二区三区最新精品| 精品免费99| 草一草avb| 色色亚洲99com| www色色com| 99久久玖玖| 99re熱| 日韩AV免费| 丁香五月成人社区| 99re在线观看| 久9精品视频| 成人中文网| 日本成人噜噜噜| 天天日人人| 九热...av| 香蕉久久五月| 五月香蕉婷婷| 91se在线观看| 五月天久久91| 午夜理论片最新午夜理论剧 | 五月婷婷啪啪| 久久婷婷内射| 五月丁香六月婷婷啪啪| 婷婷色五月开心五月| 欧美日本韩国亚洲| 碰97 久| 久久香蕉网| av在线免费网站| 极品五月天| 好吊操这里只有精品| 伊人网啪啪| 97色五月天| 淫视馆AV在线| 亚洲小视频免费看| 高清激情av在线观看| 久久狠狠干| 免费看片在线观看| 久久99久久99精品免观看粉嫩| 国产女生爱爱AA| 香蕉久久国产AV一区二区| 99热这里只有精品3| 日本九九视频| 丁香五月成人网| 91久热| 日本综合色色| 亚洲亚洲人成综合网络| AV操一操| 美女网黄| 五月激情偷拍婷婷| 免费不卡狠操美女视频网 | 99碰网站| 六月婷婷狠狠色在线观看| 99热网站| 亚洲人人操BD| 五月丁香成年黄色| 九九狠狠干| 日韩在线观看亚洲| 丁香六月婷婷综合色| 99热九九这里只有精品| www.亭亭五月天| 久久五月天色| 六月婷婷中文字幕| 丁香五月激情五月色综合| 大香焦A∨| 亚洲欧美日韩另类| 欧美日韩一a.无| 夜夜躁狠狠| 五月婷婷六月丁香激情综合网| 婷婷五月激情基地| 九九综合| 任你躁XXXXX麻豆精品| 婷婷视频在线| 丁香婷婷性爱| 色在线视频网2025| 久久99网站| 人妻激情久久| 亚洲艹网| 五月天伊人| 九月丁香婷婷| 日韩精品一区二区亚洲AV观看| 九九久久99| 开心婷婷五月天电影院| 五月天社区婷婷丁香社区| 91要啪| 91操人| 91seAV| 色婷婷婷婷| 久久五月天黄色五月天色网址| 婷婷五月激情在线视频| 六月婷婷色综合| 99色在线观看视频者| 色色色色色五月| 99色激| av性爱在线| Av大香蕉| 天堂成人久久| 丁香五月天色婷婷| yw国产AV| 五月丁香六月婷婷免费| 色情婷婷| 97视频91| 黄网在线观看免费| 日逼影音先锋AV男人资源站| 99热网站在线观看| 婷婷狠狠干| 91九色PORNY中文啦| 色丁香久久| 婷婷丁香五月综合激情视频| 丁香六月婷婷缴情欧美| 婷婷五月天在线观看av| 五月丁香婷婷综合网| 97碰操| 99激情视频热| 激情九月婷婷| 精品色情一区二区三区四区| 综合激情视频| 久久综合激情| 丁香婷婷性爱| 久久婷婷激情| www.色五月| 丁香五月激情综合婷综| 热久精品| 久久九九@| 亚洲色综久久五月| 婷婷热色| 成人五月天视频| 久久综合九色综合97婷婷| 超碰日日操| 激情图片五月天| 亚洲狠狠丁香婷婷香蕉| 天天天天天久久久久久| 美女被肏网站在线看| 激情五月网站| 综合色七七| 第四色婷婷最爱| 天天做天天爽| 五月丁香六月婷婷亚洲激情综合| 六月丁花香啪啪激情欧美| 天天做天天爱天天日| 91精品久久久久久77777| 超碰人人操| 五月丁香六月婷婷国产视频| 99精品超在线播放| 99久久99久久综合| 五月激情偷拍婷婷| 色婷婷激情视频| 国产日日操夜夜操的肉棒视频| 国产精品久久久爽爽爽麻豆色哟哟| 色五月天.con| 琪琪色五月婷婷老师| 激情五月综合色婷婷| 99热这里只有精品9| 五月婷婷大香蕉| 五月婷婷AV| 免费国产VA国产免费| 色综合五月| 天天人人天天爽| 国产午夜精品一区二区三区四区| 新伍月婷婷| 9色小视频在线观看| 五月天婷婷人妻| 人妻中文av| 99热资源在线| 五月丁香五月激情综合色综合| 麻豆AV一区二区三区| 狠狠狠五月婷婷六月丁香| 九九婷婷五月天| 天天爽天天摸| 99小视频在线| 色综合久久88色综合天天| 久久久精品人妻| 亚洲综合在线播放| 蜜乳久AV| 97香蕉碰碰人妻国产欧美| 亚洲成人免费在线| 天天操天天国产三级片处女学生妹| AV性爱网| 丁香六月婷婷高清| 五月丁香婷草| 碰久久精品w| 久久婷婷人人| 99小视频网站| 丁香六月 婷婷六月| 综合久久狠狠| 国产成人+综合亚洲+天堂| 精品九九视频| 亚洲婷婷在线播放十月| 男人天堂 久久| 人人爱人人草| 天天色粽合合合合合合合| AV堂狠狠干| 欧美日韩成人综合9| 亚洲激情综| 涩涩涩婷婷| www,超碰| 黄色av高清| 婷婷色丁香五月| 亚洲色色色色| 丁香婷婷五月天色综合| 色婷婷中文在线| 久久色六月| 91黄址| 五月婷久久在线| 99色激| 九九久久高清| 9精品国产在热久久| 99操碰| 丁香六月婷婷综合缴| 亚洲第一色色色色| 香蕉婷婷色五月| 久久99久久久| 99热在线爱| 天久综合91综合首页| 亚洲精品亚洲人成人网| 9精品在线| 激情五月婷婷视频一区二区三区| 婷婷五月丁香伊人| 六月丁香婷婷五月| 丁香六月天之亚州热女| 六月丁香好婷婷| 99国产小视频2013| site:xiongshengzz.com| 成人资源在线| 97色啪| 丁香六月婷婷久久亚洲天堂| 色五月开心久久网| 综合99在线| 另类丁香五月天区图| 欧美性爱五月天| 亚洲啪视频| 五月婷婷六月情| 性日本精品| 丁香五月婷婷天| oumeisesewang| 九月婷婷综合| 天天色综合色色色色色。| 色综合丁香| 欧美 日韩 成人在线| 99久久.www| 绿色小导航AV| 日本综合久久| 人人舔人人色人人高潮| 欧美性生交XXXXX无码小说| 丁香激情网| 六月婷婷啪啪| 色婷网| 开心五月激情网| 丁香五月久久| 五月天婷婷综合色| 区啪精品| 五月天丁香网站| 亚洲综合1024| 成人五月天在线视频在线观看 | 久久只有18视频| 激情网婷婷婷| 色综合中文| 九九综合| 日韩成人精品中文字幕电影| 操婷婷基地| 99er热精品视频| 99re免费在线视频| 丁香六月色婷婷欧美| 激情播丁香| 色欲丁香久久| 91九色国产熟女| 六月丁香综合| 九九九激情综合| 婷色综合| 91久久久久久| 五月天社区狠狠| 四月婷婷丁香五月| 亚洲五月婷| 国产精产国品一二三在观看| 久99精品视频| 成人婷婷色五月天| 五月丁香啪啪网| 婷婷黄色| 嫩模草| 69色婷婷| SS丁香五月婷婷| 狠狠色综合网| 51精品国自产在线| 九九操操| 26UUU欧美| 婷婷六月色开| 欧洲区自拍| 色色婷婷丁香| 五月天亚洲综合网| 国产熟妇的荡欲午夜视频| 婷婷五月激情小说| www.av视频xx999.com| 26UUU精品一区二区c〇m| 综合色色婷婷| 九月丁香婷婷基地| 精品国产va久久久久| 99视频网| 精品少妇人妻AV无码专区偷人| 免费在线a| 久思思热视频在线观看| 这里只有精品免费视频| 福利视频在线播放| 午夜成人AV在线| 亚洲AAAA网| 色婷婷狠| 97碰碰视频| AA片在线观看视频在线播放| 97色色色色色色色| 婷婷的99视频网站| 亚洲AV免费国产电影| 婷婷五月天激情偷拍| 99综合| AAA级久久久精品| 精品婷婷| 91在线日| 丁香五月激情啪| 亚洲综合婷婷五月天| 超碰人人在线| 丁香五月网址| 欧美三级欧美一级| 五月婷婷六月丁香玖玖玫瑰91| 激情亚洲色图片丁香综合| 久久9精品| 五月激情久久| 五月婷婷丁香婷婷| 日韩精品无码AV| 六月色国内综合| 亚洲精品成人| 激情五月天激情网| 噜噜噜久久| 久综合九| 色综合区| 婷婷五月天色色| 色综合久久综合中文综合网| 精品99在线看| 97在线刺激| 91精品综合久久久久久五月天| 日操五月婷| 精品久热| oVV4WIB3vFi8D| 色色操| 婷婷五月大| 丁香花色色网| 激情网五夜婷婷| 午夜丁香婷婷| 精品一二三区视频立| 五月婷久久| 男人天堂99| 91超级碰在线视频| 久久66er久久| 亚洲愉拍99热成人精品| 久久久久人妻精选| 激情五月丁香色色去久久| 日日操日日爽| 综合色吧| 99这里只有精品|v| 26UUU欧美激情一区二区| 国产偷人爽久久久久久老妇APP| 亚洲激情高潮| 久久33视频| 六九色综合婷婷五月天| 丁香婷婷网| 久久九九综合| 999热成人在线综合网| 99精品久久久久久| 婷婷五月色激情欧美激情| 操逼巨乳91| 色欲天天综合| 色天天综合色| 91久久色| 开心激情站| 婷婷基地五月色| 中文字幕操比影片| 狠狠色噜噜狠狠狠狠综合| www久久艹| 91久久1118| 丁香婷婷人妻| 婷婷狠狠综合网入口| 欧美婷婷五月丁香| 婷婷丁香社区网| 强辱丰满人妻HD中文字幕| A网在线欧洲| 青青999| 久久婷婷综| 激情五月天啪啪视频| 日韩黄色影院| 色五月首页| 五月婷婷,六月激情| 熟妇天天综合| 亚洲免费婷婷| 五月婷婷五月丁香| 婷婷国产日本欧美| 五月丁香黄色| 99视频热99| 人人操91| 婷婷99狠狠躁| 国产丁香五月天婷婷| 色综合色婷色基地| 色综合久| 日本婷久久| 狠狠人妻久久久久久综合丁香| 成人免费网站免费看| www色婷婷| 五月天激情亚洲| 色就是色婷婷五月亚洲激情| 亚洲成人无码免费| 99国产精品久久久久久久久久久 | 99惹在线精品免费观看| 东京热免费视频网站| 激情久久久| 婷婷 伊人 久久| 678五月丁香亚洲综合| 婷婷 丁香 久久| 大伊香蕉精品视频在线| 26uuu国产| 2025天天日爽| 亚洲视频伍月婷婷| 九九热短视频在线观看| 夜夜操夜夜爽| 欧美日本VA| 五月丁香啪。| 亚洲婷婷综合视频| 人人摸人人干| 丁香五月亚洲综合丝袜| 超碰v| 欧美99| 婷婷久月| 九九综合| 91狠狠色丁香| 久久婷婷五月综合色丁香| SS丁香五月婷婷| 五月天婷婷色播综合在线| 九九热99视频在线| 啪啪夜久久| 另类亚洲电影| 九九九九九九九九九九九九九国产精品| 99精品在线| 日韩aaa| 婷婷永久在线| 国产激情AV| 日本久久性| 婷婷五月天狠狠色| 午夜爱爱网站| 天天肏在线观看| 五月婷婷六月天| 丁香五月婷婷日本| 婷婷六月综合基地| 日本婷久久| 99在线观看精品| 久艹大香蕉| 六月婷婷久久| 激情综合亚洲| 久久人妻精品| 丁香色婷婷色手机免费在线| 婷婷九月久久| www.色九月| 午夜日日| 日韩黄黄| 丁香五月第九色| 五月天婷婷网站| 五月婷婷中文网| 亚洲行行色色| 人人操av| 玖玖资源在线视频| 久久精品国产AV一区二区三区 | 色吧婷婷五月亚洲| 久久久免费图片视频| 色五月色情| 五月婷婷六月丁香首页| 五月丁香999| 色 免费网站视频| 丁香六月天AV| 丁香五月天天高清在线| 综合网啪| 国产一区二区三区影院| 色综合久久88色综合天天| 亚洲免费在线观看岛国| 丁香五月亚洲AV| 狠狠色丁婷婷日日,伊人激情综合网| 热久久66| 欧美日韩成人免费在线| 婷婷五月天伊人| 淫视馆av三区| 99热九九这里只有精品| 亚洲噜色| 日日夜夜婷婷| 人人操婷婷| 久久精品91视频| 欧美va亚洲va| 日本婷色| 八戒青柠影视剧在线观看| av首页在线| 粉嫩av懂色av蜜臀av熟妇| 中文久久久人妻| 婷婷色五月色| 久久婷色| 久久一品区| 久久精品国产色| 中文在线视频久1| 色9999日韩国产| 九九综合影音先锋| 人妻性爱av网站| 天天爽天天做| 天天做天天爽| 99欧州偷拍视频| 天天添天天摸天天天天做| 香蕉人在线香蕉人在线 | 色情成人五月天| 久久精品天| 九九爱这里只有精品| 天天爱天天做天天| 免费黄网不卡AV| 六月婷婷激情图片| 婷婷五月情| 天天色粽合合合合合合合| 免费AV在线网址| 2023天天日夜夜爽| 国产色色视频| 成人五月天丁香婷| 婷婷五月av| 538在线精品| 99久久久免费| 五月天成人在线播放| 天天揷综合网| 在线五月色播| 激情五月天色色网| 亚洲午夜av| 久久久久久久人妻| 婷婷五月另类网站| 五月精品免费XXX| 99这里有精品| 丁香六月色香蕉视频| 97干网站| 99碰网站| 色色色婷婷五月| 综合日本婷婷| 99精品小视频| 91人人妻人人操人人爽| 日韩综合大黄| 九九婷| 啄木鸟黑丝一区二区| 97色碰| 天天色丁香| 国产精品色色| 色欲久久久久久综合网综合网| 色五月婷婷丁香五月| 色婷婷伊人激情在线观看| 色婷婷丁香五月观看| 五月天成人综合| www.色99| 中文字幕 中文字幕明步| 99热在线精品播放| 久久九九网| 久久人人九九| 伊人五月天在线| 五月婷婷三级| 99成人| 激情五月第四色| 一级黄色影片| 六月丁香婷婷色69| 色婷婷久久7777| 高清无码视频网址| 久久总和99| 97啪啪| 久久综合婷婷| 一本道在线电影| 五月婷在线色视频| 色婷婷色综合| 国产三级片91| 丁香六月婷婷综合色| 丁香五月天啪啪| 亚洲激情电影五月天色婷婷丁香一起草| 亚洲视频一区| 日日日天天干| 五月婷婷色综图片| 99热久| 天天射夜夜骑| 极品色丁香| 夜夜干 夜夜操| 99综合婷婷五月| 狠狠插.com| 五月天亭亭俺也| 青青草原亚洲天堂| 欧美人与性动交CCOO| 天天热夜夜操| www.婷婷六月天| 91热爆在线| 五月丁香激情婷婷综合| 99热在线资源| 成人午夜天| 五月亭亭性| 人妻AV在线| 在线视频区| 9九色首页| 立川无码av| 91操在线| 精品人妻伦九区久久AAA片| 97丁香五月| 91碰碰碰| 成人片在线免费看| 激情小说五月天| 色婷婷色五月天| 色9999日韩国产| 99re欧美精品| 日韩999| 欧美va亚洲va在线播放| 色9999日韩国产| 67194线路二在线观看| 丁香婷婷五月色成人网站| 色综合五月婷婷狠狠干| 99久久久免费| 岛国午夜视频| 欧美大片免费观看| 丁香五月婷久久| 日日.c| 99爱免费在线观看| 综合视频久久| 五月色婷丁香| 婷婷最新地址| 色五月网址| 日韩在线观看亚洲| 香蕉AV777XXX色综合一区| 激情五月激情综合俺也去婷婷小说| 91久久九九| 被强行糟蹋的女人A片| 久久五月激情综合| 五月天播播| 亚洲精品五月| 夜夜www| 激情综合五月| 大香蕉伊人99| 亚洲综合另类| 激情婷婷五月少妇| 超级碰碰碰久久网站视频| 欧美 日韩 人妻 高清 中文| 婷婷丁香五月亚洲| 日本一级一片免费视频| 99热色精品| 婷婷五月美女直播| 天天干天天射综合网| 五月丁香婷婷无码A∨| 日韩综合久久| 97碰| 色色免费网站| 91美女被操| 欧美色色色色色色色色色色| 色色色色色五月| 久久一操| 任你搞在线观看视频| 91五月花丁香| 青青操avbb| 亚洲无码另类| 婷婷丁香色五月亚洲| 色婷婷成人网| 亚洲AV综合在线观看| aaa久久| www.五月婷婷.com| 色播婷婷大香蕉| 色久九| 99久视频| 五月天六月天| 色五月天视频| 国产五月天欧美色| 天天干电影| 免费看欧美成人A片无码| 精品久热69| 五月天成人综合| 91人人爽狠狠狠| av中文在线| 色噜噜狠狠色综无码久久合欧美| 丁香五月激情综合| 五月天开心色色网| 婷婷五月综合视频| 中文字幕色色| 亚洲人成色A777777在线观看| 91大屁股精品| 五月婷婷激情久久| 久久人妻熟女一区二区| 亚洲综合色激情色五月| 十区av| 国产成人网址| 激情五月婷婷综合网| 丁香五月,激情五月,深爱五月| 开心五月天激情网站| 色无码| 97人人草| 亚洲日韩久久婷婷伊人| 久久人操-久草婷婷-成人AV| 久草天堂| 久色国产| 日本99久久| 尤物一区二区| 久久九九中文字幕| 婷婷五月激情基地| 五月丁香色六月激情干大屄| 五月花激情| 欧美性久| 裸体做A爰片毛片A片免费| 综合在线观看99| 狠狠爱婷婷爱| Va另类视频| 秋霞AV淫| 久99婷婷色综合| 超碰在线国产9| 日操五月婷| 国产色网站| 欧美性生交A片免费看| 激情啪啪五月天| 婷婷五月天天天日日夜夜| 亚洲aV写真天天综合网久久 | 久久性爱视频| 999热视频精品99免费在线| 欧洲亚洲免费视频9| 丁香五月 六月婷婷首页| 九九热视频99| 中文字幕综合色| 成人va在线观看视频| 五月婷婷亚洲| 中文字幕 中文字幕明步| 伊人网啪啪| 婷婷四色成人综合色视| 26UUU欧美| 久热9热| 婷婷五月天激情综合婷婷五月天激情综合| 九九在线视频| 91聚色综合网| 六月婷婷视频| 五月丁香六月激情欧美综合| 大香AV| 五月婷婷手机在线| 99热超碰| 99在线精品观看99| 激情亭亭五月| 丁香六月成人网| 人人干AV| 蜜桃人妻无码AV天堂三区| 97视频.干com| 99热8| 久色大香蕉| 伊人丁香花综合影院| 久久五月天婷婷| 婷婷情色五月天| 99精品综合| 精品操逼一区二区| 久久久久人妻精选| 91色性感五月婷婷丁香| 五月色丁香婷婷中文字幕| 色色综合网站| 亚洲中文丁香| 99日韩| 黄色大片又大粗又爽| 久久久91| 亚洲综合婷婷五月| 另类A片| 九热免费视频| 九月丁香婷婷综合| 色婷婷免费视频| 97色啪| 99热天堂| 久久五月天色婷婷| 97人人搞| 大香网伊人久久综合| 激情五月综合网最新| 91丨九色丨熟女|新版| 五月天丁香久久| 五月天色色婷婷| 大香蕉五月婷婷| 久9久9久9久9久9久9| 超碰色综合| 五月色网| 五月天激情小说婷婷| 99性视频| 久久 这里只有精品1| 教师性爱毛片| 五月天婷婷激情在线色图| 色爱综合五月| 激情婷婷五月| 99re熱| 搡BBBB搡BBB搡18| 色综合日日| 99久久色| 日日噜狠狠| 狠狠看狠狠| 欧美性生交xXxX久久久| 婷婷五月深深爱| 2013AV天堂| 中文字幕婷婷| 婷婷在线五月天观看| 日韩综合成人| 久久九九色| 婷婷精品在线| 成人无码髙潮喷水A片| 亚洲va在线| 99热天堂| 思思热在线| 亚洲亚洲永久无码777777| 97极品在线| 思思热在线观看| 色婷视频| 国产67194| 日韩国产在线精品| 久久综合五月天| 天天综合情| 色综色网| 色欲五月婷婷| 四虎婷婷五月天| 综合久久伊人| 伊人婷婷五月天| 五月色天五月色| 偷拍91九色| 超碰免费在线| 亚洲无码99| 99r久久这里只有精品| 久久日本wwww色| 91五月天| 午夜五月天| 成人五月天综合网| 婷婷激情综合色五月久久91| 99在线精品视频在线观看| www.26uuu.com亚洲电影| 性爱网五月天| 婷婷综合久久综合| www.婷婷五月| 开心网五月色婷婷| 综合网激情五月天| 日良久久| 婷婷五月综合免费在线| 色五月激情网| 99无码| 99.色| 五月婷婷在线短视频| 丁香九色不卡aaa| 任你艹| 久久精品4| 激情深爱五月| 色九月激情综合网| 99re热视频这里只有综合亚洲| 热久91| 国产毛片精品一区二区色欲黄A片| 激情五月婷黄版| 一本综合丁香日日狠狠色| 人人草公开操| 9999三级片| 青青草网武则天| 韩国中文字幕91| 天天色播| 婷婷激情五月综合| 五月天婷婷AV| 九九热99热| 婷婷丁香亚洲五月天| 天天爽成人综合网站| 97色色婷婷五月天| 久草丁香婷婷五月天婷| 久热re视频在线观看网站| 五月婷婷六月激情| 丁香五月五月婷婷| 噜噜噜狠狠色综| 五月婷婷激情五月| 久久精品只有这| 亚洲精色| 婷婷丁香五月天中文字幕| 狠狠色狠狠鲁| 色婷婷在线视频久| 操操操av| 全网最新网黄大秀直播高清,主播国产录屏在线 | 久久ab| 婷婷色色欧美| 五月激情五月婷婷五月天在线| 五月婷婷香蕉| 婷婷五月丁香基| 亚色网站小视频| 激情五月图| 天天日夜夜高潮| 久婷婷五月激情| 激情综合4月| 中海油常州环保涂料有限公司| 五月停亭六月,六月停亭的英语 | 亚洲精品**不卡在线播he| 91嫩草国产线观看亚洲一区二区| 欧美三级巜人妻互换| 99精品成人无码A片观看金桔| www.久久99| 专区无日本视频高清8| www.狠狠| 9色91视频| 五月婷久久久久综合| 91热久88| 操婷婷基地| 婷婷趴趴| 日本久久网| 五月天亚洲最大成人| 在线色五月婷婷| 99∨VTV| 九九热精品| 天天久综合网永久入口18| 九色视频九色九色91jiuseshipin| 久久婷婷五月综合色区| 99久久終合| www.婷婷.com| 99在线精品视频观看免费下载| WWW丁香五月| 天天摸日日舔狠狠添婷婷婷| 久久婷婷激情视频| 大香蕉久热| 337p大胆噜噜噜噜噜91Av| 国产精品久久久爽爽爽麻豆色哟哟| 国产高清av黄色看片| 五月丁香天堂| 91九色在线| 青青草蜜臀| 色五月婷婷九月| 久久伊人大香蕉| 99精品视频在线观看| 97成人在线视频| 超碰在线国产9| 热热久久精品视频| 六月婷婷久久| 婷婷婷婷色| 丁香五月之久操视频| 91人碰| caopeng超碰| 亚洲精色| 五月丁香啪啪啪| 激情五月婷婷综合网| 97日在线视频| 亚洲激情电影五月天色婷婷丁香一起草| 欧美S码亚洲码精品M码| 99热这里只有在线| 婷婷激情丁香五月婷婷激情丁香五月婷婷| 久草五月| 淫荡综合网| 国产97色在线 | 日韩| 激情五月天婷婷| 久久99草五月婷婷| 日本三级大片| 五月花综合视频| 亚洲精品午夜国产va久久成人| 欧美久久一级内射wwwwww.| 亚洲午夜一区二区| 丁香婷婷射| 日韩精品一区二区亚洲AV观看| 超碰免费人人| 中文AV在线观看| 狠狠狠激情网| 国产精品电影| 久久99免费视频| 这里只有精品热| 天天干天天爽| 五月丁香六月激情网站| 亚洲天堂久久| 99亚洲精品视频| 开心五月色婷婷综合开心网| 色婷婷69| 五月天网站亭亭| 亚洲精品久久久久AV无码| 久久9精品视频| 深爱五月网| 国产欧美性成人精品午夜| 五月婷婷av| 婷婷九月丁香| 99久久97| 五月丁香六月婷婷不卡免费无码 | 欧美五月停| 美女天天艹人人爽| 色婷婷69| 亚洲视频1区| 日夜夜天天| 丁香六月婷婷综合| 综合激情婷婷| 婷婷丁香花五月天| 黄色五月婷| 97婷婷五月天| 国产av一区二区三区| 伊人五月天日日夜夜久久久天天| 久久与婷婷| 久草九九| 超碰久热| 婷婷五月色情天| 91碰超| 免费看片操逼| 色播激情五月天| 丁香五月熟女| 婷婷六月五月天综合| 大香蕉在九| 五月天婷婷影院影院| 777影视理论片大全在线观看| 久热这里只有精品6官网亚洲| 欧美97色| 亚洲成人免费电影| 四色永久成人网站| 大香蕉综合| 99视频精品| www久| 99久久6| 婷婷 久综合| 色情五月婷婷| 五月丁香 久久久| 国产成人精品一区二三区熟女在线| 激情五月综合视频| 激情综合五月| 亚洲 在线 性爱| 男人先锋久久| 这里只有精品网站| 色色色色色色五月婷婷| 天天草天天爽| 欧美人久久| 丁香九月激情| 五月天色播网| 日本黄色一级| 五月伊人婷婷| 超碰97免费在线| 亚洲美女高潮久久久久久69| 激情婷婷五月天| 图片区 小说区 区 亚洲五月 | 丁香五月伊人| 激情深爱五月天| 激情久久久久久| 亚洲成人综合在线| 狠狠操在线视频| 狠狠色噜噜狠狠亚洲A∨| 97超碰在线免费观看| 91九色精品熟女内射| JAPANRCEP老熟妇乱子伦视频| 五月天成人伊人| 精品九九久久| AV在线免费播放| 婷婷五月黄色激情在线| 狠狠爱青青草| 天天日天天干天天操| 九久9精品| 99热热热99精品婷婷| 思思re99视频在线观看| 91成人看片| 六月婷婷色综合| 亚洲精色| 99re热在线视频| 欧美丰满熟妇BBB久久久| 亚洲精品激情| 五月婷婷狠狠干| 青柠影视免费高清电视剧| 日韩五月丁香| 99国产小视频2013| 91啦丨九色丨刺激中文| 丁香六月婷婷开心| 九热视频这里只有精品| 色五月婷婷自拍| 丁香五月婷婷色| 天天爽,夜夜爽| 五月天激情播播网| 99在线一区| www.超碰在线| 国产精品久久久海的味道| 成人va在线观看视频| 精品国产a| 丁香五月偷拍| 色色性爱视频| 色婷婷在线视频久| 91久久综合亚洲噜噜成人在线| 精品色色| 午夜丁香综合婷婷| 久久99热 这里有精品| 婷婷丁香五月天影院| 超碰在线caop| 五月婷丁香| 天天操人人干| oVV4WIB3vFi8D| 色欲色天天香综合| Caoub青青超碰| 天天爽天天| 黄色三级日本| 久久免费婷婷视频| 爱爱色五月天| 久久五月激情| 人人操人| 无码激情AAAAA片-区区| 色婷婷狠狠爱| 激情五月综合| 狠狠干 狠狠操| 五月综合激情久久| 99热在线精品播放| 亚州第一黄网| 成人精品视频99在线观看免费| 99热大香蕉| 亚洲视色| 亚洲狠狠狠| 五月天天天开心激情网| 九九RE视频在线精品| 九热视频精品| 97超碰99热99| 丁香五月激情久久麻豆| 操碰91| 欧美人妻一区二区| 久操福利| 激情五月天婷婷| 这里有精品2| 激情宗合网激情五月天| 狠狠五月天婷婷| 成人五月天综合网| 日本91在线| 五月天婷婷綜合院| 看全色黄大色大片| 亚洲四色五月| 欧美日韩精品一区二区三区钱| 丁香婷婷狠狠97| 人人操av| 成人av免费观看| 久久九九色| 综合色色色| 丁香六月啪啪| 亚洲操人| 开心五月网 | 久久婷出差欧美色两性综合网| 99久热这里只有精品视频删减版| 成人网址在线观看| 国产一级片| 婷婷五月天堂网| 思思热闹这里只有精品| 亚洲国产色婷婷| 日日操夜夜操狠狠操| 99热国产这里只有| 综合狠狠干| 婷婷五月丁香伊人网| 五月天欧美激情| 天天综合天综合| 99久在线精品99re8| 激情网婷婷五月天| 操逼视频一区| 色播五月丁香| 99精彩视频| 久久AV无码精品人妻系列试探| 黄色片久久| 色婷婷av综合网| 欧美日韩五月婷婷| 欧美色色色色色色色色色色| 久久视频婷婷视频| 久色视频在线| 国产精品色色色色| 99在线精品免费视频| 99热精品在线| 丁香六月激情综合| 国产精品美女久久久久AV超清| 亚洲国产精品二二三三区 | 激情婷婷久久| 色亚洲无码| 五月丁香综合啪啪対白| 色婷婷社区| 五月婷婷与六月丁香图片激情| 亚洲激情五月天| 激情AV网| 碰碰碰91| AV激情五月| 亭亭五月激情亚洲在线| 色婷婷激情| 人妻久久久久久| 日本三级99人妇网站| 人妻激情视频| 五月天色婷伊人| 97色色在线视频| 大香蕉综合| 97亚洲视频在线| 色九月国产| 婷婷五月天伊人在线| 五月天基地| 中文字幕综合网| 人妻丰满精品一区二区A片| 久久丁香九| 激情五月天婷婷免费观看| 99热这里只有精品官网| 丁香五月婷婷亚洲综合精品| av亚洲国产小电影| 第五婷婷伊人丁香| 91狼友视频网页更新| www.国产色| 青青久久五月| 玖玖爱伊人| 色操b| 亚洲色综合| 婷婷色色色| 97色色色| 人妻22p| 98热精品| 婷婷成人在线| 综合99久久天天综合| 亚洲视频在线观看| 狠狠色五月| 久久成人天| 五月丁香亚洲综合| 99天堂网最新| 五月激情综合婷婷| 久操福利| 精品婷婷丁香五| 26uuu.| 五月婷婷色综图片| 婷婷五月丁香国产| 夜夜涩涩涩| 亚洲综合在线播放| 九色激情| 婷婷五月天,影院| 99ri国产| 久久码久久无清| 五月婷婷影视| 能看的av| 婷婷五月天奸女| 五月婷婷真爱激情网| 国产精产国品一二三在观看| AAA久久| 91无码高清| 伊人大香久久| 1995年关宝慧版蜘蛛女| 另类小说色婷婷| 9色在线视频| 天天影院色| 婷婷五月综合色小姐小说| 五月婷免费视频久久久| 九九热最新地址| 超碰99久久| 天天人人人人人人人人人人人| 665566 无码| 婷婷五月丁香激情色情| 免费视频无码| 97色碰| 狠狠爱综合| 丁香五月影视| 欧美啪啪9| 嫩草国产| 人妻精品一区二区三区| 九九色婷婷Av| 色婷婷在线视频综合| 国产99久久久国产精品免费看| 国产精品久久99| 久久99网| 丁香五月影院| 五月婷婷天| 综合激情五月天| 国产成人网| www.婷婷| 丁香色婷婷| 激情婷婷五月天| 五月亭亭直播| 五月婷婷在线短视频| 99视频| 影音先锋xfplay资源男人网| 丁香五月激情五月| VA婷婷| 97色婷婷| a v色婷婷| 香蕉婷婷五月| 五月成人综合| 久久精品五月|