每次循环后在python中更新变量

时间:2015-12-10 02:20:24

标签: python loops variables assign

一段时间以来一直在努力,我想要变量"结果"在函数的每个循环之后更新,以便下次它遍历函数时它将返回一些新的东西。我已经尝试在我的函数之外分配结果,然后尝试更新它,但没有任何外观。

<?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相当新,如果有人提出建议,我不反对其他方法。感谢

2 个答案:

答案 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执行任何操作。将其作为参数删除或在函数内部使用。