始终返回相同布尔值的 Python 函数

Posted

技术标签:

【中文标题】始终返回相同布尔值的 Python 函数【英文标题】:Python function that always return the same boolean value 【发布时间】:2016-04-26 09:42:26 【问题描述】:

在函数式编程中,有时很有用,让函数总是为每个参数(甚至多个参数)返回True(或False)。

在某些模块中是否定义了具有这种确切行为的内置函数或函数?

【问题讨论】:

我很好奇。您能否指定一个有用的示例?如果像您的答案一样,您有代表真假的关键字,为什么需要一个函数来代替它们? @Arc676:我使用objgraph 来查看内存图。您可以指定一个函数来定义是否应探索图中的节点。我希望探索 每个 节点,所以现在我使用始终返回 True 的 lambda。这只是一种情况,但这是我见过几次的模式。 object 返回一个实例,该实例将在布尔上下文中被处理True 【参考方案1】:

我不知道有什么内置的,但你可以将它们定义为:

false = lambda *_: False
true  = lambda *_: True

【讨论】:

能否详细说明*_-syntax? 这个语法有两点需要详细说明。首先,星号用于传递任意数量的参数,通常记为def myfunc(*args):(也适用于 lambdas)。更正确的版本将使用(*args, **kwargs) 来捕获关键字参数。第二点要详细说明,是使用未命名变量_ 表示我们不使用参数。因此,这些 lambda 接受任意数量的(非关键字)参数并将它们全部丢弃,这就是 *_ 所做的。 @Jasper:DainDwarf 是对的,请注意:_ 在 python 中是一个有效的变量标识符,并且没有特殊的语法(即它不会丢弃任何东西),它通常用于你不关心的变量,因为没有人会写像_ + _ * _而不是x + x * x这样的东西。【参考方案2】:

您可以使用object,因为它的实例将始终被视为真值,因为object 既没有定义__len____nonzero__(在Python 2 中),也没有定义__bool__(在Python 3 中) .

>>> bool(object())
True
>>> if object():
...   print("Hi")
...
Hi

【讨论】:

object() 没有参数,所以bool(object(42)) 会引发异常。 我显然错过了前提的那一部分。

以上是关于始终返回相同布尔值的 Python 函数的主要内容,如果未能解决你的问题,请参考以下文章

返回布尔值的 Perl 函数实际上返回啥

调用返回布尔值的JavaScript函数

具有布尔返回值的 pl/sql 函数的 OracleType?

如何对相同布尔值的块进行分组?

Python第七天_布尔值的应用

计算 Python 列表中真正布尔值的数量