新手学Python避坑,学习效率狂飙! 五、Python循环中的变量作用域

在 Python 里,变量的作用域指的是变量可被访问的代码范围。循环里的变量作用域在 Python 中是个常见且关键的概念。

一、变量作用域

Python 里的变量作用域主要有局部作用域和全局作用域。

1、全局作用域:在函数、类或循环外部定义的变量拥有全局作用域,能够在代码的任何地方被访问。

2、局部作用域:在函数、类或循环内部定义的变量具备局部作用域,仅能在其定义的代码块内被访问。

二、循环中的变量作用域

在 Python 中,for 和 while 循环并不会创建新的作用域。也就是说,在循环里定义的变量在循环结束之后依旧可以被访问。

下面是一些示例:

python

# 全局作用域中的变量
global_variable = 10

# for 循环
for i in range(5):
    print(i)
# 循环结束后,变量 i 仍然可以访问
print("循环结束后,i 的值为:", i)

# while 循环
j = 0
while j < 3:
    local_variable = j * 2
    print(local_variable)
    j += 1
# 循环结束后,变量 local_variable 仍然可以访问
print("循环结束后,local_variable 的值为:", local_variable)

在上述代码中,i 和 local_variable 分别在 for 循环和 while 循环里定义,但在循环结束之后仍能被访问。

三、避坑分享及示例

1. 循环变量被意外覆盖

当在循环内部重新定义与外部变量同名的变量时,外部变量的值会被覆盖。

python

x = 10
for x in range(5):
    print(x)
# 循环结束后,x 的值被覆盖
print("循环结束后,x 的值为:", x)

为避免这种情况,要确保循环变量和外部变量使用不同的名称。

2. 闭包问题

在循环中创建闭包时,闭包会捕获循环变量的最终值,而非循环时的值。

python

functions = []
for i in range(3):
    def func():
        return i
    functions.append(func)

# 调用这些函数
for f in functions:
    print(f())

在这个例子里,每个闭包都会捕获 i 的最终值 2。为避免这种情况,可以使用默认参数来绑定循环变量的值。

python

functions = []
for i in range(3):
    def func(x=i):
        return x
    functions.append(func)

# 调用这些函数
for f in functions:
    print(f())

通过使用默认参数 x=i,每个闭包都会绑定 i 在循环时的值。

资料整理不易,请多多点赞,收藏,加关注!

相关文章

python变量作用域详解

python变量的一生包括变量的申明,引用和修改及消亡,此文主要关注变量的引用和修改。变量从作用域来分主要包括全局变量,嵌套(外部)变量,局部变量。一,全局变量,一般定义在模块顶部,对整个模块都生效,...

看一看,Python这四种作用域你都知道吗?

点赞、收藏、加关注,下次找我不迷路一、啥是作用域?先打个比方比如说,你在自己的卧室(相当于一个小空间)里放了一本书,这本书在卧室里随便你怎么看,这就是这本书在卧室这个 "作用域" 内...

一文读懂Python中的全局变量局部变量和作用域

通常小白在写代码时,只知道引用变量来应对一些基础的编码问题,当面试官问及局部变量和全局变量的具体细节时,就会一脸懵逼,傻傻分不清楚!其实想要彻底了解局部变量和全局变量的关系,本质是大家需要明白何为作用...

新手易犯错的地方Python作用域

好多新手一开始比较容易犯错的地方理解作用域对于编写高效的python代码十分重要现在就讲下四种作用域,按照从内到外的顺序:局部作用域(Local) - 在函数内部定义的变量嵌套作用域(Enclosin...

Python闭包实现:nonlocal关键字与变量作用域

在Python编程中,闭包是一个强大而优雅的特性,它允许函数捕获并记住其定义环境中的变量值。通过闭包,可以创建更加灵活和模块化的代码结构。而nonlocal关键字的引入,则进一步增强了Python闭包...