一段时间以来一直在努力,我想要变量"结果"在函数的每个循环之后更新,以便下次它遍历函数时它将返回一些新的东西。我已经尝试在我的函数之外分配结果,然后尝试更新它,但没有任何外观。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<display-name>Basic Struts2</display-name>
<welcome-file-list>
<welcome-file>/login.jsp</welcome-file>
</welcome-file-list>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
要注意我对python相当新,如果有人提出建议,我不反对其他方法。感谢
答案 0 :(得分:1)
你试图使你的功能有状态,这通常是一个坏主意。把它变成一个类,比如
from itertools import cycle
class StatefulCaller:
def __init__(self, state_fns, repeat=True):
if repeat:
state_fns = cycle(state_fns)
self.fn_iter = iter(state_fns)
def __call__(self):
return next(self.fn_iter)()
然后您可以使用:
rtn = lambda: "rtn"
fwd = lambda: "fwd"
step = lambda: "step"
myfn = StatefulCaller([rtn, fwd, step])
for i in range(10):
print(i, myfn())
导致
0 rtn
1 fwd
2 step
3 rtn
4 fwd
5 step
6 rtn
7 fwd
8 step
9 rtn
答案 1 :(得分:0)
类似的东西可以起作用:
def move2(msg, result=None):
if result is None:
print "Error result variable does not have a value"
elif result is "rtn":
rtn()
result = "fwd"
return result
elif result is "fwd":
fwd()
result = "step"
return result
elif result is "step":
step()
result = "rtn"
return result
else:
print "ERROR"
return result
第一个电话:
result = move2('Hello', 'start result')
下一个电话:
result = move2('Hello again', result)
注意:您不对msg
执行任何操作。将其作为参数删除或在函数内部使用。