为什么Python打印这个?

时间:2013-11-14 00:04:29

标签: python function scope local-variables

有人可以解释为什么这个Python代码:

def function(string, i, j): 
    if (i < j):
        i = i+1
        string1 = string[i:j] return string1
    else:
        return string
# main
string = "four score and seven years ago" 
i = 5
j = 9
stringslice = function(string, i, j) 
print (stringslice)
print (i, j)

打印:

cor
5 9

我认为应该打印以下内容:

cor
6 9

4 个答案:

答案 0 :(得分:3)

正在递增的i是该函数的本地,并且不会影响主代码的i。所以,当你打印我的原始i

答案 1 :(得分:1)

因为i=5j=9是在函数范围之外分配的,所以它们只在函数中更改,但是当你打印它们时它们在函数之外,所以它们从未实际更改

更多关于variable scope

答案 2 :(得分:1)

更改函数内部的值时,更改不会反映在外部。

以稍微不同的呈现方式,在def function(string, i, j):中我们有3个正式参数,其中一个是i。我可以使用function("str", 3, j)进行调用,并且调用者中不会有i进行更新。

答案 3 :(得分:0)

在函数本身之外,函数不会修改标量/不可变类型(整数,浮点数,字符串)。

虽然复合类型在有限的意义上进行了修改。 EG,如果将字典传递给函数并在函数中更改它,则可以修改字典的元素,但如果为同一变量分配不同的字典,则在函数外部不会看到更改。 IOW,你可以改变字典包含的内容,而不是字典本身。