如果其他模型不响应-英雄云拓展知识分享
130
2023-10-25
【摘要】 本书摘自《Python入门与实战》一书中第1章,第1节,由王跃进主编。
4.3 return 语句
在函数体中使用 return 语句,可以使函数向调用语句返回值。语法格式如下:
return value
value: 返回值,可以是1个或多个用逗号(,)隔开的值。
例子:
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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~