有人可以解释为什么这个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
答案 0 :(得分:3)
正在递增的i是该函数的本地,并且不会影响主代码的i。所以,当你打印我的原始i
答案 1 :(得分:1)
因为i=5
和j=9
是在函数范围之外分配的,所以它们只在函数中更改,但是当你打印它们时它们在函数之外,所以它们从未实际更改
更多关于variable scope
答案 2 :(得分:1)
更改函数内部的值时,更改不会反映在外部。
以稍微不同的呈现方式,在def function(string, i, j):
中我们有3个正式参数,其中一个是i
。我可以使用function("str", 3, j)
进行调用,并且调用者中不会有i
进行更新。
答案 3 :(得分:0)
在函数本身之外,函数不会修改标量/不可变类型(整数,浮点数,字符串)。
虽然复合类型在有限的意义上进行了修改。 EG,如果将字典传递给函数并在函数中更改它,则可以修改字典的元素,但如果为同一变量分配不同的字典,则在函数外部不会看到更改。 IOW,你可以改变字典包含的内容,而不是字典本身。