【问题标题】:passing a condition as a python parameter将条件作为 python 参数传递
【发布时间】:2021-05-12 18:54:40
【问题描述】:

我有一个方法 foo,我作为线程运行。我想将条件作为参数传递。 foo 采取了很多步骤。在每个步骤之后,如果满足唯一条件,我希望 foo 返回。

def foo(self, condition, other_args):
    self.do_stuff(other_args)
    if condition:
        return
    self.do_other_stuff(other_args)
    if condition:
        return

等等。

我将使用的示例条件是 (self.attribute == value) OR (self.dif_attribute == dif_value)

我一直在尝试创建一个 lambda 函数

condition = lambda value: value == self.attributeconditional_2 = lambda value == self.dif_attribute

所以要添加更多信息,我这样称呼 foo:

        thread = threading.Thread(target=self.foo,
                                  kwargs={"condition": condition,
                                          "other_args": self.bar})

        thread.start()
        thread.join()

但我不确定如何传递该值并且似乎无法使其工作。 lambdas 是最好的方法吗?还是应该有一个我没有看到的更简单的答案。

为了澄清我试图将条件(self.attribute == 'string')作为参数传递给方法。这样它就可以在这样的方法中使用:

if condition:

使用 python3.6 不确定这是否重要

【问题讨论】:

  • 传递lambda 可以正常工作,传递完整的命名函数也是如此。请详细说明“似乎无法正常工作”是什么意思。
  • 你怎么打电话给foo
  • 那些lambdas 不起作用,大概是因为self 未定义,您可以将self 作为参数传入
  • 你从哪里得到value
  • @kinshukdua 值是我要验证的字符串。所以我想检查一个属性是否设置为特定的字符串值。

标签: python python-3.x lambda parameter-passing


【解决方案1】:

另一种方法是,您可以传递一个行为类似于条件的函数:

def con_func(x):
    if x > 10:
        return True
    else:
        return False

现在,当您将函数传递给另一个函数时,它可以表现得像一个条件:

def check(con = None, x = 0):
    if callable(con):
        is_true = con(x)
        if(is_true):
            print("ok")
        else:
            print("not ok")

现在你可以像这样使用它了:

check(con_func, 10)

输出将是:

not ok

【讨论】:

  • 这是一个很好的解决方案。但对我来说不是超级干净的解决方案,因为我有许多不同的条件可能需要使用,所以我必须为每个条件创建单独的方法。这就是我尝试使用 lambda 的原因,以便我可以根据需要声明它们。
【解决方案2】:

你真正需要的是:

if condition(self):

因为条件需要知道对象。

因此,定义您的 lambda 以将对象实例作为其参数:

value = 5

condition = lambda instance: instance.attribute == value

【讨论】:

    猜你喜欢
    • 2011-11-02
    • 2011-03-20
    • 2014-03-23
    • 2017-07-21
    • 2013-01-16
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多