day03

本文深入探讨了Python中变量的LEGB作用域规则,包括局部、外部嵌套、模块级和内建模块级作用域,并详细讲解了递归的概念、特点及应用,如求解斐波那契数列。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天补充一点上一篇的内容
变量的作用域:LEGB

L代表局部作用域
E代表外部嵌套作用域
G代表模块级作用域
B代表内建模块级作用域

局部作用域就是函数内部的变量,只能在函数内部使用,外部嵌套作用域代表一个函数嵌套另一个函数,这在外层函数的变量,这种只能在外层函数和被包含的那个函数内使用,模块级作用域是指我们创建了那个xxx.py文件内的作用域,相当于在这个文件中的函数都可以使用的,内建模块作用域是指整个python语言,只要是用python语言写的函数都可以用。程序在执行函数式,使用变量的优先级就是先找局部作用域内的变量,找不到的话就去找外部嵌套函数内的变量,还是找不到就去找整个模块内的变量,还是找不到的话,就去找内建模块中的变量,如果还是找不到,那程序也没办法了,只能给你报个错了。
哦,还要,不能先创建一个局部的变量,在声明这个变量为全局变量,这种是不符合逻辑的,还有,全局变量的名字也不能和形参名字重复,如果重复,程序就不知道比你到底要用哪个,所以你一定要给程序一个明确的指示才行,程序是不会察言观色滴。

接下来讲一个很重要的门槛级知识点,递归。
先讲一个故事:程序员讲故事,听着就有点天方夜谭,不过我确实要讲一个逻辑故事,嗯,很符合理工科毕业的学生。这个故事是:从前有座山,山里有座庙,庙里有个老和尚,这个老和尚在给一个小和尚讲故事,故事是:从前有座山,山里有座庙,庙里有个老和尚,这个老和尚在给一个小和尚讲故事,故事是:从前有座山,山里有座庙,庙里有个老和尚,这个老和尚在给一个小和尚讲故事,故事是:从前有座山,山里有座庙,庙里有个老和尚,这个老和尚在给一个小和尚讲故事,故事是:从前有座山,山里有座庙,庙里有个老和尚,这个老和尚在给一个小和尚讲故事,故事是:。。。。。。。。
晕了没?我就问你是不是这个故事可以讲到天荒地老,海枯石烂?
其实这就是递归的逻辑,递归也可以说是一种算法,是一种程序直接或者间接调用自身的一种说法。
递归的特点:
1.直接或者间接调用自身
2.必须有明确的结束条件,这个成为递归出口
3.递归的效率其实比较低
4.当递归的层数过多,就像上面那个故事,层数过多时,会发生不可预期的错误
下面些一个简单的代码来展示下递归是什么样子的:

def r(i):
	print(i)
	if i/2>1:
		re=r(i/2)
		print(re)
	print(i)
	return i

这就是递归,r函数内部又调用了r函数自身,当我们在外部调用r函数并给他传递一个参数时,递归就产生了,那么递归什么时候结束?当r/2<1的时候就结束了。递归结束会从最里面一层开始,一层一层的结束,就像迷宫一样,一层一层的找到每一层的出口出来。直到退出程序的最外面一层。然后程序就结束了。
递归可以做很多事,比如求去斐波那契数列,斐波那契数列有很多种方法求得,用递归总感觉要高级一点,装个逼总是可以的。
由于递归的层数过多会产生不可预期的错误,所以我们在使用递归时,是有要求的:
1.递归的规模必须逐渐减小
2.递归的相邻层数之间是有关系的
3.必须要有结束的条件,就是要给程序一个出口
必须说一下:无条件(无出口)的递归就是一个死循环,会让你的计算机系统崩溃的,而且每台计算机允许的递归最大层数都有区别,本人的计算机只允许我最大递归980层左右,之后就会自动给我结束递归。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值