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之大话题小函数(2)
Oct 10 Python
python求列表交集的方法汇总
Nov 10 Python
python实现稀疏矩阵示例代码
Jun 09 Python
python之Character string(实例讲解)
Sep 25 Python
Python机器学习k-近邻算法(K Nearest Neighbor)实例详解
Jun 25 Python
python高级特性和高阶函数及使用详解
Oct 17 Python
python json.loads兼容单引号数据的方法
Dec 19 Python
Python 把序列转换为元组的函数tuple方法
Jun 27 Python
Python 通过截图匹配原图中的位置(opencv)实例
Aug 27 Python
Python openpyxl读取单元格字体颜色过程解析
Sep 03 Python
使用PyQt的QLabel组件实现选定目标框功能的方法示例
May 19 Python
Pytorch - TORCH.NN.INIT 参数初始化的操作
Feb 27 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
javascript new后的constructor属性
2010/08/05 Javascript
使用Jquery搭建最佳用户体验的登录页面之记住密码自动登录功能(含后台代码)
2011/07/10 Javascript
5个javascript的数字格式化函数分享
2011/12/07 Javascript
js弹出模式对话框,并接收回传值的方法
2013/03/12 Javascript
使用jQuery内容过滤选择器选择元素实例讲解
2013/04/18 Javascript
js用正则表达式来验证表单(比较齐全的资源)
2013/11/17 Javascript
table行随鼠标移动变色示例
2014/05/07 Javascript
jQuery实现长按按钮触发事件的方法
2015/02/02 Javascript
每天一篇javascript学习小结(属性定义方法)
2015/11/19 Javascript
Bootstrap打造一个左侧折叠菜单的系统模板(一)
2016/05/17 Javascript
Vue.js实现一个自定义分页组件vue-paginaiton
2016/09/05 Javascript
AngularJS中指令的四种基本形式实例分析
2016/11/22 Javascript
bootstrap laydate日期组件使用详解
2017/01/04 Javascript
深入理解JavaScript中的尾调用(Tail Call)
2017/02/07 Javascript
JavaScript函数参数的传递方式详解
2017/03/06 Javascript
jQuery EasyUI 为Combo,Combobox添加清除值功能的实例
2017/04/13 jQuery
webpack配置的最佳实践分享
2017/04/21 Javascript
小程序和web画三角形实现解析
2019/09/02 Javascript
ES6中new Function()语法及应用实例分析
2020/02/19 Javascript
Python中使用中文的方法
2011/02/19 Python
Python使用迭代器捕获Generator返回值的方法
2017/04/05 Python
Python连接Redis的基本配置方法
2018/09/13 Python
Python从列表推导到zip()函数的5种技巧总结
2019/10/23 Python
python3 tcp的粘包现象和解决办法解析
2019/12/09 Python
python多线程实现代码(模拟银行服务操作流程)
2020/01/13 Python
解决tensorflow添加ptb库的问题
2020/02/10 Python
Python实现子类调用父类的初始化实例
2020/03/12 Python
Pytorch 使用CNN图像分类的实现
2020/06/16 Python
没编程基础可以学python吗
2020/06/17 Python
python和js交互调用的方法
2020/06/23 Python
python制作一个简单的gui 数据库查询界面
2020/11/19 Python
W3C公布最新的HTML5标准草案
2008/10/17 HTML / CSS
HTML5 video 上传预览图片视频如何设置、预览视频某秒的海报帧
2018/08/28 HTML / CSS
Java面试题:请说出如下代码的输出结果
2013/04/22 面试题
继续教育心得体会(共6篇)
2016/01/19 职场文书
python 闭包函数详细介绍
2022/04/19 Python