python遞歸調(diào)用中的坑:打印有值, 返回卻None
今天給大家分享小編遇到的一個坑有關python遞歸調(diào)用中的坑:打印有值, 返回卻None問題。
問題:
前幾天寫一個小面試題, 忽然有個驚悚的發(fā)現(xiàn), 如下:
s1 = 'abcdefg' def right_shift(s, n): """ 把傳入的字符串,前n個字符移動到最后面 """ if n < 1: print(s) # 此步輸出結果為 "efgabcd" return s s = s[1:] + s[0] n -= 1 right_shift(s, n) s = right_shift(s1, 4) print(s)# 此步輸出結果為 None
輸出結果讓我百思不得其解, 為什么明明上一步輸出有值, return出去后就變成了None??
解決方法: return function()
今日在寫一個裝飾器的時候偶然想起一個可能, 把函數(shù)內(nèi)最下面一行right_shift(s, n) 改為return right_shift(s, n)即可! 修改后代碼如下:
s1 = 'abcdefg' def right_shift(s, n): """ 把傳入的字符串,前n個字符移動到最后面 """ if n < 1: # print(s) return s s = s[1:] + s[0] n -= 1 # 加入return, 其原理根裝飾器的閉包接近! return right_shift(s, n) s = right_shift(s1, 4) print(s) # 成功輸出 "efgabcd"
知識點補充:python 遞歸返回None 解決
今天寫了一個遞歸 return 之前答應出來都是有值的, 調(diào)用時候返回值都是None ,很是納悶 后來找到原因
現(xiàn)在來看下返回None 的代碼
def get_end_parent_ele(self, obj): """獲取這個id 所在的原始類""" parent_id = obj.parent_id if obj else 0 OHHOLog.print_log("獲取這個id parent_id") OHHOLog.print_log(parent_id) parent_obj = self.obj_obj.get_by_id(parent_id) if parent_obj.key == "all": OHHOLog.print_log("all") return_key = obj.key OHHOLog.print_log(return_key) return return_key else: self.get_end_parent_ele(parent_obj)
修改將下面的也給返回
def get_end_parent_ele(self, obj): """獲取這個id 所在的原始類""" parent_id = obj.parent_id if obj else 0 OHHOLog.print_log("獲取這個id parent_id") OHHOLog.print_log(parent_id) parent_obj = self.interest.get_by_id(parent_id) if parent_obj.key == "all": OHHOLog.print_log("all") return_key = obj.key OHHOLog.print_log(return_key) return return_key else: return self.get_end_parent_ele(parent_obj)
沒有return的時候數(shù)據(jù)只能進不能出所以就只能返回None
總結
到此這篇關于python遞歸調(diào)用中的坑:打印有值, 返回卻None的文章就介紹到這了,更多相關python遞歸打印有值返回none內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
python利用不到一百行代碼實現(xiàn)一個小siri
這篇文章主要介紹了關于python利用不到一百行代碼實現(xiàn)了一個小siri的相關資料,文中介紹的很詳細,對大家具有一定的參考借鑒價值,需要的朋友們下面來一起看看吧。2017-03-03Python中requests、aiohttp、httpx性能比拼
本文主要介紹了Python中requests、aiohttp、httpx性能比拼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-06-06python中plot實現(xiàn)即時數(shù)據(jù)動態(tài)顯示方法
這篇文章主要為大家詳細介紹了python中plot實現(xiàn)即時數(shù)據(jù)動態(tài)顯示方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-06-06python smtplib模塊實現(xiàn)發(fā)送郵件帶附件sendmail
這篇文章主要為大家詳細介紹了python smtplib模塊實現(xiàn)發(fā)送郵件帶附件sendmail,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-05-05