0

我正在尝试更改number内部,functionchange_value正如您所见,它不起作用

def change_value(number):

    number += 1


def function():

    number = 0

    change_value(number)

    print(number)


function()

当我运行它时,它打印出 0 而不是 1

4

4 回答 4

0

(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
于 2019-07-05T02:29:59.590 回答
0

在 Python 中,所有函数参数都是通过对象共享传递的。这意味着您可以改变该值(如果它是可变的),但您永远不能将一个值换成另一个值(即更改变量的绑定,从而影响原始变量)。

数字是不可变的。你没有办法做到这一点。

如果你将一个数字放在一个可变容器中(例如一个列表、一个字典或一个设计用来做它的对象),那么你可以做这样的事情:

def change_value(number_holder):
    number_holder[0] += 1

def function():
    number_holder = [0]
    change_value(number_holder)
    print(number_holder[0])
于 2019-07-05T02:00:10.513 回答
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)
于 2019-07-05T02:11:21.610 回答
0

我在您的代码中更改了两行以获得您想要的结果:-

def change_value(number):
    number += 1
    return number   # Returning an incremental value


def function():
    number = 0
    number = change_value(number)
    print(number)

function()

输出

1
于 2019-07-05T04:59:55.260 回答