python递归调用中的坑:打印有值, 返回却None

 更新时间:2020年03月16日 10:29:45   作者:mengfill  
这篇文章主要介绍了python递归调用中的坑:打印有值, 返回却None,本文通过问题分析给出解决方法,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

今天给大家分享小编遇到的一个坑有关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 list格式数据excel导出方法

    python list格式数据excel导出方法

    今天小编就为大家分享一篇python list格式数据excel导出方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • flask框架视图函数用法示例

    flask框架视图函数用法示例

    这篇文章主要介绍了flask框架视图函数用法,结合实例形式分析了flask框架视图函数常见配置与使用技巧,需要的朋友可以参考下
    2018-07-07
  • python实时获取外部程序输出结果的方法

    python实时获取外部程序输出结果的方法

    今天小编就为大家分享一篇python实时获取外部程序输出结果的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • python数据分析之DateFrame数据排序和排名方式

    python数据分析之DateFrame数据排序和排名方式

    这篇文章主要介绍了python数据分析之DateFrame数据排序和排名方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • Python使用matplotlib和pandas实现的画图操作【经典示例】

    Python使用matplotlib和pandas实现的画图操作【经典示例】

    这篇文章主要介绍了Python使用matplotlib和pandas实现的画图操作,结合实例形式分析了Python基于matplotlib和pandas的数值运算与图形显示操作相关实现技巧,并对部分代码的图形显示进行了显示效果测试,需要的朋友可以参考下
    2018-06-06
  • python分段函数的实现示例

    python分段函数的实现示例

    分段函数是一种数学函数,它将定义域分成若干个区间,每个区间对应一个函数,本文主要介绍了python分段函数的实现示例,具有一定的参考价值,感兴趣的可以了解一下
    2023-12-12
  • Pandas如何提取非空行值

    Pandas如何提取非空行值

    这篇文章主要介绍了Pandas如何提取非空行值问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-09-09
  • django 2.0更新的10条注意事项总结

    django 2.0更新的10条注意事项总结

    Django 是 Python Web 开发最常用的框架之一,跟进它的最新变化绝对是必须的。下面这篇文章主要给大家介绍了关于django 2.0更新的10条注意事项,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
    2018-01-01
  • Python图像阈值化处理及算法比对实例解析

    Python图像阈值化处理及算法比对实例解析

    这篇文章主要介绍了Python图像阈值化处理及算法比对实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • python生成ppt的方法

    python生成ppt的方法

    这篇文章主要为大家详细介绍了python生成ppt的方法,通过python生成ppt文件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06

最新评论