分配结果变量的函数向我显示此错误

时间:2019-04-11 18:34:59

标签: python python-3.x

res = ' '
def paper_doll(text):
    for i in text:
        res = res+i+i+i
    return res
paper_doll('Hello')

错误:

UnboundLocalError: local variable 'res' referenced before assignment

3 个答案:

答案 0 :(得分:0)

尽管res在模块级别定义为全局变量,但是respaper_doll函数中用作赋值语句的受让人这一事实使Python编译器成为了标记。它作为paper_doll功能块范围内的局部变量,因此当它在res+i+i+i循环的第一次迭代期间对for求值时,会发现res未初始化为{此时尚未为{1}}赋值。

通常不建议从函数内更改全局变量的值,因此应在res函数中命名res,并使用全局变量{{ 1}}:

paper_doll

答案 1 :(得分:0)

res是一个全局变量,无需在修改函数中明确指定global即可访问但不能修改。

或更简单的解决方案是,在函数中定义res

def paper_doll(text):
    res = ' ' # or global res
    for i in text:
        res = res+i+i+i
    return res
paper_doll('Hello')

无论哪种方式,输出:

 HHHeeellllllooo

答案 2 :(得分:0)

两种可能的解决方案。

1:像这样,通过在函数内部编写paper_doll来告诉函数res,您打算在函数内部使用的global res变量是全局变量。

res = ' '
def paper_doll(text):
    global res
    for i in text:
        res = res+i+i+i
    return res
print(paper_doll('Hello')) 
#HHHeeellllllooo

请注意,这可能是一个不好的解决方案,因为如果在其他地方使用此res变量,则可能无法获得所需的值,因为它已被其他人修改,例如func已被修改{ {1}}用于更改全局变量,现在在res中使用它时,您会得到意外的结果

paper_doll
  1. 只需在函数内部定义局部变量res = ' ' def func(): global res res = 'abcd' def paper_doll(text): global res for i in text: res = res+i+i+i return res func() print(paper_doll('Hello')) #abcdHHHeeellllllooo 并将其返回即可。您仍然可以在功能之外使用res。 此处本地res=0已正确更新,全局res也已正确更新,并且两者互不影响
res