【发布时间】:2014-12-10 01:35:00
【问题描述】:
我正在尝试在 python 中编写一个类对象,它具有能够修改私有字符串的闭包函数的属性,我大部分都了解闭包,但我无法让它与多个闭包一起工作。我正在尝试返回一个函数数组,但我得到了
local variable 'string' referenced before assignment
向我表明字符串变量已被破坏或函数未保持其关闭状态并且无法访问它。 get_val 函数似乎可以工作,我尝试添加全局声明,但这不是问题,或者我无法使其正常工作。
class StringUpdater:
def _(self):
string = "MI"
def get_val():
return string
def add_u():
if string.endswith("I"):
string+="U"
def add_two_through_last():
string+=string[1:]
def replace_III_with_U():
#global string
string.replace("III", "U")
def remove_UU():
#global string
string.replace("UU", "")
return [get_val,add_u,add_two_through_last,replace_III_with_U,remove_UU]
def __init__(self):
str_obj = self._()
self.get_val = str_obj[0]
self.add_u = str_obj[1]
self.add_two_through_last = str_obj[2]
self.replace_III_with_U = str_obj[3]
self.remove_UU = str_obj[4]
f = StringUpdater()
print f.add_two_through_last()
print f.get_val()
【问题讨论】:
-
您对关闭的看法是正确的。您的代码通常应该以 fp 语言工作。这个恼人的问题是由 python legb 作用域引入的。
-
感谢您的文章,但我认为他的解决方案不适用于我的问题,他仍然无法修改原始变量
-
在python中使用多功能闭包有什么替代方法吗?
-
您的问题是字符串在 python 中是不可变的。 (附带说明,请不要将变量命名为
string。)