lambda的字符串表示

时间:2014-10-27 05:50:43

标签: python python-2.7 lambda

我有一个validate_until_true函数,该函数轮询函数的返回值,直到它满足给定条件或超时。

from collections import namedtuple 
import time
A = namedtuple("A", "a b c")

def validate_until_true(f, condition, timeout):
    t = time.time() + timeout
    while time.time() < t:
         v = f()
         if condition(v): return True
         time.sleep(1)
    return False         

class Test:
    def __init__(self, param):
        self.param=param

    def test(self):
       f = lambda: A(1,2,3)
       print(validate_until_true(f, lambda v: v.a!=self.param and v.b==2, 2))

Test(1).test()

如果validate_until_true返回False,我希望能够打印一条消息。

是否可以按照以下方式打印:

  

条件&#34; v.a!= 2和v.b == 2&#34;尚未满足,v具有以下值:   a = 1,b = 2,c = 3

我怎么能这样做?

1 个答案:

答案 0 :(得分:2)

也许我误解了你的问题,但是(AFAIK)你无法真正理解函数的字符串表示,无论是使用def还是lambda定义的,除了解析源代码。即使你可以,我也不认为做你想做的事情是有用的。 :)

无论如何,如果Test.test()返回false validate_until_true()需要访问Test.test() v conditionvvalidate_until_true()才能打印所需的邮件。你发布的代码v只是一个常量,但我想你想要处理一般情况。因此,您需要更改#! /usr/bin/env python from collections import namedtuple import time A = namedtuple("A", "a b c") def validate_until_true(f, condition, timeout): t = time.time() + timeout while time.time() < t: v = f() if condition(v): return True, v #print('.') time.sleep(1) return False, v class Test: def __init__(self, param): self.param=param def test(self): f = lambda: A(1,2,3) condition = lambda v: v.a!=self.param and v.b==2 result, v = validate_until_true(f, condition, 3) if result: print('True') else: msg = 'The condition "v.a!={0} and v.b==2" has not been met, v has the values: {1}' print(msg.format(self.param, str(v)[2:-1])) t = Test(1) t.test() p = 7 print('Setting param to {0}'.format(p)) t.param = p t.test() 以将{{1}}传递回其调用方。例如:

{{1}}

这样做你想要的,还是我在错误的树上吠叫? :)

FWIW,我在Python 2.6中这样做。