-2

我写了这个小程序来打印乘法表。我正在理解局部变量,然后我在每个函数中添加了两个具有相同名称的变量。但它正在运行,我没有得到任何 2 个具有同名错误的变量。请帮助我理解这里的想法 -

def printMultiples(n):
    i = 1
    i = 5
    while i <= 10:
        print n*i, '\t',
        i = i + 1
    print

def printMultTable():
    i = 1
    i = 10
    while i <= 10:
        printMultiples(i)
        i = i + 1
4

5 回答 5

1

i一旦函数运行,变量就会被定义,它不会等到行

i = 1
i = 10

正在运行。编译代码时,Python 会查看函数中分配的每个变量,并为任何未声明为global或的变量创建定义nonlocal

i =行只会更改值,不会导致再次定义它。

于 2012-08-19T00:28:33.683 回答
1

这是您的脚本中发生的事情:

i = 1

创建变量i并将值 1 分配给它

i = 5

i用5替换保存的值

while i <= 10:

开始你的循环

    print n*i, '\t',

循环的第一次迭代将打印 n * 5 和一个制表符

    i = i + 1

将 i 加一

于 2012-08-19T00:28:40.597 回答
1

没有两个同名的变量,只有一个变量被分配了两次。

i = 1  # i is declared and assigned to 1
i = 5  # the same i is reassigned to 5
于 2012-08-19T00:28:52.087 回答
1

您实际上并没有创建两个具有相同名称的变量。您的第二个i =是重新分配i给一个新值,与i = i + 1设置i为 的值相同i + 1

顺便说一下,还有更多 Pythonic 方法可以处理固定次数的循环:

for i in range(1, 11):
    printMultiples(i)

这将对printMultiples从 1 开始且小于 11 的值执行。

于 2012-08-19T00:29:10.313 回答
1

在 python 中,符号只是变量的名称。它们不像 C/C++ 那样分配内存。因此,您所做的只是在每种情况下将值重新分配给“i”。

于 2012-08-19T00:29:23.187 回答