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

2024-09-30 01:20:39 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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()中那样进行全局调用来实现它,但是我想知道是否可以完全在函数内部实现它


Tags: 函数标记test语言ifdefprintafter
3条回答

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

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

编辑: 实际上,python2.x确实有同样的行为,但它似乎不支持nonlocal语句。我想一个解决方案可能是传入local()字典并在内部函数中更改其中的条目,但我不确定这是否可行。我得试试

  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)

使用返回函数对我很好:

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

相关问题 更多 >

    热门问题