python递归调用中的坑:打印有值, 返回却None


Posted in Python onMarch 16, 2020

今天给大家分享小编遇到的一个坑有关python递归调用中的坑:打印有值, 返回却None问题。

问题:

前几天写一个小面试题, 忽然有个惊悚的发现, 如下:

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()

今日在写一个装饰器的时候偶然想起一个可能, 把函数内最下面一行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 之前答应出来都是有值的, 调用时候返回值都是None ,很是纳闷 后来找到原因
现在来看下返回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的时候数据只能进不能出所以就只能返回None

总结

到此这篇关于python递归调用中的坑:打印有值, 返回却None的文章就介绍到这了,更多相关python递归打印有值返回none内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
Python语言的12个基础知识点小结
Jul 10 Python
Python实现拼接多张图片的方法
Dec 01 Python
python使用str &amp; repr转换字符串
Oct 13 Python
使用Python对MySQL数据操作
Apr 06 Python
Python对列表中的各项进行关联详解
Aug 15 Python
PyQt5利用QPainter绘制各种图形的实例
Oct 19 Python
tensorflow实现简单的卷积网络
May 24 Python
Python检查和同步本地时间(北京时间)的实现方法
Dec 03 Python
Python后台开发Django会话控制的实现
Apr 15 Python
关于pytorch中网络loss传播和参数更新的理解
Aug 20 Python
Tensorflow 模型转换 .pb convert to .lite实例
Feb 12 Python
python实现录屏功能(亲测好用)
Mar 02 Python
django 前端页面如何实现显示前N条数据
Mar 16 #Python
Python迭代器Iterable判断方法解析
Mar 16 #Python
python 递归调用返回None的问题及解决方法
Mar 16 #Python
python 通过邮件控制实现远程控制电脑操作
Mar 16 #Python
django中的数据库迁移的实现
Mar 16 #Python
django之从html页面表单获取输入的数据实例
Mar 16 #Python
Django实现将views.py中的数据传递到前端html页面,并展示
Mar 16 #Python
You might like
论坛特效代码收集(落伍转发-不错)
2006/12/02 Javascript
jQuery解决iframe高度自适应代码
2009/12/20 Javascript
SeaJS入门教程系列之完整示例(三)
2014/03/03 Javascript
Javascript中this的用法详解
2014/09/22 Javascript
jquery图片轮播特效代码分享
2020/04/20 Javascript
利用CSS3在Angular中实现动画
2016/01/15 Javascript
JS动态给对象添加属性和值的实现方法
2016/10/21 Javascript
js实现tab选项卡切换功能
2017/01/13 Javascript
Vue异步组件使用详解
2017/04/08 Javascript
本地存储localStorage用法详解
2017/07/31 Javascript
详解小程序设置缓存并且不覆盖原有数据
2019/04/15 Javascript
JavaScript和TypeScript中的void的具体使用
2019/09/12 Javascript
javascript 易错知识点实例小结
2020/04/25 Javascript
[03:55]2016国际邀请赛中国区预选赛首日TOP10精彩集锦
2016/06/27 DOTA
Python脚本判断 Linux 是否运行在虚拟机上
2015/04/25 Python
python中查看变量内存地址的方法
2015/05/05 Python
Python的面向对象编程方式学习笔记
2016/07/12 Python
Python列表删除的三种方法代码分享
2017/10/31 Python
[原创]python爬虫(入门教程、视频教程)
2018/01/08 Python
对python借助百度云API对评论进行观点抽取的方法详解
2019/02/21 Python
python中的错误如何查看
2020/07/08 Python
Python基于Faker假数据构造库
2020/11/30 Python
美国最大的高尔夫发球时间预订网站:TeeOff.com
2018/03/28 全球购物
荷兰最大的多品牌男装连锁店:Adam Brandstore
2019/12/31 全球购物
编程用JAVA解析XML的方式
2013/07/07 面试题
四年级评语大全
2014/04/21 职场文书
英语系本科生求职信
2014/07/15 职场文书
民族学专业职业生涯规划范文:积跬步以至千里
2014/09/11 职场文书
婚庆公司计划书
2014/09/15 职场文书
周一问候语大全
2015/11/10 职场文书
中国梦宣传标语口号
2015/12/26 职场文书
幼儿教师师德培训心得体会
2016/01/09 职场文书
为什么说餐饮很难做,是因为你不了解这些新规则
2019/08/20 职场文书
《童年》读后感(三篇)
2019/08/27 职场文书
详解Django中 render() 函数的使用方法
2021/04/22 Python
Django与数据库交互的实现
2021/06/03 Python