从函数更改变量

时间:2014-04-11 11:41:22

标签: python-3.x

我需要从函数内部更改变量,变量是参数。

这是我尝试过的代码:

bar = False

def someFunction(incoming_variable):
    incoming_variable = True

someFunction(bar)

print bar

当它返回True时返回False。

如何更改变量?

2 个答案:

答案 0 :(得分:3)

你不能。赋值将本地名称重新绑定为一个全新的值,使旧值在调用范围内保持不变。

一种可能的解决方法是突变不会重新绑定。传入列表而不是布尔值,并修改其元素。

bar = [False]

def someFunction(incoming_variable):
    incoming_variable[0] = True

someFunction(bar)

print bar[0]

您也可以通过这种方式改变类属性。

class Thing:
    def __init__(self):
        self.value = None

bar = Thing()
bar.value = False

def someFunction(incoming_variable):
    incoming_variable.value = True

someFunction(bar)

print bar.value

而且,总是global

bar = False
def someFunction():
    global bar
    bar = True
someFunction()
print bar

以及自我修改类。

class Widget:
    def __init__(self):
        self.bar = False
    def someFunction(self):
        self.bar = True

w = Widget()
w.someFunction()
print w.bar

但是对于最后两个,你将失去将不同参数传递给someFunction的能力,因此它们可能不合适。取决于你想要做什么。

答案 1 :(得分:1)

在你的例子中:

bar is global variable existing oustide the scope of function someFunction

Whereas incoming_variable is local variable residing only in the scope of function someFunction

致电someFunction(bar)

  • 将bar(False)的值赋给局部变量incoming_variable
  • 评估功能

如果您想简单地更改变量栏:

def someFunction(incoming_variable):
    bar= incoming_variable