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-httpx的使用及说明

    python-httpx的使用及说明

    这篇文章主要介绍了python-httpx的使用及说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • Python进行Restful API开发实例详解

    Python进行Restful API开发实例详解

    这篇文章主要介绍了Python进行Restful API开发实例,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • 基于Python-Pycharm实现的猴子摘桃小游戏(源代码)

    基于Python-Pycharm实现的猴子摘桃小游戏(源代码)

    这篇文章主要介绍了基于Python-Pycharm实现的猴子摘桃小游戏,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • Pycharm学习教程(5) Python快捷键相关设置

    Pycharm学习教程(5) Python快捷键相关设置

    这篇文章主要为大家详细介绍了最全的Pycharm学习教程第五篇,Python快捷键相关设置,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • Python数据标准化的实例分析

    Python数据标准化的实例分析

    在本篇文章里小编给大家整理了关于Python数据标准化的实例内容,有需要的朋友们可以测试学习下。
    2021-08-08
  • pandas中DataFrame数据合并连接(merge、join、concat)

    pandas中DataFrame数据合并连接(merge、join、concat)

    这篇文章主要给大家介绍了关于pandas中DataFrame 数据合并连接(merge、join、concat)的相关资料,文中介绍的非常详细,需要的朋友可以参考下
    2021-05-05
  • python并发场景锁的使用方法

    python并发场景锁的使用方法

    这篇文章主要介绍了python并发场景锁的使用方法,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-07-07
  • python去除字符串中的空格、特殊字符和指定字符的三种方法

    python去除字符串中的空格、特殊字符和指定字符的三种方法

    本文主要介绍了python去除字符串中的空格、特殊字符和指定字符的三种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • python字符串定义的三种方式

    python字符串定义的三种方式

    在Python中,字符串是一个非常重要的数据类型,可用来存储和操作文本数据,本文主要介绍了python字符串定义的三种方式,具有一定的参考价值,感兴趣的可以了解一下
    2023-05-05
  • Python实现html转换为pdf报告(生成pdf报告)功能示例

    Python实现html转换为pdf报告(生成pdf报告)功能示例

    这篇文章主要介绍了Python实现html转换为pdf报告功能,结合实例形式分析了Python使用pdfkit实现HTML转换为PDF的相关操作技巧与注意事项,需要的朋友可以参考下
    2019-05-05

最新评论