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关键字and和or用法实例
May 28 Python
python多进程和多线程究竟谁更快(详解)
May 29 Python
python字符串过滤性能比较5种方法
Jun 22 Python
pycharm运行出现ImportError:No module named的解决方法
Oct 13 Python
python判断列表的连续数字范围并分块的方法
Nov 16 Python
ZABBIX3.2使用python脚本实现监控报表的方法
Jul 02 Python
pytorch:model.train和model.eval用法及区别详解
Feb 20 Python
Python实现查找数据库最接近的数据
Jun 08 Python
详解Pycharm与anaconda安装配置指南
Aug 25 Python
Django基于Models定制Admin后台实现过程解析
Nov 11 Python
python 模块重载的五种方法
Apr 24 Python
python3实现无权最短路径的方法
May 12 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
GBK的页面输出JSON格式的php函数
2010/02/16 PHP
php检索或者复制远程文件的方法
2015/03/13 PHP
收集的10个免费的jQuery相册
2011/02/26 Javascript
SOSO地图API使用(一)在地图上画圆实现思路与代码
2013/01/15 Javascript
jquery实现图片按比例缩放示例
2014/07/01 Javascript
JavaScript实现的浮动层框架用法实例分析
2015/10/10 Javascript
jquery跟随屏幕滚动效果的实现代码
2016/04/13 Javascript
JS实现数字格式千分位相互转换方法
2016/08/01 Javascript
全面总结Javascript对数组对象的各种操作
2017/01/22 Javascript
Angular 4依赖注入学习教程之组件服务注入(二)
2017/06/04 Javascript
原JS实现banner图的常用功能
2017/06/12 Javascript
详解基于Vue+Koa的pm2配置
2017/10/24 Javascript
JS Object.preventExtensions(),Object.seal()与Object.freeze()用法实例分析
2018/08/25 Javascript
vue-cli脚手架的安装教程图解
2018/09/02 Javascript
Vuex mutitons和actions初使用详解
2019/03/04 Javascript
Python3.遍历某文件夹提取特定文件名的实例
2018/04/26 Python
Python WEB应用部署的实现方法
2019/01/02 Python
Python对象转换为json的方法步骤
2019/04/25 Python
使用python实现mqtt的发布和订阅
2019/05/05 Python
学python安装的软件总结
2019/10/12 Python
Python3 A*寻路算法实现方式
2019/12/24 Python
Python计算公交发车时间的完整代码
2020/02/12 Python
Pytest mark使用实例及原理解析
2020/02/22 Python
python数据库编程 ODBC方式实现通讯录
2020/03/27 Python
如何通过python计算圆周率PI
2020/11/11 Python
英国著名的药妆网站:Escentual
2016/07/29 全球购物
超市优秀员工事迹材料
2014/05/01 职场文书
新教师岗前培训方案
2014/06/05 职场文书
小学教师读书活动总结
2014/07/08 职场文书
十佳标兵事迹材料
2014/08/18 职场文书
技术支持岗位职责
2015/02/13 职场文书
实习单位鉴定意见
2015/06/04 职场文书
通讯稿范文
2015/07/22 职场文书
2019各种承诺书范文
2019/06/24 职场文书
CSS实现两列布局的N种方法
2021/08/02 HTML / CSS
CSS 实现Chrome标签栏的技巧
2021/08/04 HTML / CSS