python - lambda 的字符串表示

标签 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 时打印一条消息。

是否可以打印如下内容:

The condition "v.a!=2 and v.b==2" has not been met, v has the values: a=1, b=2, c=3

我怎样才能做到这一点?

最佳答案

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

无论如何,为了让 Test.test()validate_until_true() 返回 false Test.test() 时打印您想要的消息> 需要访问 condition 测试的最终 v。在您发布的代码中, v 只是一个常量,但我假设您想要处理一般情况。因此,您需要更改 validate_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()

这符合你的要求吗,还是我找错了树? :)

FWIW,我正在 Python 2.6 中执行此操作。

关于python - lambda 的字符串表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26581827/

相关文章:

python - 是否可以异常返回?

python - numpy savetxt 没有添加逗号分隔符

python - Py2Exe "The following modules are missing"

python - Plotly 图形对象中线条的离散色阶 (Python)

python - 如何将带有字符串的 DataFrame 连接到带有 Unicode 的 DataFrame 并标准化数据类型

python - 如何编写异常无法中断的无限循环?

c++ - lambda 中的可变参数作为函数指针

Java 8 Stream API toMap 转换为 TreeMap

amazon-web-services - AWS 市场上基于 Lambda 的应用程序

python - 按 10 分钟间隔对 pandas DataFrame 进行分组