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的Pyspider为例剖析搜索引擎的网络爬虫实现方法
Mar 30 Python
Python中Random和Math模块学习笔记
May 18 Python
详解Python网络爬虫功能的基本写法
Jan 28 Python
Python selenium 父子、兄弟、相邻节点定位方式详解
Sep 15 Python
下载python中Crypto库报错:ModuleNotFoundError: No module named ‘Crypto’的解决
Apr 23 Python
python匹配两个短语之间的字符实例
Dec 25 Python
使用Python-OpenCV向图片添加噪声的实现(高斯噪声、椒盐噪声)
May 28 Python
Python 类,property属性(简化属性的操作),@property,property()用法示例
Oct 12 Python
python实现超市商品销售管理系统
Nov 22 Python
python生成随机数、随机字符、随机字符串
Apr 06 Python
Python+Matplotlib图像上指定坐标的位置添加文本标签与注释
Apr 11 Python
Django框架中视图的用法
Jun 10 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
php Xdebug的安装与使用详解
2013/06/20 PHP
curl和libcurl的区别简介
2015/07/01 PHP
PHP unlink与rmdir删除目录及目录下所有文件实例代码
2018/02/07 PHP
Ubuntu彻底删除PHP7.0的方法
2018/07/27 PHP
js身份证验证超强脚本
2008/10/26 Javascript
jQuery+CSS 实现的超Sexy下拉菜单
2010/01/17 Javascript
Jquery知识点三 jquery表单对象操作
2011/01/17 Javascript
给artDialog 5.02 增加ajax get功能详细介绍
2012/11/13 Javascript
利用div+jquery自定义滚动条样式的2种方法
2013/07/18 Javascript
JavaScript中判断整数的多种方法总结
2014/11/08 Javascript
js获取页面description的方法
2015/05/21 Javascript
jQuery.Uploadify插件实现带进度条的批量上传功能
2016/06/08 Javascript
浅谈jquery.form.js的ajaxSubmit和ajaxForm的使用
2016/09/09 Javascript
可输入文字查找ajax下拉框控件 ComBox的实现方法
2016/10/25 Javascript
Vue开发过程中遇到的疑惑知识点总结
2017/01/20 Javascript
JS基于onclick事件实现单个按钮的编辑与保存功能示例
2017/02/13 Javascript
利用Chrome DevTools直接调试Node.js和JavaScript的方法详解(并行)
2017/02/16 Javascript
vue项目实战总结篇
2018/02/11 Javascript
vue的常用组件操作方法应用分析
2018/04/13 Javascript
[10:39]DOTA2上海特级锦标赛音乐会纪录片
2016/03/21 DOTA
利用python写个下载teahour音频的小脚本
2017/05/08 Python
Python利用operator模块实现对象的多级排序详解
2017/05/09 Python
Python中使用haystack实现django全文检索搜索引擎功能
2017/08/26 Python
Python实现将照片变成卡通图片的方法【基于opencv】
2018/01/17 Python
对TensorFlow中的variables_to_restore函数详解
2018/07/30 Python
Python socket实现的简单通信功能示例
2018/08/21 Python
分享8点超级有用的Python编程建议(推荐)
2019/10/13 Python
Python使用socketServer包搭建简易服务器过程详解
2020/06/12 Python
通过自学python能找到工作吗
2020/06/21 Python
详细分析Python垃圾回收机制
2020/07/01 Python
AVIS安飞士奥地利租车官网:提供奥地利、欧洲和全世界汽车租赁
2016/11/29 全球购物
电工工作职责范本
2014/02/22 职场文书
喝酒驾驶检讨书
2014/10/01 职场文书
鲁迅故居导游词
2015/02/05 职场文书
《我在为谁工作》:工作的质量往往决定生活的质量
2019/12/27 职场文书
JavaScript实现音乐播放器
2022/08/14 Javascript