如何用另一个函数修改一个函数中的变量

时间:2019-07-05 01:55:16

标签: python

我正在尝试用numberfunction内更改change_value,但是如您所见,它不起作用

def change_value(number):

    number += 1


def function():

    number = 0

    change_value(number)

    print(number)


function()

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

4 个答案:

答案 0 :(得分:0)

在Python中,所有函数参数均为passed by object sharing。这意味着您可以更改该值(如果它是可变的),但永远不能将另一个值换出(即更改变量的绑定,以使原始变量受到影响)。

数字是不可变的。您无法做到这一点。

如果将数字放在可变容器(例如列表,字典或旨在实现此目的的对象)中,则可以执行以下操作:

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

def function():
    number_holder = [0]
    change_value(number_holder)
    print(number_holder[0])

答案 1 :(得分: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)

答案 2 :(得分: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

而内置类型的对象((列表,集合,字典)是可变的。

代码:

def change_value(number):
    number.append(1)


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

function()

输出:

1

答案 3 :(得分:0)

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

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


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

function()

输出

1