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实现在控制台输入密码不显示的方法
Jul 02 Python
Python模块结构与布局操作方法实例分析
Jul 24 Python
Python Flask框架模板操作实例分析
May 03 Python
python绘制多个子图的实例
Jul 07 Python
对Python函数设计规范详解
Jul 19 Python
python实现的按要求生成手机号功能示例
Oct 08 Python
Python笔记之facade模式
Nov 20 Python
pytorch GAN生成对抗网络实例
Jan 10 Python
如何利用python 读取配置文件
Jan 06 Python
Python绘制K线图之可视化神器pyecharts的使用
Mar 02 Python
Python基础之函数嵌套知识总结
May 23 Python
yolov5返回坐标的方法实例
Mar 17 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
延长phpmyadmin登录时间的方法
2011/02/06 PHP
ThinkPHP3.1新特性之Action参数绑定
2014/06/19 PHP
php获取四位字母和数字的随机数的实现方法
2015/01/09 PHP
jQuery结合PHP+MySQL实现二级联动下拉列表[实例]
2011/11/15 Javascript
对javascript的一点点认识总结《javascript高级程序设计》读书笔记
2011/11/30 Javascript
解析JavaScript中delete操作符不能删除的对象
2013/12/03 Javascript
JS中Date日期函数中的参数使用介绍
2014/01/02 Javascript
JavaScript中的prototype和constructor简明总结
2014/04/05 Javascript
Thinkphp模板没有解析直接原样输出的解决方法
2014/10/31 Javascript
Bootstrap零基础入门教程(二)
2016/07/18 Javascript
详解Node.js如何开发命令行工具
2016/08/14 Javascript
js实现非常棒的弹出div
2016/10/06 Javascript
JS变量及其作用域
2017/03/29 Javascript
Vue下的国际化处理方法
2017/12/18 Javascript
webpack优化之代码分割与公共代码提取详解
2019/11/22 Javascript
解决vue单页面 回退页面 keeplive 缓存问题
2020/07/22 Javascript
vue+echarts实现动态折线图的方法与注意
2020/09/01 Javascript
python读取Android permission文件
2013/11/01 Python
简单的Python2.7编程初学经验总结
2015/04/01 Python
全面了解Python环境配置及项目建立
2016/06/30 Python
Python 多线程的实例详解
2017/09/07 Python
python 微信好友特征数据分析及可视化
2020/01/07 Python
python使用梯度下降和牛顿法寻找Rosenbrock函数最小值实例
2020/04/02 Python
python 爬虫网页登陆的简单实现
2020/11/30 Python
美国领先的家庭健康检测试剂盒提供商:LetsGetChecked
2019/03/18 全球购物
汽车销售顾问求职自荐信
2014/01/01 职场文书
公司门卫管理制度
2014/02/01 职场文书
火锅店营销方案
2014/02/26 职场文书
教育技术职业规划范文
2014/03/04 职场文书
购房个人委托书范本
2014/10/11 职场文书
群众路线教育实践活动实施方案
2014/10/31 职场文书
离职感谢信
2015/01/21 职场文书
商务代表岗位职责
2015/02/15 职场文书
民主生活会意见
2015/06/05 职场文书
检讨书格式
2019/04/25 职场文书
win11开机发生死循环重启怎么办?win11开机发生死循环重启解决方法
2022/08/05 数码科技