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中操作字符串之replace()方法的使用
May 19 Python
python基于multiprocessing的多进程创建方法
Jun 04 Python
python中安装模块包版本冲突问题的解决
May 02 Python
Django中利用filter与simple_tag为前端自定义函数的实现方法
Jun 15 Python
python 通过字符串调用对象属性或方法的实例讲解
Apr 21 Python
python实现按长宽比缩放图片
Jun 07 Python
Python实现快速计算词频功能示例
Jun 25 Python
通过shell+python实现企业微信预警
Mar 07 Python
django API 中接口的互相调用实例
Apr 01 Python
520使用Python实现“我爱你”表白
May 20 Python
关于keras中keras.layers.merge的用法说明
May 23 Python
详解Python遍历列表时删除元素的正确做法
Jan 07 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购物网站支付paypal使用方法
2010/11/28 PHP
理解php Hash函数,增强密码安全
2011/02/25 PHP
解析PHP的session过期设置
2013/06/29 PHP
简单了解将WordPress中的工具栏移到底部的小技巧
2015/12/31 PHP
CI框架(CodeIgniter)实现的数据库增删改查操作总结
2018/05/23 PHP
PHP进阶学习之类的自动加载机制原理分析
2019/06/18 PHP
js有关元素内容操作小结
2011/12/20 Javascript
js将字符串中的每一个单词的首字母变为大写其余均为小写
2017/01/05 Javascript
easyui 中的datagrid跨页勾选问题的实现方法
2017/01/18 Javascript
angularJS之$http:与服务器交互示例
2017/03/17 Javascript
AngularJS入门教程二:在路由中传递参数的方法分析
2017/05/27 Javascript
jsonp跨域请求详解
2017/07/13 Javascript
vuejs数据超出单行显示更多,点击展开剩余数据实例
2019/05/05 Javascript
vue数据响应式原理知识点总结
2020/02/16 Javascript
JavaScript canvas绘制圆弧与圆形
2020/02/18 Javascript
Python实现把回车符\r\n转换成\n
2015/04/23 Python
Python实现PS滤镜的万花筒效果示例
2018/01/23 Python
python计算两个地址之间的距离方法
2018/06/09 Python
Selenium(Python web测试工具)基本用法详解
2018/08/10 Python
python处理DICOM并计算三维模型体积
2019/02/26 Python
Python实现九宫格式的朋友圈功能内附“马云”朋友圈
2019/05/07 Python
Pandas之DataFrame对象的列和索引之间的转化
2019/06/25 Python
python语言time库和datetime库基本使用详解
2020/12/25 Python
python实现简单文件读写函数
2021/02/25 Python
LivingSocial英国:英国本地优惠
2019/02/22 全球购物
美国在线购物频道:Shop LC
2019/04/21 全球购物
Shopbop中文官网:美国亚马逊旗下时尚购物网站
2020/12/15 全球购物
vue路由实现登录拦截
2021/03/24 Vue.js
安全员岗位职责
2013/11/11 职场文书
《伯牙绝弦》教学反思
2014/03/02 职场文书
GMP办公室主任岗位职责
2014/03/14 职场文书
小区物业门卫岗位职责
2014/04/10 职场文书
应用外语系自荐信
2014/06/26 职场文书
员工三分钟演讲稿
2014/08/19 职场文书
2016年教师节贺卡寄语
2015/12/04 职场文书
小学体育跳绳课教学反思
2016/02/16 职场文书