python学习——函数返回值及递归
- 返回值
return语句是从python 函数返回一个值,在讲到定义函数的时候有讲过,每个函数都要有一个返回值。Python中的return语句有什么作用,今天小编就依目前所了解的讲解一下。python 函数返回值 return,函数中一定要有return返回值才是完整的函数。如果你没有python 定义函数的返回值,那么会得到一个结果是None对象,而None表示没有任何值,不起作用。这也说明参数与返回值共同组成了函数模块与外界沟通的桥梁。当然返回的数据也可以是多个(其实只是将不同数据放在了一个元组或序列中而已),返回的对象也可以是多种类型(list,tulple,dict,整数,函数...)。
例如:
def fun1(a1,a2):
a=a1*2
b=a2+a1
return [a,b]
当调用函数为x,y=fun1(2,3)时,得到的结果为:
>>>print(x,y)
4,5
其实返回的只是一个元组,在语法上元组是可以省略圆括号的。
- 递归函数
上面讲返回值也讲到,函数是可以返回函数的。那么所谓的递归其实就是函数调用自身。当然递归也可以理解成自身在不断地循环,之所以引用递归是因为在一些事上,它相对与循环语句更简明,高效。例如求一个数的阶乘,使用递归就可以达到更好的效果。
例如:
def fun1(n):
if n==1:
return 1
return n*fun1(n-1)
当我们n取5时,其运算过程是这样的:
>>>fun1(5)
>>>5*fun1(4)
>>>5*(4*fun1(3))
>>>5*(4*(3*fun1(2)))
>>>5*(4*(3*(2*fun1(1))))
>>>5*(4*(3*(2*1)))
>>>5*(4*(3*2))
>>>5*(4*6)
>>>5*24
>>>120
- 递归函数的缺陷
函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。所以并不是所有循环都能用递归来实现,有时为了控制循环次数,我们还可以设置递归深度。
import sys
sys.setaddlimit(100)
#这是最多循环一百次的意思
- 解决方法
解决递归调用栈溢出的方法是通过尾递归优化,事实上尾递归和循环的效果是一样的,所以,把循环看成是一种特殊的尾递归函数也是可以的。尾递归是指,在函数返回的时候,调用自身本身,并且,return语句不能包含表达式。这样,编译器或者解释器就可以把尾递归做优化,使递归本身无论调用多少次,都只占用一个栈帧,不会出现栈溢出的情况。
python学习——函数返回值及递归的更多相关文章
- Python的函数, 返回值, 参数
1. 函数 函数是对功能的封装 语法: def 函数名(形参): 函数体(代码块,return) 调用: 函数名(实参) 2. 返回值 return:在函数执行的时候, 遇到return 就直接返回, ...
- 【python】函数返回值
- python学习之函数返回值
python中函数返回值的方式有2种: 1.return语句 说明:return语句执行完后,函数后续的代码将不会被执行 2.yield语句 说明:yield语句返回的是一个迭代器对象,可以通过nex ...
- Python return语句 函数返回值
return语句是从python 函数返回一个值,在讲到定义函数的时候有讲过,每个函数都要有一个返回值.Python中的return语句有什么作用,今天就来仔细的讲解一下. python 函数返回值 ...
- Python3_函数参数传递、可变与不可变对象、变量作用域、函数返回值
参数传递: 在 python 中,类型属于对象,变量是没有类型的:(变量都仅仅是一个对象的引用,没有类型之分)a=[1,2,3] a="Runoob" 以上代码中,[1,2,3] ...
- Python第七天 函数 函数参数 函数里的变量 函数返回值 多类型传值 函数递归调用 匿名函数 内置函数
Python第七天 函数 函数参数 函数里的变量 函数返回值 多类型传值 函数递归调用 匿名函数 内置函数 目录 Pycharm使用技巧(转载) Python第一天 ...
- Python学习教程(learning Python)--2.3.4Python函数返回值
本节讨论Python函数返回值问题. Python和C语言一样,也可以在函数结束时返回一个值.但在定义自己的Python函数时,是不需要指定返回值数据类型的,这和Python不关心变量的数据类型是一致 ...
- Python 函数返回值、作用域
函数返回值 多条return语句: def guess(x): if x > 3: return "> 3" else: return "<= 3&qu ...
- python使用threading获取线程函数返回值的实现方法
python使用threading获取线程函数返回值的实现方法 这篇文章主要介绍了python使用threading获取线程函数返回值的实现方法,需要的朋友可以参考下 threading用于提供线程相 ...
随机推荐
- 简单看看LongAccumulator
上篇博客我们看了AtomicLong和LongAdder的由来,但是有的时候我们想一下,LongAdder这个类也有点局限性,因为只能是每一次都+1,那有没有办法每次+2呢?或者每次乘以2?说得更抽象 ...
- aced六类股票问题
一.状态转移框架 在我们刷题的过程中,很多同学肯定会遇到股票问题这类题目,股票问题有很多种类型,大多数同学都知道要用动态规划去做,但是往往写不对状态转移方程,我刚接触这类问题时也是一头雾水,但是掌握了 ...
- 【SpringBoot】SpringBoot Web开发(八)
本周介绍SpringBoot项目Web开发的项目内容,及常用的CRUD操作,阅读本章前请阅读[SpringBoot]SpringBoot与Thymeleaf模版(六)的相关内容 Web开发 项目搭建 ...
- 基于图灵api的Python机器人
一.注册图灵机器人 先注册并登录图灵机器人官网: 点击创建机器人 复制机器人的key 二.搭建Python机器人 Python版本:3.6 注意替换第三行代码的apikey import reques ...
- 如何用Python统计《论语》中每个字的出现次数?10行代码搞定--用计算机学国学
编者按: 上学时听过山师王志民先生一场讲座,说每个人不论干什么,都应该学习国学(原谅我学了计算机专业)!王先生讲得很是吸引我这个工科男,可能比我的后来的那些同学听课还要认真些,当然一方面是兴趣.一方面 ...
- 应用层上的协议HTTP
HTTP http://www.runoob.com/http/http-tutorial.html https://www.cnblogs.com/houfee/articles/9161847.h ...
- F5双机冗余配置
转自:https://blog.51cto.com/dynamic/769888本文作者:CTO_LiuJinFeng 1. 配置管理接口-IP 前面文章中没提到如何配置IP,现在开始来配置. 登录- ...
- 吴裕雄--天生自然 JAVASCRIPT开发学习: 变量提升
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- 安装eclipse步骤以及配置jdk
1.官网下载eclipse 2.下载jdk并且安装,记住自己安装路径 3.配置jdk环境变量 在高级系统设置里面配置 新建: 用户变量:“变量名”:JAVA_HOME “变量值”:C:\Program ...
- tensorflow 损失计算--MSN
1.tf.losses.mean_squared_error函数 tf.losses.mean_squared_error( labels, predictions, weights=1.0, sco ...