我正在尝试更改number内部,function但change_value正如您所见,它不起作用
def change_value(number):
number += 1
def function():
number = 0
change_value(number)
print(number)
function()
当我运行它时,它打印出 0 而不是 1
我正在尝试更改number内部,function但change_value正如您所见,它不起作用
def change_value(number):
number += 1
def function():
number = 0
change_value(number)
print(number)
function()
当我运行它时,它打印出 0 而不是 1
(int, float, bool, str, tuple, unicode) 等内置类型的对象在 python 中是不可变的。因此,您可以在这里做的是返回修改后的变量并重新分配它。
代码:
def change_value(number):
number += 1
return number
def function():
number = 0
number = change_value(number)
print(number)
function()
输出:
1
而像 (list, set, dict) 这样的内置类型的对象是可变的。
代码:
def change_value(number):
number.append(1)
def function():
number = []
change_value(number)
print(number[0])
function()
输出:
1
在 Python 中,所有函数参数都是通过对象共享传递的。这意味着您可以改变该值(如果它是可变的),但您永远不能将一个值换成另一个值(即更改变量的绑定,从而影响原始变量)。
数字是不可变的。你没有办法做到这一点。
如果你将一个数字放在一个可变容器中(例如一个列表、一个字典或一个设计用来做它的对象),那么你可以做这样的事情:
def change_value(number_holder):
number_holder[0] += 1
def function():
number_holder = [0]
change_value(number_holder)
print(number_holder[0])
这里有一些方法可以实现你想要的
def change_value(number):
number[0] += 1
def function():
number = [0]
change_value(number)
print(number[0])
class myNumber:
def __init__(self, n):
self.num = n
def __add__(self, val):
self.num += val
def __repr__(self):
return str(self.num)
def change_value(number):
number += 1
def function():
number = myNumber(0)
change_value(number)
print(number)
我在您的代码中更改了两行以获得您想要的结果:-
def change_value(number):
number += 1
return number # Returning an incremental value
def function():
number = 0
number = change_value(number)
print(number)
function()
输出
1