始终返回相同布尔值的 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 函数的主要内容,如果未能解决你的问题,请参考以下文章