ad

打开《Python入门与实战》_一步步学会Python_4.3 return 语句

admin 130 2023-10-25

【摘要】 本书摘自《Python入门与实战》一书中第1章,第1节,由王跃进主编。

4.3 return 语句

在函数体中使用 return 语句,可以使函数向调用语句返回值。语法格式如下:

return value

value: 返回值,可以是1个或多个用逗号(,)隔开的值。

打开《Python入门与实战》_一步步学会Python_4.3 return 语句

例子:

def func test(a,b):

c=a+b

d=a*b

e=a/b

f=a-b

return c,d,e,f

说明:

(1)在函数体中可以有多个 return 语句。

(2)无论 return 语句在哪个位置,只要当程序执行 return 语句后,将结束函数体中 后面代码的执行,释放函数中定义的所有变量,退出函数。

(3)当返回值为多个用逗号(,)隔开的值时, Python会把这些值先包装成元组再 返回,本质上还是返回一个值。

(4)当函数体中没有 return 语句时,默认返回 None。

4.4 递归函数

如果一个函数在内部又调用函数自己,这个函数就叫作递归函数。例子:

01 def func(n):

02 if n==1:

03 rtun1

04 else:

05 return n*func(n- 1)

这个函数的功能是求 n!(n 的阶乘)。我们以计算4!为例分析程序的执行逻辑。

func(4)

4 * func(3)

4*(3 *unc(2)

4*(3*(2*func(1)))

从规模上看,每递归一次相比上次递归都应有所减少,直到满足某个条件时就结 束递归调用。在本例中, n 等于1就是结束递归的条件。如果一个递归函数中没有结束 递归的条件,递归过程将一直继续下去,类似于死循环。

递归函数的优点是定义简单,逻辑清晰,非常适合解决具有递推关系的问题;缺 点是占用资源较多,且 Python 默认递归的最大深度为979,如果一个问题可能需要不 止979 层才能完成的话,那就可以考虑使用循环实现。理论上,所有的递归函数都可 以写成循环的方式,但循环的逻辑不如递归清晰。例子,把计算n!改用循环实现。

4.5 匿名函数

匿名函数就是没有名字的函数,使用关键字lambda定义,语法格式如下: result = lambda argl,arg2, … … :expression

argl,arg2,……叫作参数,都可以省略; expression, 实现函数具体功能的表达式, 且只有一个表达式,不能省略,表达式的值就是匿名函数的返回值。

调用方法:

result(arg1,arg2, … …)

例子:

>>>h=lambda a,b,c:a*b*c

>>>h(2,3,4)

尽管匿名函数具有代码简捷、易读的优点,但是毕竟只有一个表达式,只能实现

有限的功能。其实,匿名函数的主要用途是作为回调函数使用,已超出本书范围,不 举例说明。

4.6 变量的作用域

Python 中,所有的变量名会都按照定义时的位置被保存在不同的区域中,这些区 域叫作命名空间或者作用域。作用域分为4种类型:局部作用域 (Local)、 嵌套作用域 (Enclosing)、全局作用域 (Global)、 内置作用域 (Built-in)。这4种作用域简称LEGB。 本节我们重点介绍局部作用域和全局作用域。

在运行函数时,函数体中定义的所有变量将构成一个局部作用域,模块(一个 py 文件)中已经执行的赋值语句,将构成一个全局作用域。

在访问变量时,搜索路径遵循LEGB 顺序。这里的 LEGB 顺序是指从当前所处区 域开始依次搜索当前区域、上一级区域、 ……,级别的优先级从高到低依次为L、E、 G、B。 比如当前级别为 L, 则搜索顺序为 L、E、G、B; 如果当前级别为 E, 则搜索 顺序为 E、G、B。 一旦在某个作用域搜索到了变量则停止搜索,如果一直没有搜索到 变量则引发 “NameError”异常。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 18664393530@aliyun.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:《零基础Python 从入门到精通》_让你学得轻松_16.1.3 什么是IP地址?
下一篇:《基于Kubernetes的容器云平台实战》_了解最新技术前沿_1.4.2 Docker 原理
相关文章

 发表评论

暂时没有评论,来抢沙发吧~

×