![](/img/trans.png)
[英]Python 3 - Store a function's Return as a variable to use repeatedly later
[英]python store variable in function and use it later
是否可以将while循环中的变量存储到函数中,然后在循环结束时从函数中调用该变量
例如:在while循环期间,问题在于当我尝试从store()检索变量时它失败了......因为它需要传递参数。
def store(a,b,c):
x1 = a
y1 = b
z1 = c
return (x1,y1,z1)
def main():
while condition:
x = .......
y = .......
z = .......
......
......
store(x,y,z) #store to function...
......
......
......
s1,s2,s3 = store()
......
......
......
正如其他人所说,可能有一个比这更合适的选择,但在某些情况下(可能在REPL中)可能会很方便。 这是一个简单的函数,可以使用任意数量的值执行您想要的操作。
def store(*values):
store.values = values or store.values
return store.values
store.values = ()
>>> store(1, 2, 3)
>>> a, b, c = store()
>>> print a, b, c
1 2 3
>>> store(4, 5)
>>> a, b = store()
>>> print a, b
4 5
嗯,除非我误解,这是一个非问题的经典非解决方案。
为什么不直接使用这种语言呢?
while condition:
x = something
y = else
z = altogether
...
save_state = (x,y,z) ## this is just a python tuple.
...
# do something else to x, y and z, I assume
...
x, y, z = save_state
根据x
, y
和z
的类型,您可能必须小心将copy
存储到元组中。
(另外,你的缩进是错误的,并且在python中没有end
这样的东西。)
更新:好的,如果我理解得更好,问题就是能够在下次通过时使用之前的值。 在最简单的情况下,根本没有问题:下一次循环时, x
, y
和z
是它们在前一次循环结束时的任何值(这是所有编程的方式)语言工作)。
但如果你想明确,请尝试这样的事情:
x_prev = some_starting_value
x = some_starting_value
while condition:
x = something_funky(x_prev)
.... other stuff ....
x_prev = x
(但请再次注意,这里根本不需要x_prev
: x=something_funky(x)
将起作用。)
从技术上讲,如果你有一个深刻的,强烈的愿望用函数来做这件事,你总是可以用一个闭包(就像我们所知,一个穷人的对象)来做:
def store(a,b,c):
def closure():
return (a,b,c)
return closure
stored = store(1,2,3)
print stored()
打印(1,2,3)
尽管这是一个坏主意,但我喜欢在这里应用奇怪的解决方案
class Store(object):
def __init__(self, f):
self.f = f
self.store = None
def __call__(self, *args):
self.store = self.f(*args)
@Store
def test(a,b,c):
return a+b+c
print test(1,2,3)
print test.store
用Store装饰函数然后调用function.store来获取你在其中调用的内容,如果函数从未调用它返回一个None,你可以使它引发异常,但我个人并不想这样做。
不,你不能这样做。
此外,这是一个可怕的,可怕的想法。 “存储到函数”是一件非常糟糕的事情,我不愿意提供工作代码。
使用可调用对象。
class Store( object ):
def __init__( self ):
self.x, self.y, self.z = None, None, None
def __call__( self, x=None, y=None, z=None ):
if x is None and y is None and z is None:
return self.x, self.y, self.z
else:
self.x, self.y, self.z = x, y, z
更好的是做一些更简单的事情,不涉及具有魔法属性的函数,当使用和不使用参数调用时,它会执行两个不同的事情。
任何东西都比“存储功能”更好。 任何东西。
真。
任何东西。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.