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统计日志中每个IP出现次数的方法
Jul 06 Python
Python中字符串格式化str.format的详细介绍
Feb 17 Python
利用Python yagmail三行代码实现发送邮件
May 11 Python
python pandas中对Series数据进行轴向连接的实例
Jun 08 Python
PYQT5实现控制台显示功能的方法
Jun 25 Python
python程序运行进程、使用时间、剩余时间显示功能的实现代码
Jul 11 Python
如何爬取通过ajax加载数据的网站
Aug 15 Python
Python selenium页面加载慢超时的解决方案
Mar 18 Python
keras:model.compile损失函数的用法
Jul 01 Python
Python 字符串池化的前提
Jul 03 Python
pycharm激活方法到2099年(激活流程)
Sep 22 Python
详解MindSpore自定义模型损失函数
Jun 30 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
Apache2中实现多网站域名绑定的实现方法
2011/06/01 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十一)
2014/06/25 PHP
php可生成缩略图的文件上传类实例
2014/12/17 PHP
PIGCMS 如何关闭聊天机器人
2015/02/12 PHP
Lumen timezone 时区设置方法(慢了8个小时)
2018/01/20 PHP
PHP PDOStatement::errorCode讲解
2019/01/31 PHP
PHP文件类型检查及fileinfo模块安装使用详解
2019/05/09 PHP
javascript 用原型继承来实现对象系统
2010/03/22 Javascript
深入理解javascript中defer的作用
2013/12/11 Javascript
JavaScript判断变量是否为数组的方法(Array)
2016/02/24 Javascript
TypeScript Type Innference(类型判断)
2016/03/10 Javascript
onclick和onblur冲突问题的快速解决方法
2016/04/28 Javascript
[原创]JavaScript语法高亮插件highlight.js用法详解【附highlight.js本站下载】
2016/11/01 Javascript
JavaScript实现经典排序算法之冒泡排序
2016/12/28 Javascript
vue.js项目打包上线的图文教程
2017/11/16 Javascript
Javasript设计模式之链式调用详解
2018/04/26 Javascript
Javascript 之封装(Package)
2018/09/14 Javascript
vue组件中iview的modal组件爬坑问题之modal的显示与否应该是使用v-show
2019/04/12 Javascript
vue实现虚拟列表功能的代码
2020/07/28 Javascript
uniapp实现横向滚动选择日期
2020/10/21 Javascript
[03:05]《我与DAC》之xiao8:DAC与BG
2018/03/27 DOTA
Python批量更改文件名的实现方法
2017/10/29 Python
对python requests的content和text方法的区别详解
2018/10/11 Python
解决Python发送Http请求时,中文乱码的问题
2020/04/30 Python
JD Sports荷兰:英国领先的运动时尚零售商
2020/03/13 全球购物
座谈会主持词
2014/03/20 职场文书
促销活动总结
2014/04/28 职场文书
人力资源管理毕业求职信
2014/08/05 职场文书
临床医学生职业规划书范文
2014/10/25 职场文书
努力学习保证书
2015/02/26 职场文书
人事行政主管岗位职责
2015/04/09 职场文书
学习型家庭事迹材料(2016精选版)
2016/02/29 职场文书
假期读书倡议书3篇
2019/08/19 职场文书
Python实现socket库网络通信套接字
2021/06/04 Python
关于JavaScript 中 if包含逗号表达式
2021/11/27 Javascript
多台电脑共享文件怎么设置?多台电脑共享文件操作教程
2022/04/08 数码科技