Python局部变量更改

时间:2018-07-09 06:18:15

标签: python scope

我本质上想要的是一个辅助函数(可以在类的外部,也可以使用任何类),以更改函数中声明的局部变量的值。

class MainClass:
    def importantFunction():
        truthValue1 = False
        truthValue2 = False
        change(truthValue1,truthValue2)
        return truthValue1 && truthValue2

def changeBoolValue(val1,val2):
val1 = not val1
val2 = not val2

我想借助外部函数以某种方式更改真理值1和真理值2的值。我尝试过将其移到类中并使用不起作用的self,但我确实希望不要将trueValue1,2设置为全局类。我该如何处理?谢谢

4 个答案:

答案 0 :(得分:1)

布尔值是Python中的不可变类型,因此您不能通过引用传递它。考虑将其包装在@Andrej Kesely的答案之类的列表(可变类型)中,或使用return。

class MainClass:
    def importantFunction():
        truthValue1 = False
        truthValue2 = False
        truthValue1, truthValue2 = changeBoolValue(truthValue1, truthValue2)
        return truthValue1 && truthValue2

def changeBoolValue(val1, val2):
    return not val1, not val2

答案 1 :(得分:1)

您可以重新分配名称:

truthValue1, truthValue2 = change(truthValue1, truthValue2)

def change(val1, val2):
    val1 = not val1
    val2 = not val2
    return val1, val2

以某种方式封装可能会更好:

class Truth:
    def __init__(self):
        self.val1 = False
        self.val2 = False

    def change(self):
        self.val1 = not self.val1
        self.val2 = not self.val2

然后:

truth = Truth()
truth.change()

答案 2 :(得分:0)

要更改值,您需要在列表中传递它们,例如:

class MainClass:
    def importantFunction(self):  # don't forget self
        truthValues = [False, False]
        changeBoolValue(truthValues)
        return truthValues[0] and truthValues[1]   # using `and`, not `&&`

def changeBoolValue(val):
    val[0] = not val[0]
    val[1] = not val[1]

答案 3 :(得分:0)

您需要从change函数返回,然后重新分配变量以更改其值

class MainClass:
    def importantFunction():
        truthValue1 = False
        truthValue2 = False
        thruthValue1, truthValue2 = change(truthValue1,truthValue2)
        return truthValue1 && truthValue2

def changeBoolValue(val1,val2):
    val1 = not val1
    val2 = not val2
    return val1, val2