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 条件判断的缩写方法
Sep 06 Python
Python爬取APP下载链接的实现方法
Sep 30 Python
Python+OpenCV让电脑帮你玩微信跳一跳
Jan 04 Python
python中的随机函数random的用法示例
Jan 27 Python
Python3使用SMTP发送带附件邮件
Jun 16 Python
python开发游戏的前期准备
May 05 Python
python文件写入write()的操作
May 14 Python
python 表格打印代码实例解析
Oct 12 Python
Python如何计算语句执行时间
Nov 22 Python
10个python爬虫入门基础代码实例 + 1个简单的python爬虫完整实例
Dec 16 Python
python 基于selenium实现鼠标拖拽功能
Dec 24 Python
详解Python爬虫爬取博客园问题列表所有的问题
Jan 18 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 array_map array_multisort 高效处理多维数组排序
2009/06/11 PHP
解析如何用php screw加密php源代码
2013/06/20 PHP
PHP中使用FFMPEG获取视频缩略图和视频总时长实例
2014/05/04 PHP
Laravel框架FormRequest中重写错误处理的方法
2019/02/18 PHP
PHP面向对象类型约束用法分析
2019/06/12 PHP
js几个验证函数代码
2010/03/25 Javascript
Jquery 返回json数据在IE浏览器中提示下载的问题
2014/05/18 Javascript
Javascript 函数parseInt()转换时出现bug问题
2014/05/20 Javascript
使用Raygun对Node.js应用进行错误处理的方法
2015/06/23 Javascript
JavaScript位置与大小(1)之正确理解和运用与尺寸大小相关的DOM属性
2015/12/26 Javascript
js 连续赋值的简单实现
2016/06/13 Javascript
jquery自动补齐功能插件flexselect用法示例
2016/08/06 Javascript
微信小程序tabbar不显示解决办法
2017/06/08 Javascript
详解基于vue-cli配置移动端自适应
2018/01/13 Javascript
JavaScript的Object.defineProperty详解
2018/07/09 Javascript
require.js 加载过程与使用方法介绍
2018/10/30 Javascript
vue中使用 pako.js 解密 gzip加密字符串的方法
2019/06/10 Javascript
VUE 直接通过JS 修改html对象的值导致没有更新到数据中解决方法分析
2019/12/02 Javascript
VUE中使用HTTP库Axios方法详解
2020/02/05 Javascript
Python实现扫描局域网活动ip(扫描在线电脑)
2015/04/28 Python
Django中使用极验Geetest滑动验证码过程解析
2019/07/31 Python
python+opencv实现车牌定位功能(实例代码)
2019/12/24 Python
django配置app中的静态文件步骤
2020/03/27 Python
VSCode配合pipenv搞定虚拟环境的实现方法
2020/05/17 Python
Python requests接口测试实现代码
2020/09/08 Python
Python 获取异常(Exception)信息的几种方法
2020/12/29 Python
KEEN美国官网:美国人气户外休闲鞋品牌
2021/03/09 全球购物
房地产营销策划方案
2014/02/08 职场文书
犯错检讨书
2014/02/21 职场文书
放弃继承权公证书
2015/01/23 职场文书
人口与计划生育责任书
2015/05/09 职场文书
2019下半年英语教师的教学工作计划(3篇)
2019/09/25 职场文书
pytorch中的numel函数用法说明
2021/05/13 Python
Python+Appium自动化测试的实战
2021/06/30 Python
python flappy bird小游戏分步实现流程
2022/02/15 Python
微信小程序中使用vant框架的具体步骤
2022/02/18 Javascript