python递归调用中的坑:打印有值, 返回却None
今天给大家分享小编遇到的一个坑有关python递归调用中的坑:打印有值,返回却None问题。
问题:
前几天写一个小面试题,忽然有个惊悚的发现,如下:
s1='abcdefg' defright_shift(s,n): """ 把传入的字符串,前n个字符移动到最后面 """ ifn<1: print(s)#此步输出结果为"efgabcd" returns s=s[1:]+s[0] n-=1 right_shift(s,n) s=right_shift(s1,4) print(s)#此步输出结果为None
输出结果让我百思不得其解,为什么明明上一步输出有值,return出去后就变成了None??
解决方法:returnfunction()
今日在写一个装饰器的时候偶然想起一个可能,把函数内最下面一行right_shift(s,n)改为returnright_shift(s,n)即可!修改后代码如下:
s1='abcdefg' defright_shift(s,n): """ 把传入的字符串,前n个字符移动到最后面 """ ifn<1: #print(s) returns s=s[1:]+s[0] n-=1 #加入return,其原理根装饰器的闭包接近! returnright_shift(s,n) s=right_shift(s1,4) print(s)#成功输出"efgabcd"
知识点补充:python递归返回None解决
今天写了一个递归return之前答应出来都是有值的,调用时候返回值都是None,很是纳闷后来找到原因
现在来看下返回None的代码
defget_end_parent_ele(self,obj): """获取这个id所在的原始类""" parent_id=obj.parent_idifobjelse0 OHHOLog.print_log("获取这个idparent_id") OHHOLog.print_log(parent_id) parent_obj=self.obj_obj.get_by_id(parent_id) ifparent_obj.key=="all": OHHOLog.print_log("all") return_key=obj.key OHHOLog.print_log(return_key) returnreturn_key else: self.get_end_parent_ele(parent_obj)
修改将下面的也给返回
defget_end_parent_ele(self,obj): """获取这个id所在的原始类""" parent_id=obj.parent_idifobjelse0 OHHOLog.print_log("获取这个idparent_id") OHHOLog.print_log(parent_id) parent_obj=self.interest.get_by_id(parent_id) ifparent_obj.key=="all": OHHOLog.print_log("all") return_key=obj.key OHHOLog.print_log(return_key) returnreturn_key else: returnself.get_end_parent_ele(parent_obj)
没有return的时候数据只能进不能出所以就只能返回None
总结
到此这篇关于python递归调用中的坑:打印有值,返回却None的文章就介绍到这了,更多相关python递归打印有值返回none内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。