使用一个函数但在另一个函数内部修改变量的最佳方法是什么?

时间:2019-03-11 03:12:41

标签: python python-3.x function

我遇到的主要问题(特定于Python,请不要标记为另一种语言的重复项)是我不知道如何使用嵌套函数修改函数内部的字符串变量,如果这有任何意义。这段代码应该可以更好地解释我的意思。

def insideAFunction():
    variableToMod =  "test"

    def modFunc():
        if 1 > 0:
            variableToMod = "TEST"

    print("before: " + variableToMod)
    modFunc()
    print("after: " + variableToMod)


def insideAFunction2():
    variableToMod =  "test"

    def modFunc():
        global variableToMod
        if 1 > 0:
            variableToMod = "TEST"

    print("before: " + variableToMod)
    modFunc()
    print("after: " + variableToMod)

insideAFunction()
insideAFunction2()

输出:

before: test
after: test
before: test
after: test

所需的输出将是:

after: TEST

我知道我可以通过仅在insideAFunction()外部定义variableToMod并像在insideAFunction2()中那样进行全局调用来使其工作,但是我想知道是否有可能在函数内部完全完成它

3 个答案:

答案 0 :(得分:1)

  1. 您正在modFunc中更改variableToMod的值,但不返回它。
  2. 第二个print variableToMod语句仍在打印,但它采用您在第2行中声明的variableToMod

因此它将始终打印相同的内容。您需要从modFunc返回一个值并将其分配给外部变量ToMod,然后再进行打印。这样结果将是

之前:测试 之后:测试

def insideAFunction2():     variableToMod =“测试”

def modFunc():
    if 1 > 0:
        variableToMod = "TEST"
        return variableToMod


print("before: " + variableToMod)
variableToMod = modFunc()
print("after: " + variableToMod)

答案 1 :(得分:0)

您可能正在使用Python 3.x(我不认为这在Python 2.x中是一个问题),这意味着您需要在内部函数中使用nonlocal关键字。

我猜测使用global的版本不起作用,因为您已经定义了一个具有相同名称的局部变量,该局部变量将隐藏具有该名称的任何全局变量。

编辑: 实际上,Python 2.x确实具有相同的行为,但是它似乎不支持nonlocal语句。我猜一种解决方案可能是传入local()字典并在内部函数中更改其中的条目,但是我不确定这是否可行。我必须尝试一下。

答案 2 :(得分:0)

使用返回功能对我来说效果很好:

def insideAFunction():
    variableToMod =  "test"

    def modFunc():
        if 1>0:
            variableToMod = "TEST"
            return variableToMod

    print("before: " + variableToMod)
    variableToMod = modFunc()
    print("after: " + variableToMod)

insideAFunction()

输出为:

before: test
after: TEST