Python 3.x 在for循环函数内部和外部声明变量之间的区别

Python 3.x 在for循环函数内部和外部声明变量之间的区别,python-3.x,Python 3.x,我正在学习Python,只是在练习这个问题。我需要创建一个函数,对列表执行奇偶转换,n次。每个奇偶变换将: 每个奇数整数加两(+2) 每个偶数整数减去2(-2) 这是我的代码: def even_odd_transform(lst, n): for i in range(n): o = 0 #declared inside the for loop while o < len(lst): if lst[o] % 2 ==

我正在学习Python,只是在练习这个问题。我需要创建一个函数,对列表执行奇偶转换,n次。每个奇偶变换将:

每个奇数整数加两(+2)

每个偶数整数减去2(-2)

这是我的代码:

def even_odd_transform(lst, n):

    for i in range(n):
        o = 0  #declared inside the for loop

        while o < len(lst):
            if lst[o] % 2 == 0:
                lst[o] = lst[o] - 2
                o += 1
            else:
                lst[o] = lst[o] + 2
                o += 1
    return lst

even_odd_transform([0, 0, 0], 10)  
如果我在for循环函数外声明了'o'变量,我将得到结果=[-2,-2,-2]。为什么不能改成[-20,-20,-20]呢


是否有一个我应该知道的概念,比如全局变量和局部变量?如果是,请解释一下。提前谢谢。

当您在循环外部声明
o
时,您忘记了在循环内部将
o
重置为零。您的错误与声明
o
的位置无关。您刚刚忘记在while循环之前将计数器变量设置回零


编辑:尝试从for循环中打印
1st
中的值。您将看到,如果不重置计数器,则不会调用while循环。

哦,好的。但我为什么要将“o”变量重置回零呢?毕竟,我正在尝试迭代它,直到列表的长度。如果这对你没有意义,请原谅我。@jelly_-bean也许我误解了你的意图。您希望在每次通过for循环时迭代列表的长度,还是仅在第一次通过for循环时迭代列表的长度?如果您希望每次遍历for循环时都进行迭代,那么您需要重置计数器。是的,我希望在每次传入for循环后迭代到列表的长度。你能解释一下为什么我需要重置计数器吗?@jelly_bean在你第一次通过for循环结束时,
o
的值等于
len(1st)
。那么,当您第二次进入for循环时,
o
的值是多少?如果您没有重置它,那么它仍然是
len(1st)
,因此您将完全跳过while循环。
[-20, -20, -20]