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中的try和finally和with方法
May 05 Python
Python实现的桶排序算法示例
Nov 29 Python
Python爬取附近餐馆信息代码示例
Dec 09 Python
python3获取当前文件的上一级目录实例
Apr 26 Python
libreoffice python 操作word及excel文档的方法
Jul 04 Python
PyTorch实现AlexNet示例
Jan 14 Python
在keras中获取某一层上的feature map实例
Jan 24 Python
Python 从attribute到property详解
Mar 05 Python
利用Python如何实时检测自身内存占用
May 09 Python
Python如何合并多个字典或映射
Jul 24 Python
python re.match()用法相关示例
Jan 27 Python
Python使用UDP实现720p视频传输的操作
Apr 24 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为什么选mysql作为数据库? Mysql 创建用户方法
2007/07/02 PHP
Yii框架中 find findAll 查找出制定的字段的方法对比
2014/09/10 PHP
PHP中的traits简单使用实例
2015/05/13 PHP
laravel 5.5 关闭token的3种实现方式
2019/10/24 PHP
jquery图片延迟加载 前端开发技能必备系列
2012/06/18 Javascript
javascript正则匹配汉字、数字、字母、下划线
2014/04/10 Javascript
jQuery选择器之基本选择器与层次选择器
2015/03/03 Javascript
跟我学习javascript的prototype,getPrototypeOf和__proto__
2015/11/17 Javascript
HTML5游戏引擎LTweenLite实现的超帅动画效果(附demo源码下载)
2016/01/26 Javascript
EasyUI 中combotree 默认不能选择父节点的实现方法
2016/11/07 Javascript
AngularJS extend用法详解及实例代码
2016/11/15 Javascript
JavaScript基本类型值-Number类型
2017/02/24 Javascript
微信小程序loading组件显示载入动画用法示例【附源码下载】
2017/12/09 Javascript
vue 将页面公用的头部组件化的方法
2017/12/18 Javascript
JS实现带导航城市列表以及输入搜索功能
2018/01/04 Javascript
vue.js做一个简单的编辑菜谱功能
2018/05/08 Javascript
vue :src 文件路径错误问题的解决方法
2018/05/15 Javascript
JavaScript继承与聚合实例详解
2019/01/22 Javascript
通过实例解析chrome如何在mac环境中安装vue-devtools插件
2020/07/10 Javascript
python分析apache访问日志脚本分享
2015/02/26 Python
python字典get()方法用法分析
2015/04/17 Python
python使用webdriver爬取微信公众号
2018/08/31 Python
Python中print函数简单使用总结
2019/08/05 Python
python爬虫增加访问量的方法
2019/08/22 Python
python中判断数字是否为质数的实例讲解
2020/12/06 Python
CSS3 transform的skew属性值图文详解
2014/07/21 HTML / CSS
META-INF文件夹中的MANIFEST.MF的作用
2016/06/21 面试题
证婚人经典证婚词
2014/01/09 职场文书
《猴子种果树》教学反思
2014/04/26 职场文书
安全月活动总结
2014/05/05 职场文书
小马王观后感
2015/06/11 职场文书
《原神》新角色演示“神里绫人:林隐泓洄” 宠妹狂魔
2022/04/03 其他游戏
2022新作动画《福星小子》释出宣传影片 加入内田真礼&宫野真守配音演出
2022/04/08 日漫
docker compose 部署 golang 的 Athens 私有代理问题
2022/04/28 Servers
uniapp引入支付宝原生扫码插件步骤详解
2022/07/23 Javascript
python中使用redis用法详解
2022/12/24 Redis