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
答案 0 :(得分:0)
尽管res
在模块级别定义为全局变量,但是res
在paper_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
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