Python3需要帮助吗

Python3需要帮助吗,python,python-3.x,Python,Python 3.x,此代码提供以下输出: def a(inp): i = 0 x = 0 for i in range(len(inp)): b(x) print(x) def b(x1): x1 = x1 + 1 def c (): a1 = a("...") c() 我不明白为什么x值没有改变?x1=x1+1不能改变xx作为值*传递给b。重新分配x1只会更改x1所查看的值。从函数返回值并在调用站点重新分配值是实现所需功能的最简单

此代码提供以下输出:

def a(inp):
    i = 0
    x = 0

    for i in range(len(inp)):
        b(x)
        print(x)

def b(x1):
    x1 = x1 + 1

def c ():
    a1 = a("...")

c() 

我不明白为什么
x
值没有改变?

x1=x1+1
不能改变
x
x
作为值*传递给
b
。重新分配
x1
只会更改
x1
所查看的值。从函数返回值并在调用站点重新分配值是实现所需功能的最简单方法:

0
0
0


*
比这稍微复杂一点,但这是目前处理数字时考虑这个问题的最简单方法。

x1=x1+1
在函数中
b(x1)
不会更改传递到
b()的变量的值。因此在函数之外,x保持不变为0。

它只是在该函数的范围内更改
x1
变量。要将其分配给
x
,请返回新值:

def b(x1):
返回x1=x1+1
然后将返回值设置为
x

范围内的i(len(inp)):
x=b(x)
打印(x)

还建议确实获取
i
的值,因为它是位置。

Python有可变和不可变的概念。可变的东西包括列表、dict等,但整数是不可变的,所以当您更改它时,您必须重新分配它

例如

 . . .
    for i in range (len(inp)):
        x = b(x)
        print(x)

def b(x1):
   return x1 + 1
这段代码带有输出

def b(l):
    l += [1]


a= [1,2,3]
b(a)
print(a)

def c(l):
    l += 1


a= 1
c(a)
print(a)

因为int是不可变的,list是可变的。有关更多信息,请查看。

您正在打印x(x=0)三次。函数b(x1)不返回任何内容。对函数b(x)的调用未分配给变量…为什么
x
要更改?代码没有试图以任何方式对其进行更改。应该注意的是,不变性与易变性并不是这里真正的主要问题。如果你简单地用一个列表替换他们传递的int,你会得到与他们最初相同的行为。关键是,对于列表,
+=
实际上不是重新分配,而是列表的一种变异。所以,真正的问题不是不变性与易变性,而是赋值与变异。”Carcigenicate说得很好。
[1, 2, 3, 1]
1