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脚本分享
Apr 21 Python
在Python中使用全局日志时需要注意的问题
May 06 Python
详解Python中的__getitem__方法与slice对象的切片操作
Jun 27 Python
python使用matplotlib绘图时图例显示问题的解决
Apr 27 Python
django 将model转换为字典的方法示例
Oct 16 Python
python 实现批量xls文件转csv文件的方法
Oct 23 Python
对python同一个文件夹里面不同.py文件的交叉引用方法详解
Dec 15 Python
python矩阵/字典实现最短路径算法
Jan 17 Python
Python字符串通过'+'和join函数拼接新字符串的性能测试比较
Mar 05 Python
如何设置PyCharm中的Python代码模版(推荐)
Nov 20 Python
Python排序函数的使用方法详解
Dec 11 Python
Python实现打乒乓小游戏
Sep 25 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加密解密的代码
2006/10/09 PHP
destoon各类调用汇总
2014/06/20 PHP
php通过记录IP来防止表单重复提交方法分析
2014/12/16 PHP
php基于环形链表解决约瑟夫环问题示例
2017/11/07 PHP
Javascript 各浏览器的 Javascript 效率对比
2008/01/23 Javascript
jquery动态增加删除表格行的小例子
2013/11/14 Javascript
防止登录页面出现在frame中js代码
2014/07/22 Javascript
JQuery分屏指示器图片轮换效果实例
2015/05/21 Javascript
JavaScript动态改变div属性的实现方法
2015/07/22 Javascript
数据分析软件之FineReport教程:[5]参数界面JS(全)
2015/08/13 Javascript
深入探秘jquery瀑布流的实现
2016/01/30 Javascript
原生JS实现左右箭头选择日期实例代码
2017/03/14 Javascript
jQuery实现jQuery-form.js实现异步上传文件
2017/04/28 jQuery
在vue中实现简单页面逆传值的方法
2017/11/27 Javascript
详解微信小程序开发用户授权登陆
2019/04/24 Javascript
Vue性能优化的方法
2020/07/30 Javascript
Python实现的一个自动售饮料程序代码分享
2014/08/25 Python
Python中的类与对象之描述符详解
2015/03/27 Python
详解python中字典的循环遍历的两种方式
2017/02/07 Python
Python使用OpenCV进行标定
2018/05/08 Python
浅谈pytorch和Numpy的区别以及相互转换方法
2018/07/26 Python
解决python中 f.write写入中文出错的问题
2018/10/31 Python
浅谈Python 列表字典赋值的陷阱
2019/01/20 Python
Django之提交表单与前后端交互的方法
2019/07/19 Python
自定义django admin model表单提交的例子
2019/08/23 Python
用gpu训练好的神经网络,用tensorflow-cpu跑出错的原因及解决方案
2021/03/03 Python
华为俄罗斯官方网上商城:购买Huawei手机和平板
2017/04/21 全球购物
优秀应届毕业生自荐信
2013/11/16 职场文书
创新型城市实施方案
2014/03/06 职场文书
组工干部演讲稿
2014/09/02 职场文书
村党的群众路线教育实践活动总结材料
2014/10/31 职场文书
2015年大学元旦晚会活动策划书
2014/12/09 职场文书
开会通知
2015/04/20 职场文书
致运动员赞词
2015/07/22 职场文书
2019交通安全宣传标语集锦!
2019/06/28 职场文书
Python Pandas pandas.read_sql_query函数实例用法分析
2021/06/21 Python