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中xrange和range的区别
May 13 Python
Python使用email模块对邮件进行编码和解码的实例教程
Jul 01 Python
Python IDLE入门简介
Dec 08 Python
对python的文件内注释 help注释方法
May 23 Python
python url 参数修改方法
Dec 26 Python
python 通过麦克风录音 生成wav文件的方法
Jan 09 Python
Django REST framework 分页的实现代码
Jun 19 Python
python jenkins 打包构建代码的示例代码
Nov 29 Python
Django choices下拉列表绑定实例
Mar 13 Python
使用matlab 判断两个矩阵是否相等的实例
May 11 Python
python3用PyPDF2解析pdf文件,用正则匹配数据方式
May 12 Python
python 如何利用argparse解析命令行参数
Sep 11 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中截取字符串支持utf-8
2007/01/18 PHP
PHP5.3以上版本安装ZendOptimizer扩展
2015/03/27 PHP
php实现贪吃蛇小游戏
2016/07/26 PHP
thinkPHP数据库增删改查操作方法实例详解
2016/12/06 PHP
tp5(thinkPHP5)框架数据库Db增删改查常见操作总结
2019/01/10 PHP
不错的asp中显示新闻的功能
2006/10/13 Javascript
十分钟打造AutoComplete自动完成效果代码
2009/12/26 Javascript
Javascript load Page,load css,load js实现代码
2010/03/31 Javascript
js中的replace方法使用介绍
2013/10/28 Javascript
Bootstrap Table使用方法解析
2016/10/19 Javascript
ES6新特性一: let和const命令详解
2017/04/20 Javascript
微信小程序 es6-promise.js封装请求与处理异步进程
2017/06/12 Javascript
vue-cli3 从搭建到优化的详细步骤
2019/01/20 Javascript
Vue Cli 3项目使用融云IM实现聊天功能的方法
2019/04/19 Javascript
微信小程序项目总结之记账小程序功能的实现(包括后端)
2019/08/20 Javascript
JS实现旋转木马轮播图
2020/01/01 Javascript
VUE使用axios调用后台API接口的方法
2020/08/03 Javascript
[01:14]DOTA2亚洲邀请赛小组赛赛前花絮
2017/03/27 DOTA
[47:10]完美世界DOTA2联赛PWL S3 LBZS vs Rebirth 第二场 12.16
2020/12/18 DOTA
python处理json数据中的中文
2014/03/06 Python
python中requests库session对象的妙用详解
2017/10/30 Python
Python中文件的读取和写入操作
2018/04/27 Python
Sanic框架流式传输操作示例
2018/07/18 Python
python3实现爬取淘宝美食代码分享
2018/09/23 Python
opencv实现图片模糊和锐化操作
2018/11/19 Python
Python模拟登录之滑块验证码的破解(实例代码)
2019/11/18 Python
django 实现手动存储文件到model的FileField
2020/03/30 Python
python3 配置logging日志类的操作
2020/04/08 Python
python rsa-oaep加密的示例代码
2020/09/23 Python
文员个人的求职信范文
2013/09/26 职场文书
金融学专科生自我鉴定
2014/02/21 职场文书
大二法英学生职业生涯规划范文
2014/02/27 职场文书
机房搬迁方案
2014/05/01 职场文书
2014年小学教导处工作总结
2014/12/19 职场文书
化验室岗位职责
2015/02/14 职场文书
k8s部署redis cluster集群的实现
2021/06/24 Redis