如何在内部def函数中使用局部变量

时间:2017-10-19 09:37:31

标签: python

编写像这样的代码时遇到了一些麻烦

def wrapper(v):
    v() 
def abc():
    b=1 
    c=2 
def bc():
    b=b+c
    wrapper(bc)
    return b
print(abc())

结果为UnboundLocalError: local variable 'b' referenced before assignment

出于某种原因,我must以这种方式编写代码。 所以我改变了我的代码,以摆脱那个dame问题

def wrapper(v):
    v() 
def abc():
    b=[1,2]
def bc():
    b[0]=b[1]+b[0]
    wrapper(bc)
    return b[0]
print(abc())

当我运行这个脚本时,得到3令人难以置信。 我想知道关于这种现象的理性解释。 为什么我不能在第一次获得3?

1 个答案:

答案 0 :(得分:0)

编写代码真是一种奇怪的方式。但是如果你出于某种原因需要这个结构:你的第一个代码的主要问题是你忘记了每个函数末尾的return语句。 此代码重现3并且接近您的版本:

def wrapper(v):
    return v()


def abc():
    b = 1
    c = 2

    def bc():
        return b + c

    return wrapper(bc)


print(abc())