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 httplib模块使用实例
Apr 11 Python
Python求导数的方法
May 09 Python
pandas Dataframe行列读取的实例
Jun 08 Python
用python实现k近邻算法的示例代码
Sep 06 Python
Python的互斥锁与信号量详解
Sep 12 Python
pycharm sciview的图片另存为操作
Jun 01 Python
python实现斗地主分牌洗牌
Jun 22 Python
keras 自定义loss层+接受输入实例
Jun 28 Python
python正则表达式的懒惰匹配和贪婪匹配说明
Jul 13 Python
pycharm 的Structure界面设置操作
Feb 05 Python
AI:如何训练机器学习的模型
Apr 16 Python
python3 hdf5文件 遍历代码
May 19 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
咖啡豆的最常见发酵处理方法,详细了解一下
2021/03/03 冲泡冲煮
php获取指定(访客)IP所有信息(地址、邮政编码、国家、经纬度等)的方法
2015/07/06 PHP
PHP实现根据时间戳获取周几的方法
2016/02/26 PHP
PHP autoload使用方法及步骤详解
2020/09/05 PHP
PHP解密支付宝小程序的加密数据、手机号的示例代码
2021/02/26 PHP
JSON扫盲帖 JSON.as类教程
2009/02/16 Javascript
JavaScript 学习笔记(六)
2009/12/31 Javascript
多次注册事件会导致一个事件被触发多次的解决方法
2013/08/12 Javascript
JavaScript获取网页中第一个链接ID的方法
2015/04/03 Javascript
JavaScript中的bold()方法使用详解
2015/06/08 Javascript
js窗口关闭提示信息(兼容IE和firefox)
2015/10/23 Javascript
再次谈论Javascript中的this
2016/06/23 Javascript
jQuery实现背景滑动菜单
2016/12/02 Javascript
angular中使用Socket.io实例代码
2017/06/03 Javascript
vue 循环加载数据并获取第一条记录的方法
2018/09/26 Javascript
[02:48]DOTA2英雄基础教程 拉席克
2013/12/12 DOTA
详解Python实现按任意键继续/退出的功能
2016/08/19 Python
python去掉行尾的换行符方法
2017/01/04 Python
使用Python获取并处理IP的类型及格式方法
2018/11/01 Python
Python模块的加载讲解
2019/01/15 Python
深度辨析Python的eval()与exec()的方法
2019/03/26 Python
python批量修改图片尺寸,并保存指定路径的实现方法
2019/07/04 Python
html5 的a标签 Href 拨电话的写法
2013/11/04 HTML / CSS
Julep官网:美容产品和指甲油
2017/02/25 全球购物
英国安全产品购物网站:The Safe Shop
2017/03/20 全球购物
意大利比基尼品牌:MISS BIKINI
2019/11/02 全球购物
优秀老员工获奖感言
2014/02/15 职场文书
感恩节活动策划方案
2014/05/16 职场文书
广播节目策划方案
2014/05/23 职场文书
2013年最新自荐信范文
2014/06/23 职场文书
幼儿园社区活动总结
2014/07/07 职场文书
简单租房协议书
2014/10/21 职场文书
廉政承诺书
2015/01/19 职场文书
2016年公共机构节能宣传周活动总结
2016/04/05 职场文书
2019优秀干部竞聘演讲稿范文!
2019/07/02 职场文书
2019年描写人生经典诗句大全
2019/07/08 职场文书