大家好,我是Python進(jìn)階者。 一、前言前幾天在Python最強(qiáng)王者交流群【向陽】問了一個(gè)Python代碼調(diào)試的問題。問題如下: 下面是具體的運(yùn)行代碼:
這個(gè)問題應(yīng)該怎么解決? 二、實(shí)現(xiàn)過程這里【瑜亮老師】給了一個(gè)指導(dǎo),如下所示: strategy_1 = tit_for_tat strategy_2 = rat 這兩個(gè)語句不是調(diào)用。只是函數(shù)引用或者把函數(shù)賦給變量strategy_1和strategy_2。 函數(shù)后面沒有加括號就不是調(diào)用 你可以試試下面的代碼就明白了。strategy_1 = tit_for_tat print(strategy_1) 當(dāng)你打印strategy_1的時(shí)候會出現(xiàn)function,而不是運(yùn)行函數(shù)tit_for_tat 【向陽】:謝謝瑜亮老師, 這兩句都沒用函數(shù)明啊,調(diào)用不是要函數(shù)名嗎 action_a = strategy_a(history) action_b = strategy_b(history) 【向陽】:我好像有點(diǎn)理解了 strategy_1 = tit_for_tat strategy_2 = rat 這兩句就是賦值 賦值后 calculate_sentence(rounds, strategy_1, strategy_2) 就是calculate_sentence(rounds, tit_for_tat, rat) 【瑜亮老師】:你看我截圖那里,先運(yùn)行綠色框內(nèi)的函數(shù),傳進(jìn)去3個(gè)參數(shù),后面的兩個(gè)參數(shù)就是兩個(gè)函數(shù)。這兩個(gè)函數(shù)在函數(shù)calculate_sentence中執(zhí)行,執(zhí)行的位置在黃色框那里。在黃色框中給函數(shù)加上了括號,并傳遞了參數(shù)history。 【瑜亮老師】:如果還不明白,你可以新建一個(gè)py文件,輸入運(yùn)行下面的代碼:def a(): print("hello") b=a print(b) print("---分割線---") print(b()) 【瑜亮老師】:區(qū)別就是函數(shù)后面有沒有括號。第一個(gè)print只能打印出來函數(shù)名,以及在內(nèi)存中的位置。第三個(gè)print能調(diào)用并執(zhí)行a函數(shù),打印出來hello。 不知道你的代碼是從哪里弄的。strategy_1 = tit_for_tat strategy_2 = rat 這兩行代碼在這個(gè)代碼里是多此一舉的。 直接傳遞函數(shù)名就行了,還再用個(gè)新的變量搞一下。 【向陽】:哈哈,AI大模型推薦的代碼 就這兩行多余的代碼,我研究了半天 還是瑜老師的解釋才明白 不過還是學(xué)習(xí)了,函數(shù)名直接傳遞,很熟體內(nèi)再調(diào)用 【瑜亮老師】:其實(shí)不用把函數(shù)名作為參數(shù)傳進(jìn)去。直接在函數(shù)體內(nèi)可以調(diào)用其他函數(shù)。你這個(gè)代碼是獨(dú)立的代碼,不涉及任何其他的,只是函數(shù)之間的調(diào)用可以不用傳遞函數(shù)名。 也就是說,刪掉那兩行,刪掉calculate_sentence函數(shù)中那兩個(gè)參數(shù),在calculate_sentence函數(shù)中直接調(diào)用tit_for_tat函數(shù)和rat函數(shù)即可。 順利地解決了粉絲的問題。 如果你也有類似這種Python相關(guān)的小問題,歡迎隨時(shí)來交流群學(xué)習(xí)交流哦,有問必答! 三、總結(jié)大家好,我是Python進(jìn)階者。這篇文章主要盤點(diǎn)了一個(gè)Python代碼調(diào)試的問題,文中針對該問題,給出了具體的解析和代碼實(shí)現(xiàn),幫助粉絲順利解決了問題。 最后感謝粉絲【向陽】提出的問題,感謝【瑜亮老師】給出的思路,感謝【莫生氣】等人參與學(xué)習(xí)交流。 【提問補(bǔ)充】溫馨提示,大家在群里提問的時(shí)候。可以注意下面幾點(diǎn):如果涉及到大文件數(shù)據(jù),可以數(shù)據(jù)脫敏后,發(fā)點(diǎn)demo數(shù)據(jù)來(小文件的意思),然后貼點(diǎn)代碼(可以復(fù)制的那種),記得發(fā)報(bào)錯(cuò)截圖(截全)。代碼不多的話,直接發(fā)代碼文字即可,代碼超過50行這樣的話,發(fā)個(gè).py文件就行。 ------------------- End ------------------- |
|