不可变数据类型造成的混淆(PYTHON)

问题描述 投票:0回答:1

我是初学者,这让我很困惑 因此,int 是不可变数据类型。局部变量“num”是 x 的副本。当我们运行这段代码时。 x 的值不变。那么在这种情况下使用函数有什么用呢?

students=[0,1,2,3,4,5,6,7,8,9]
def func(num):
    num+=1
    return num
x = 0
for i in students:
    inp = input("Y?")
    if (inp=="Y"):  
       func(x)
print(x)

我知道我们需要像这样给 x 赋值

students=[0,1,2,3,4,5,6,7,8,9]
def func(num):
    num+=1
    return num
x = 0
for i in students:
    inp = input("Y?")
    if (inp=="Y"):  
        x = func(x)
print(x)

有什么方法可以只在函数内部赋值吗? 另外,在这种特殊情况下,有没有比函数更好的方法?(除了只写 x+=1)

谢谢!

python function types immutability
1个回答
0
投票

所以,

int
是不可变的数据类型。

没错。

int
值不能在内部改变(不像列表)。

局部变量

num
x
的副本。

那不是真的。没有副本。您可能会混淆名称(

num
x
func
、...)和这些名称所包含的值。当您使用
func
调用
func(x)
时,名称
x
持有的值被读取,并且该值作为唯一参数传递给
func
,然后将其分配给本地名称
num
.

当我们运行这段代码时,

x
的值不会改变。

因为

x
没有重新分配,是的。只有名称
num
被重新分配给表达式
num + 1
的结果,并返回该值,但它不用于任何用途。

那么在这种情况下使用函数有什么用呢?

在第一个例子中,只是浪费了一点时间,因为没有对返回值做任何事情。

在这种特殊情况下有没有比函数更好的方法?

在这个人为设计的例子中,计算用户回答“Y”的次数?号

© www.soinside.com 2019 - 2024. All rights reserved.