0

有人可以解释为什么这个 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

4 回答 4

3

正在递增的 i 是该函数的局部变量,并且不会影响主代码的 i 。因此,当您打印 i 时,它是原始 i

于 2013-11-14T00:06:56.497 回答
1

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

以稍微不同的表示方式,def function(string, i, j):我们有 3 个形式参数,其中一个是i. 如果有的话,我可以打电话,function("str", 3, j)并且调用者中没有i要更新的内容。

于 2013-11-14T00:08:06.137 回答
1

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

更多关于变量范围

于 2013-11-14T00:07:24.747 回答
0

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

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

于 2013-11-14T00:19:28.257 回答