2017-10-19 70 views
-1

得到了某种原因,我must写代码像这样一些麻烦的时候写一些像这样的代码我如何使用局部变量在内高清功能

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

。 所以我改变我的代码,这样的方式来摆脱圣母院问题

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

请在发布前正确地缩进您的代码。这真的很难再现其他问题 – Uriel

+0

'abc'甚至不会调用'bc' – aaron

+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()) 
相关问题