5-递归、变量

递归(Recursion)

我们知道一个函数可以调用其他函数。函数甚至可能会调用自身。这些类型的构造称为递归函数。

【calc_factorial()是一个递归函数,它调用了自己。】

递归历程:

【当数字减少到1时,递归结束。这称为基本条件。】

每个递归函数必须具有停止递归的基本条件,否则该函数将无限调用自身。

Python解释器限制了递归的深度,以帮助避免无限递归,从而导致堆栈溢出。默认情况下,最大递归深度为 1000。如果超出限制,则结果为RecursionError。

匿名函数(Lambda)

匿名函数是没有定义名称的函数。匿名函数也称为lambda函数

Lambda函数可以具有任意数量的参数,但只能有一个表达式。表达式被求值并返回。Lambda函数可在需要函数对象的任何地方使用。

示例:

【在上面的程序中,lambda x: x * 2是lambda函数。这里x是参数,x * 2是求值和返回的表达式。】

当我们临时需要匿名函数时,我们使用lambda函数。

lambda与filter()一起使用

在Python函数中filter()接受一个函数一个列表作为参数。

使用列表中的所有项调用该函数,并返回一个新列表,其中包含函数计算结果为True的项

【从列表中获取偶数的示例】

lambda与map()一起使用

在Python中的map()函数接受一个函数一个列表

使用列表中的所有项调用该函数,并返回一个新列表,其中包含该函数为每个项返回的项

【把所有项都翻倍】

变量

全局变量

在Python中,在函数外部或全局范围内声明的变量称为全局变量。这意味着可以在函数内部或外部访问全局变量。

【x为一个全局变量】

如果要在函数内更改x的值,会报错,因为Python将函数内x视为一个局部变量,而x没有在foo()中定义。为了实现这个功能,我们需要在外部使用全局关键字global来修饰x,这样在函数内修改x就可以直接影响到外部的x而不报错了

局部变量

在函数体内或局部范围内声明的变量称为局部变量。

【输出显示一个错误,因为我们试图在全局范围内访问一个局部变量y,而局部变量只在foo()或局部范围内工作。】

全局和局部变量

我们将展示如何在同一代码中使用全局变量和局部变量。

【我们将x声明为全局变量,将y声明为foo()中的局部变量。然后,我们使用乘法运算符*来修改全局变量x,并同时输出x和y。】

有相同名称的全局、局部变量

【注意作用域即可,优先局部变量】

非局部变量

非局部变量用于未定义局部作用域的嵌套函数。这意味着该变量既不能在局部范围内,也不能在全局范围内。

使用nonlocal关键字创建非局部变量

【当使用nonlocal声明变量 x 时,就会往上最近一层局部作用域寻找局部变量 x 】

往上最近一层局部作用域寻找局部变量 x 】

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

且乐一杯酒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值