免费国产精品自在自线-91精品国产色综合久久久浪潮-99热久久免费频精品-国产精品国模在线观看-久久亚洲国产精品成人?V秋霞-久久国产一级A片免费播放-亚洲国产欧洲综合97久久-久久国产白嫩美女呻吟高潮

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
返回資訊列表
天天爽天天日人人爱| 五月丁香成人网| 九一娱乐在线观看视频| www.狠狠| 夜夜夜夜夜骑撸| 久久久这里都是精品| 69热91天堂| 26uuu欧美| 99热这只有| 丁香五月婷婷色偷偷| 色婷婷电影网| av在线激情| 六月婷婷七月丁香| 热的国产99热| 成人版视频在线观看| 婷婷不干网| 色五月婷婷网| 吉澤明步Av一區二區| 99这里是99在线视频| AV在线不卡网站| 九九色热| 欧美这里只有精品| 狠狠综合网| 99在线国| 秋霞电影理论| 婷婷AV丁香| 99ri在线播放| 91丨九色丨熟女|老版| 国产成人精品一区二三区熟女在线| 橾逼网| 色婷丁香五月| 丁香五月六月久久综合| 性爱动图国产麻豆一区二区三区| 99黄色在线视频精品熟女| 99丁香五月| 婷婷五月天AV| 无码人妻电影| 大香蕉综合| 中文在线视频久1| 五月丁香花伦理电影| 欧美内射AA| 色婷婷精品| 97久久超碰| 99视频在线观看网址| 婷婷99综合| 激情丁香五月婷婷| 日本人妻伦在线中文字幕| 久久久精品色| 一区二区三区视频| 婷婷五月天综合网| 欧美性生交XXXXX无码小说| 青青草原亚洲天堂| 婷婷啪啪| 五月天激情小说| 成人在线网址| 激情深爱五月天| 99在线播放视频| 亚洲九九视频| 激情综合色婷婷啪啪六月天| 成人一级片| 免费观看的婷婷五月视频在线| 夜夜做夜夜愛| 免费在线观看欧美激情xx小视频| 色五月婷婷五月天| 精品久久99| 91凹凸在线| 六月激情婷婷| 欧美久久婷婷| 色色99| 99视频在线| 婷婷另类小说| 婷婷五月天综合网| 九九色热| 五月激香蕉网| 五月婷婷色啪| 天天色月| 伊人热在线大香蕉| 91久久久久| 婷婷五月性感| 在线你懂的亚洲欧| 久热2025无码| 婷婷五月天激情诱惑| 人人爱人人摸人人澡| 日韩色色视频www| 就爱射中文字幕资源网| 五月激情在线| 久久久天堂国产精品女人| 另类少妇人与禽zOZZ0性伦| 五月婷婷狠狠干| 欧美久热| 91碰免费视频| 国産精品| 九九热手机在线视频| 婷婷五月天熟妇| 天天操天天爱天天玩| 99热这里只有精品18| 热久精品| 日日日日日| 日韩丁香涩| 99久久婷婷五月| AV在线免费观看不卡| www.九九婷婷| 五月婷丁香花| 天天插天天插天天插天天插| 婷婷另类小说| 亚州第一A片| 精品久久久999| 婷婷五月激情四月综合| 天天天久久人人人合| 一本色道久久综合狠狠躁小说| 91爱操| 免费黄色片子| 国产精品汇聚精彩第二页 - 高清完整版在线 - 青蛙AV | 五月激情站| 另类视频在线| 996热re视频在线观看视频| 激情宗合 激情宗合| 五月丁香综合激情网| 精a品a视a频| 天天色综合网吨吧| www.久久| 8区视频在线| 青青草六月丁香| 91se在线观看| 日本成人内射| 成人婷婷五月天| www天天色天天射| 五月草视频| www.99热这里只有精品| 久久色9| 草操AV在线| 丰满熟女人妻一区二区三| 91碰超| 精品少妇人妻AV无码专区偷人| 人人操人人爰人人一天天碰夜夜拍夜夜爽-中国A级毛片天天看天天谢… | 色五月AV| 婷婷五月在线影院| caobi四区| 99九九在线视频| 免费无码毛片一区二区A片 | 99综合| 香蕉五月婷婷| 五月亭亭欧美女人| 99热在线观看这里只有精品| 玖玖色综合| 国产操肏网站| 日韩视频99| 人妻少妇色综合| 久久久99日本大片| 五月天激情无码| 成人做爰高潮A片免费视频| 99久久精彩视频| 丁香五月婷婷动漫视频| 91人妻PORNY九色大屁股| 综合爱久久| 狠狠狠人妻| 超碰免费人人| 九九色之九九色88| 丁香九月综合激情| 殴美激情综合网| 99国产视频网| 色九月综合网| 天天操天天操天天操天天操天天操| 麻豆WWWCOM内射软件| 色婷婷五月综合在线| 天天干、天天日日| 久久久91精品| 丁香六月婷婷姐网| 婷婷伊人綜合中文| 99热6这里只有精品| 免费超碰在线观看| 天天做 天天爱| 亚洲宗合激情| 色婷婷五月天小说| 五月婷婷9| 色欲资源网| 亚洲熟妇AV乱码在线观看| 六月丁香婷婷五月天| 久99视频在线观看| 色爱综合网| 99在线热视频| 久色网址| 日日爽日日| 99九九玖玖| 99啪啪网| 一起草av| 国产毛片欧美毛片久久久 | 欧美性爱中文字幕| www999日韩精品| 熟妇高潮一区av| 丁香婷停五月激情综合深爱| 久久丁香综合精品综合| 丁香五月天AV| 超碰人人射| 亚洲高清在线| 丁香五月六月婷婷自拍| 99精品手机在线视频| 五月婷婷综合潮喷| av激情在线| 婷婷丁香六月| 九九成人高清视频| a免费在线| 韩国天天婷婷| 操B五月天| 五月天桃色深爱网| 六月婷婷私欲| 国产肏屄大片| 大香蕉综合在线| 色色婷婷五月天| 天天日天天插| 丁香六月婷婷综合在线| 亚洲成人AV在线播放| 欧美精品999| 91久久综合亚洲噜噜成人在线 | 99操| 丁香伊人综合| 99热97美女| 五月综合视频| 91成人看片| 色欲色香综合网| 免费99情趣网视频| 9视频1在线| 99热99在线| 成人精品一区二区三区四区五区 | 思思热性操| 人人操超碰| 欧美 日韩 成人在线| 熟女婷婷网站一婷婷五月一丁香婷婷一婷婷激情网| 五月天sesese| 91偷拍视频| 这里只有精品视频国产| 2015WWW永久免费观看播放| 久久激情视频| 色视频五月天| 色五月丁香五月五月婷婷| 丁香婷婷五月份| 色噜噜狠狠色综无码久久合欧美| 婷婷丁香一月| 亚洲第一黄网| 欧美超碰亚洲| 中国女人做爰A片| 久久九九热视频| 五月天丁香欧美激情| 色墦五月丁香| 丁香五月天中文字幕| 中美日韩成人在线| 99久久新视频| 无码一区二区三区四区五区91c| 天天操天天曰| 亚洲永久免费| 午夜九九九九九九九九九九九九九| 婷婷丁香五月激情中文字幕版| 成人Av在线大片| 婷婷五月天综合亚洲| 五月婷婷色色| 丁香五月婷婷啪啪啪| 激情五月四色| 五月天激情婷婷小说| www.激情.com.| 色色色区| 国产肏屄大片| av无码电影| 琪琪狠狠干| 精品久热| 色99在线| 中字幕视频在线永久在线观看免费| www..999热久| 99热最新精品| 丁香五月首页| 97精品综合久久| 99re这里只有| 天天做天天爱天天玩| 激情五月天婷婷视频| 精品一二三区视频立| 一区二区乱码视频| 久久五月天视频| 一区二区三区四区牛| 玖玖色综合色| 久久丁香网| 高清资源站日A美A欧亚…| 夜夜撸日日操| 五月天偷拍| 天天干天天做| 国产精产国品一二三在观看| 中文字幕乱码亚洲精品一区| 成人中文网| 婷婷五月成人| 亚洲视频在线网站| 五月丁香激情综合网官网| 99热在线观看| 琪琪色网址| 日韩一级淫乱片一区二区三区| 九九丁香社区欧美激情| 超碰无码老师| 丁香玖玖| 99操碰| 九九操操| 5月婷婷6月丁香aV| 中文网av| 十一月婷婷激情四射| 色欲一二三| www.激情五月| 婷婷伊人五月天| 九九这里有精品| 九月婷婷| 久热精品9999| 五月天天堂久久| 婷婷五月天堂| 六月丁香激情最新更新| 中文字幕乱轮| 啊V视频在线观看| 五月婷婷激情综合| 我淫我色婷婷五月天激情四射| 日韩啪啪视品| 97色天堂| 五月丁香六月激情综合啪啪| 手机免费福利视频| 久热 91| 五月天伊人| 五月丁香婷婷钟和色图| 久草狼人| 色五月丁香激情视频| 五月婷婷丁香av| 天天日天天干天天天| 九九色色| 少妇高潮呻吟A片免费看软件| 久cao香蕉影院| 九月婷婷综合网| 另类在线| 五月丁香婷婷激情视频| 五月色综合| 免费无码毛片一区二区A片| 万月丁香狠狠爱| 亚洲视频无| 激情AV| 婷婷激情综合网| 韩国天天婷婷| 五月婷婷六月丁香| 日韩无码性爱| 五月丁香六月婷婷免费视频| 色99色| 99网| 99热这里都是精品| 99热这里只有精品最新地址获取| 九九AV| 久久久婷婷五月天| 99操碰| 久久久久人妻中文| 日韩无码成人电影| 97人人爱人人操| 欧美婷婷五月激情| 99热都是精品| 97碰操| 色五月天天在线观看资源站| 日本婷婷五月天| 丁香五月婷婷五月| 操久久网| 日本久久人| 爱99干99| 99热99ai| 日本啪啪网| 色婷婷成人色网| 国产成人AV在线| 99视频网| 久久久国产精品黄毛片| 天天天天天天天干| 五月婷婷99热| 日韩精品电影| 丁香婷婷中文字幕| 夜夜嗨一区二区三区直播内容 | 五月婷婷综合色啪首页| 九九色综合九九色| 欧美日本黄色| 婷婷激情六月| 色婷婷小视频| 欧美成人网婷婷综合在线| 99久在线精品| 色九月婷婷丁香| 99热只有这里才是精品| 天天做天天爱天天爽| 日本99视频精品免费播放| 五月天停停基地| 九九伊人网| 久久婷.com| 亚洲色网址| 超极99精品| 色七色九九| 五月天婷婷在线AN| 日本色色图| 五月激情小说| 五月婷久久久| 五月丁香在线| 久久天堂| 91色噜噜狠狠狠狠色综合| 中文成人在线| 激情五月丁香亭亭 | 成人丁香五月天| 啪啪操超碰| 99操逼| av婷婷六月丁香社区在线观看| 久久综合热17c| 久久婷婷视频| 26UUU| 思思热视频| 69精品人人人人| 碰碰91| 五月色婷婷中文字幕| 91热网址| 色色色欧美| 成人短视频在线| 久久伦乱| 综合婷婷| 99色色网站| 9久精品| 天堂婷婷五月在线| 人妻丰满精品一区二区A片| 立川无码av| 超碰免费在线| www国产亚洲色婷婷com| 色色色色色日韩午夜激情 | 日本www五月婷婷| 99热| 2025天天操| 操碰99在线视频观看| 开心激情播播五月天| 激情丁香五月| 超碰人人干| 丁香六月啪啪| 色视频色综合91| 婷婷丁香五月天亚洲| 2050人人操免费工开爱| 色婷婷久久综合中文久久一本| 精品99在线观看| 99激情网| 天天在线久久综合 | 色色综合网络| 99精品在线观看视频| 婷婷激情社区| 婷婷六月网| 亚洲六月色| 天天操夜夜爽歪歪| 色色色色色色色色五月先| 狠狠草在线观看| 侠女刀之记忆电影在线看免费| 9热网站| 亚洲精品激情| 九九99在线免费在线观看视频| 天天日夜夜| 婷婷五月天熟妇| 亚洲成片在线观看| 91久操| 五月激情婷婷女| 色婷婷国产精品综合在线观看| 天天爽人人综合免费7799| 狠狠色婷婷7| 校园春色亚洲色| 天天日天天色| 天天综合.com| 97色操| 开心五月婷婷激情| 五月天久久91| 五月天婷婷在线观看精品男人| 午夜激情四射影院| 26uuu最新地址| 亚洲99手机免费看视频 | 色色欧美色色色| 最新va在线播放| WWW色综合| 日韩精品VIP| 欧美色图天堂网| 天天夜天天色天天| 二色av| 婷婷五月激情基地| 久久视频这里有精品99| 99免费视频网| 九九热这里都是精品6| 性色综合网| 色情五月综合婷婷| 成人在线综合| 天天舔日日肏夜夜爽| 玖玖色综合网| 日韩美女在线视频19| 色五月大香蕉| 婷婷五月天黄色| 九九机热| 婷婷丁香成人在线视频| 亚洲av免费在线| 九月婷婷人人操人人舔人人爱| 91狠狠色丁香婷婷综合久久精品| 婷婷狠狠干| 激情婷婷丁香色五月综合| 五月丁香啪综合| 97午夜一区二区| 99精品网| 99A级片| 99爱无码| 亚州日本欧州韩美高青高潮一| 丁香六月色婷婷| 婷婷综合干| 成熟妇人A片免费看网站| 欧美日综合| 六月婷婷开心| www.五月天社区| 丁香成人综合| 精品九九在线观看| 丁香六月婷月91婷月| 狠狠爱婷婷丁香| 久久您您综合网| 伊人99热| 久久九九99| 五月丁香| av大香蕉| 日本99视频| 狠狠色97| 中文AV在线播放| 婷婷五月天伊人| 激情婷婷五月天日本系列 | 午夜少妇在线观看视频| 啊v视频在线观看| 超碰成人在线观看| 人人澡玖玖一| 91操片| 99婷婷国产最新视频| 天天做天天摸| 丁香五月激情啪啪| 九九99精品视频在线观看| 丁香色情五月综合网站| 天天肏天天爽夜夜爽| 色欲香综合网| 久久婷婷五月丁香| www.夜夜.com| 天天综合在线网| 亚洲欧美国产高清vA在线播放| 久久五月婷天天干| 激情婷婷五月天日本系列| 天天天添天天操| 玖玖精品视频99| 色婷五月丁香久亚洲| 激情婷婷亚洲五月| 亚洲狠狠操| 中文国产五月天| 天天五月情| 五月天天天色| 成人丁香色| 综合色99| 天天做天天爽| 超碰在线免费观看日韩| 97超喷视频在线观看| 91 久热| 牛牛色av| 丁香婷婷六月天| 7777激情基地| 思思热99er在线视频| 开心婷婷五月天电影院| 99热色在线精品| 夜夜躁爽日| 日本五月天网站| 五月婷婷99热| 丁香成人五月天| 久色精品| 丁香五月激情月| 亚洲、欧美、国产另类笫二区| 色综合色| 欧美Va在线| 五月天婷婷影院影院观看| 欧美成人精品A片免费一区99| 国产成人av在线播放| 天天综合精品| 色婷婷激情视频| 色欲影香| www.精品99| 永久AⅤ1| 婷婷久久五月| 激情四射亚洲| 99噜噜| 情婷婷五月天在线| 婷婷五月情| 99色亚洲| 激情婷婷在线| 婷婷五月综合激情| 色婷五月天综合网| 天天综合在线网| 日韩AV免费电影在线播放| 久久日九九| 丁香无月在线观看| 婷婷五月情天| 日本丁香五月| 综合网色综合| 五月婷婷丁香五月亚洲色| 五月丁香六月情| 丁香五月欧美| 色色五月天com| 狠狠操之狠狠操| 99热精品在线免费观看| 9久久精品| 欧美婷婷丁香五月| 丁香伊人综合| 亚洲成人免费在线| 99ri视频在线观看| 99高级会所久久| 性色天| 久久人妻熟女一区二区| 97色97干| 男女啪啪做爰高潮无遮挡| 亚洲成人另类| 99爱免费视频| 欧洲第一无人区观看| 成人网站av免费网站推荐| 人人人人人人人人人草| 色五月综合| 色五月激情综合网站| 国产99美少妇| 日韩色五月| 日韩精品呦呦va| 五月天婷综合网站| 久久色区| 久99久99精品免| 亚洲永久四色| 国产亚洲精品久久久久苍井松 | 性爱电影科技贸易有限公司| 激情视频网址| 九九九九大香蕉| 五月色俺婷婷| 成人精品视频99在线观看免费| 色情久久久| 婷婷色五月色| 伊人激情综合| 5月丁香六月情| 综合色图区| 日本操碰碰| 五月婷婷六月丁香综合| 丁香五月之久操视频| 丁香六月 婷婷六月| 久热中文字幕| 另类在线观看视频| 五月天婷久精视频| 激情五月婷婷色色| 丁香婷婷中文字幕| 五月美女婷婷风骚| 26UUU亚洲欧美| 激情五月天小说网| WWW.天天日| 中文字幕在线免费观看视频| 天堂色婷婷| 免费看成人747474九号视频在线观看| 超碰丁香五月| 高清无码视频网址| 97香蕉人人在线观看| 色婷婷久久综合丁香五月| 性做爰1一7伦| 五月色婷婷综合丁香精品无遮挡| 内射爽无广熟女亚洲| 久久婷婷成人视频| 国产毛片精品一区二区色欲黄A片| 精品久久99| 久久久97| 亚洲最大在线| 色玖玖| 婷婷成人视频| 欧美99热| 丁香五月激情图片婷婷| 99爱无码| 玖玖婷婷视频| 香蕉国产2013| 99婷婷五月天| 日日影院 | 激情亚洲色图片丁香综合| 97在线观视频免费观看 | www.色色五月天.com| 婷婷丁香花五月天| 超碰在线99| 开心婷婷五月| 中文网av| 小色小蛇伊人婷婷色香五月| www.99在线| 激情五月深爱五月| 99久久精品免费精品国产_国产精品久久久久久_国产在线|日韩_久久国产精品电影 | 色久免费| 日韩 mm 不卡| 婷婷五月天综合网| 99re这里只有精品国产99| 人妻丰满精品一区二区A片| 欧美婷婷五月天综合| 亚洲免费成人电影AV| 天天爱天天做天天| 玖玖在线视频| 午夜天天精品视频| 日本色五月| 日本久久天堂| 亚洲色无码A片一区二区麻豆| 色婷五月天综合网| 97干欧美| 免费观看全黄做爰的视频 | 激情综合自拍五月婷婷色五月| 少妇真实被内射视频三四区| 五月天婷婷在线播放| 伊人久久五月天| 亚洲无AV在线中文字幕| 婷婷五月天天天| 99五月丁香丁| 91精品91久久久久77777| 五月激情六月宗合| 99色综合| 国产美女精品| 伊人网碰碰| 亚洲亚洲人成综合网络| 来吧亚洲综合网| 99re思思| 9久9久| 久久激情网| 99热这里只有精品免费观看| 欧美天天草人人草| 久热精彩视频98| 日日天天干| 五月丁香欧美综合| 欧韩性爱| 一区二区三区XXXXXX| 色色色色综合网| 婷婷五月综合网| 三区激情四射av| 婷婷趴趴| 久久六月婷婷| 天天草天天爽| 超碰在线综合| 狠狠色综合五月| 97在线精品| 成人AV综合在线| 熟女人妻一区二区三区免费看| 91激情五月开心| 婷婷丁香五月天狠狠| 色色色色色色色色五月先| www,99视频| 久久九九色| 5五月综合网亚洲| 伊人狠狠狠综合| 综合色图区| 最新AV在线观看| 成人网在线观看视频| 伊人婷婷五月天| 狠狠xx| 色情免费视频播放| 99视频精品视频| 婷婷激情性爱| 日韩视频女神99| 99视频免费播放 | 香蕉AV777XXX色综合一区| 99色视频| 欧美大香蕉视频| 色婷婷成人| 99er视频在线| 手机AVAV天堂看网| 激情涩涩网| 婷婷综合久久| 狠狠久久婷五月| 久久99精品久久久久久三级| 日本天堂网站99| 江苏少妇性BBB搡BBB爽爽爽| 婷婷导航| 97操操| 五月丁香六月激情| WWW.婷婷| 深爱激情六月天| 久久久婷婷五月亚洲97号色| 久久婷婷东京热大香樵| Av在线资源| 5月丁香综合图区| 精品久久久久成人码免费动漫| 婷婷五月成人| 天天做天天爽| 爱射综合| av国产精品| 婷婷午夜| 99国产精品久久久久久久久久久 | 色无婷婷| 亚洲狠狠丁香婷婷香蕉| 婷婷最新地址| 97日本在线播放| 久久婷婷综合五月| 一级内射毛片| 人人综合色| 九九热99在线视频| 五月婷婷日本| 91丨九色丨熟女丰满| 色老久久| 大香蕉五月丁香| 69精品人人人人| site:xiongshengzz.com| 都市激情久久| 色五月开心五月激情五月| 婷婷成人在线| 99热精品9| 噜噜噜噜噜色| 天天摸天天透天天舔| 91视频综合网| 美日韩成人| 大香蕉520| 国内一级片| 九九九九热99超碰| 99热99| 琪琪色五月天| 99热只有精品在线播放| 少妇婷婷五月天| 99热在线观看这里只有精品| rr天天操| www.99久| 熟妇人妻中文字幕无码老熟妇| 青青草婷婷五月天| 日本理论久久| 超碰精品在线| 亚洲AV无码久久精品色欲| 深爱五月日韩| 五月激情婷婷综合| 91丨九色丨熟女高潮| 日韩在线看AV| 99热第一页| AA丁香综合激情| 26uuu亚洲色| 狠狠xx| 99视频内射三四| 日日躁夜夜躁狠狠久久AV| 色色丁香婷婷五月天| 色九月欧美| 伊人五月婷婷| 五月天精品视频| www婷婷| 草草女人亚洲| 小骚穴电影| 日韩操人| 丁香五月天操B| 久久婷婷久久| 久婷婷久草| 丁香六月久久| 丁香六月婷| 激情综合网站| 国产色色网站网址| 99视频这里有精品| 日本天天操| 視频福利乱色| 五月人人丁香婷婷五月人人丁香| 日本色视| 极品人妻VIDEOSSS人妻| 热久久色| 99久久思思| 五月丁香久久网| 天天综合天综合久久网| 99ri在线观看视频| 丁香婷婷五月基地| 天天干天天干天天干| www色哟哟| 丁香女人五月天| 国产色色视频| 蜜臀AV在线观看| 色色狼人综合| 99成人小视频| 性爱视频久久| 99色热视频| 天天做 天天爱| 色婷婷久久| 欧美天天搞| 深爱激情久久| 久久99精品视频| 色婷婷影| 天天色天天色天天色天天色天天色| av九九| 射久久丁香五月| 五月天激情.com| www激情| 久久久精品AV| 国产精品色婷婷AV综合色色| 中字幕视频在线永久在线观看免费| 99九九在线观看免费| 久久色五月天激情小说| 午夜精品人妻无码一区二区三区| 99热偷拍| 婷婷五月丁香色综合| 超碰99热精品在线| 天天拍天天做视频| 色五月婷婷久久| 91丨九色|PRNY熟妇| 色五月成人在线| 日本天天色| 婷婷色色五月天| 五月丁香婷婷色色色| 996黄色片| 欧美性色五月天| 天天色情站| 他改变了拜占庭| 五月丁香激情综合| 久久久性爱网| 免费看欧美成人A片无码| 久久婷婷五月综合色和| 综合视频五月| 国产古装妇女野外A片| 婷婷国产综合| 开心五月网| 婷婷丁香熟妇综合网| 国产无人区大片| 欧美操综合| 逼里香不卡| 丝雨一区二区| 日日懆天天懆| 99热香港| 五月婷婷丁香色播网| 苗黎美女四级成人版一级二级毛片| www.激情五月天.com| 六月五月丁香五月欧美| 97人人做| 婷婷五月综激情| 日韩操逼大片| 91大神操美女| 亭亭色色五月天| 97精品欧美91久久久久久久| 激情综合九月| 久久视频婷婷视频| 玖玖资源在线视频| 欧洲永久精品| 99只有精品| 色婷婷激情小说网| 久久精品无码一区| 成人性爱精品视频| 久在线综合69| 99色视频在线| 色五月婷婷操逼| 亚洲五月婷婷| 狠狠看狠狠| 婷婷丁香社区| 综合五月激情| 97久久超级| 久久婷婷综合国产| 综合久| 91碰碰| 97婷婷丁香五月| 色综合网页| 91精品久久久久、久五月天| 九九热在线99| 亚洲1区| 激情婷婷综合| 波多野结衣不卡AV| 五月性色| 开心五月婷婷激情| 九九视频在线观看视频6 | 九九热手机在线视频| 久久久.www| 91视频精品99| 琪琪理论片| 伊人激情综合| 日韩 中文 欧美| 欧美噜噜免费观看| 日本婷婷激情四射中文字幕在线观看| 五月丁香在线综合| 久久狼人天堂| 久久99国产综合精品免费| 久狠日av| 97久久精品| 夜精品无码A片一区二区蜜桃| 色噜噜狠狠狠综合曰曰曰| 亚洲黄3级片网站欧美| 丁香五月色情| 婷婷丁香五月噜噜噜| 欧美天天搞| 国产精品色色| www.深爱激情| 色婷婷电影网| 黃色三级三级三级三级 qixing300.shrkbk.com www.jinbozs.com tianmiaosw.com | 日日操,夜夜撸| 99热99精品| 大地资源色婷婷视频在线| 色色色国产| 久久久97| 91在线视频观看午夜福利| 五月婷啪啪| 另类图片 五月激情| 五月五月婷婷| 九九视频在线观看视频6 | 婷婷六月丁香欧美视频在线| 99久热| 欧在线一区| 狠狠五月天| 五月天婷婷影院影院观看| 黄色99视频| 97偷拍在线视频| 色狠狠综合| 综合图片色色| 另类图片五月天婷婷| 欧美色色色色色色| 国产欧美精品AAAAAA片| 久久激情天堂| 五月婷婷免费在线观看| www.黄色片-久久成人国产精品在线播放-999AV | 婷婷操超碰| 六月丁花香啪啪激情欧美| 99操碰| 婷婷丁香五月亚洲| 婷婷丁香色五月天久久88| 五月天婷婷亚洲| 日本不卡一区二区三区| 色五月色五天色情网| 中文字幕日产A片在线看| 久久99大全| 激情综合色| 伍月婷婷免费视频| 日韩av在线免费观看| 九九婷婷热| 操碰91| 4399在线日本A片| 婷婷五月丁香手机在线视频| 日韩狠狠色婷婷| 日韩影院三级| 丁香六月婷婷社区| 两性婷婷丁香五月| 伊人婷婷五月天| 日本久热| 激情五月天影院| 97好吊操| 99热香港| 欧美日韩成人在线| 1024婷婷综合久久五月天| 九九久久久综合| 97caop| 丁香六月激情| 色色色综合网| 久久伦乱| 亚洲综合五月天| 九九在线这里只有精品视频| 婷婷5月开心6月| 《诡秘之主》在线观看| 超碰com| 超碰爱爱爱| 91主播在线| 91a片爽| 色色五月婷婷狠狠| 国产看真人毛片爱做A片| 99热在线观看免费精品| 激情文学久久| 五月丁香色色| 五月丁香六月婷婷激情网| 五月天婷婷在线AN| 丁香五月婷在线观看| 丁香六月成人网| 人妻久久久久久久久妻久久久久| wwxx日本| 亚洲天堂亚洲色色色| 精品五月丁香| 丁香五月天欧美成人| 开心五月婷婷激情| 97干在线| 噜噜噜噜噜久| 亚洲另类在线观看| 国产超碰在线| 丁香五月婷婷深爱综合激情| 99热99色| 色婷婷丁香网| WWW.夜夜操.com| 五月婷婷综合热| 天天做综合| 秋霞三级影视资源| 国产五月天激情小说| 丁香伊人综合| 天天摸天天高潮天天爽| 五月天基地| 日韩欧美一级大黄网站| 色婷五月天激情| 日本色综合| 久久婷婷网| 天天天天天日| www.99视频| 国产偷人爽久久久久久老妇APP | 老妇操B| 碰碰女| 婷婷五月天国产精品| 色激情综合狠狠婷婷| 亚洲开心激情网| 天天干天天爽天天爽| 婷婷五月天激情基地| 日日噜噜夜夜狠狠久久丁香五月| 26uuu丁香婷婷五月| 香蕉久久国产AV一区二区| 日韩无码专区| 在线看九一V图片| 丁香五月婷婷综合激情啪啪啪| 伊人久久大香线蕉AV最新午夜| 啪色综合| 天天色综和网| 九九草热在线观看| 激情五婷网| www.五月婷婷.com| 色婷婷丁香| 97日本在线播放| 婷婷丁香五月激情密臀av| caop在线视频| 亚洲色欲欧美一区二区三区| 色色丁香激情五月| 亚洲熟妇无码乱子AV电影| 99色色网| 久久久国产精品黄毛片| 青青999| 婷婷综合精品| 久婷婷久草| 婷婷情爱五月天6| 99热这| 97日本操| 中文字幕在线不卡| 亚洲看av的网站| 伊人激情影院| 深情六月婷婷综合久久| 婷婷五月天激情亚洲小说| 十一月婷婷激情四射| 久久精品性爱| 天天婬色综合| 色婷婷综合网站| 久久开心五月婷婷| 天天操B| 91在线操逼视频| 色色色婷婷五月| 亚洲婷婷婷| 久久精品99久久久久久| 少妇AB又爽又紧无码网站| 青青草Avb在线| 五月丁香色婷婷伊人| 少妇激情五月天| 丁香五月天社区| 国产中文字幕在线视频免费观看| 五月丁香美女视频| 另类五月激情| 色色色综合| 五月天久久激情| 天天日人人| 9l视频自拍9l视频自拍九色学生| 香蕉AV777XXX色综合一区| 69久久99精品久久久久| 婷婷激情五月综合基地| 91要啪| 9热成人在线视频| 久久98| 激情五月婷婷丁香| 日本欧美成人片AAAA| 日本99在线| 日日爽天天| 九九热精品视频在线观看| 色色影院黄大片| 久久久五月激| 人妻无码精品一区| 色色网91| 色高清无码视频| 国产欧洲欧洲精品久久| 热99久| 久久九九大香蕉电院| 五月丁香六月激情在线| 丁香五月最新网址| 精久久色| 色婷婷基地| 91成人视频| 五月天国产| 99精日本久久| 婷久看人爽| 大香蕉九九| 国产精品丝| 欧美色爱五月天| 少妇人妻丰满做爰XXX| 五月婷婷六月丁香| 婷婷色五月开心五月| 激情电影五月婷婷| 五月丁香999| 丁香五月天激情综合| 激情五月婷| 26uuu日韩| 婷婷色网址| 亚洲mm色| 中文字幕在线观看视频www| 青青草色在线视频观看| 99热这里只有精品3| 欧美情色一区| 日本在线免费中文com.| 久久婷婷视频| 亚洲综合久| 91干在线| 99手机在线精品视频| 天天噜噜| 超级碰人人操人人干| 五月成人综合| 日本综合99| 五月婷婷co.m| 欧美搡BBBBB摔BBBBB| 人人草成人视频| 超碰妻人人| 肏日网在线看| 狠狠色综合五月| 天天碰夜夜操| 婷婷瑟五月天久久综合| 色色色综合| 婷婷丁香六月影视| 亚洲综合五月天| 这里只有视频精品| 99色热| 色色色综合视频| 国产人妻777人伦精品HD| 丁香六月AV| 99碰碰| 天天日狠狠| 国产特级毛片AAAAAAA高清| 综合久久丁香婷婷,五月婷婷六月丁香,开心激情综合网,六月丁香在线观看,婷婷丁 | 五月丁香综合啪啪| 99操视频| 99热这里只有精品在线观看| 色丁香五月天射婷婷爱婷婷| 天天干天天日天天操| 丁香婷婷综合激情五月色,开心五月丁香花综合网,激情综合五月亚洲婷婷,五月天 | 性爱网五月天| 91欧美| 久久五月天合网| 欧美性生交A片免费看| 婷婷五月天性| 九色1区视频在线| 天天天天干| 国产综合色婷婷精品久久| 色五月激情综合网| 華人性愛AV在線| 丁香五月花| 激情五月婷婷综合色播小说| 精品视频网| 色欲久久久久久综合网综合网| 激情综合在线观看| 99视频| 99热精这里只有精品| 91n啪啪| 婷婷五月综合网| 亚洲精品网站色视频| 第四色在线观看| 丁香五月区| 亚洲性视频| 亚洲中文乱字字幕在线永久| 婷婷五日b| 九一九九黄色| 九热精品| 多精窝99在线视频| 婷婷中文综合网| 日本久久人| 五月丁香色婷婷伊人| 丁香五月天堂婷婷| 亚洲精品永久久久久久| 激情综合啪啪| 日本精品人妻无码77777| 五月婷婷色激情| 99色色| 欧美日韩中文国产一区发布| 噜噜久| 色噜噜综合网| 97亚洲视频在线| 26uuu成人网| 久久五月天激情美女| 日韩青青| 人妻九九九九| www.色窝| 久9精品| 精品人妻伦九区久久AAA片| 欧美人妻一区二区| 这里只有精品视频222| 色色色九九九五月婷婷| AV成人在线播放| 天天色综合色| www.yw色| 少妇AB又爽又紧无码网站| 99网99热| 婷婷激情鹿城五月天| 超碰在线超碰| 91精品国产综合久久久不卡电影|