• 返回值

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学习——函数返回值及递归的更多相关文章

  1. Python的函数, 返回值, 参数

    1. 函数 函数是对功能的封装 语法: def 函数名(形参): 函数体(代码块,return) 调用: 函数名(实参) 2. 返回值 return:在函数执行的时候, 遇到return 就直接返回, ...

  2. 【python】函数返回值

  3. python学习之函数返回值

    python中函数返回值的方式有2种: 1.return语句 说明:return语句执行完后,函数后续的代码将不会被执行 2.yield语句 说明:yield语句返回的是一个迭代器对象,可以通过nex ...

  4. Python return语句 函数返回值

    return语句是从python 函数返回一个值,在讲到定义函数的时候有讲过,每个函数都要有一个返回值.Python中的return语句有什么作用,今天就来仔细的讲解一下. python 函数返回值 ...

  5. Python3_函数参数传递、可变与不可变对象、变量作用域、函数返回值

    参数传递: 在 python 中,类型属于对象,变量是没有类型的:(变量都仅仅是一个对象的引用,没有类型之分)a=[1,2,3] a="Runoob" 以上代码中,[1,2,3] ...

  6. Python第七天 函数 函数参数 函数里的变量 函数返回值 多类型传值 函数递归调用 匿名函数 内置函数

    Python第七天   函数  函数参数   函数里的变量   函数返回值  多类型传值     函数递归调用   匿名函数   内置函数 目录 Pycharm使用技巧(转载) Python第一天   ...

  7. Python学习教程(learning Python)--2.3.4Python函数返回值

    本节讨论Python函数返回值问题. Python和C语言一样,也可以在函数结束时返回一个值.但在定义自己的Python函数时,是不需要指定返回值数据类型的,这和Python不关心变量的数据类型是一致 ...

  8. Python 函数返回值、作用域

    函数返回值 多条return语句: def guess(x): if x > 3: return "> 3" else: return "<= 3&qu ...

  9. python使用threading获取线程函数返回值的实现方法

    python使用threading获取线程函数返回值的实现方法 这篇文章主要介绍了python使用threading获取线程函数返回值的实现方法,需要的朋友可以参考下 threading用于提供线程相 ...

随机推荐

  1. oracle11g忘记管理员密码

    oracle的sys和system密码是我们经常忘记的,忘记之后我们可以通过sqlplus来修改重置. 首先打开sqlplus:在运行处可直接输入打开 进入窗口后,首先输入 sqlplus/as sy ...

  2. iOS内存管理布局及管理方案-理论篇

    苹果设备备受欢迎的背后离不开iOS优秀的内存管理机制,那iOS的内存布局及管理方案是怎样的呢?我们一起研究下. 内存管理分为五大块 栈区(stack):线性结构,内存连续,系统自己管理内存,程序运行记 ...

  3. argv从控制台输入多个参数

    arg多个参数: #!/usr/bin/env python3 import sys #控制台要输入的两个参数格式为:python script_name.py 参数1 参数2 input_file= ...

  4. 吴裕雄--天生自然TensorFlow2教程:张量限幅

    import tensorflow as tf a = tf.range(10) a # a中小于2的元素值为2 tf.maximum(a, 2) # a中大于8的元素值为8 tf.minimum(a ...

  5. Android自定义View——QQ音乐中圆形旋转碟子

    1.在onMeasure中测量整个View的宽和高后,设置宽高 2.获取我们res的图片资源后,在ondraw方法中进行绘制圆形图片 3.通过Handler发送Runnable在主线程中更新UI,达到 ...

  6. (递归)P1025 数的划分

    题解: #include<iostream>using namespace std;int ret=0,m_n;void p(int n,double k,int j){ if(k==1) ...

  7. 18 12 06 sql 的 基本语句 查询 条件查询 逻辑运算符 模糊查询 范围查询 排序 聚合函数 分组 分页 连接查询 自关联 子查询

    -- 数据的准备 -- 创建一个数据库 create database python_test charset=utf8; -- 使用一个数据库 use python_test; -- 显示使用的当前 ...

  8. kali由wifi握手包破解密码&&gnuplot使用

    1.kali密码破解(WiFi握手包) cap包密码破解,aircrack-ng wifi.cap -w psw.txt(你的字典文件) 2.画图工具gnuplot 1.txt中保存的是坐标,形式为: ...

  9. SQL基础教程(第2版)第4章 数据更新:4-3 数据的更新(UPDATE)

    第4章 数据更新:4-3 数据的更新(UPDATE) ● 使用UPDATE语句可以更改(更新)表中的数据.● 更新部分数据行时可以使用WHERE来指定更新对象的条件.通过WHERE子句指定更新对象的U ...

  10. ZooKeeper解决的问题

    1.解决分布式单点问题 https://www.jianshu.com/p/08b76bd7a634 2.实现分布式环境数据的一致性.访问ZooKeeper树结构时,不同节点返回的数据是一致,不会引起 ...