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

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

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

【问题讨论】:

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

标签: python functional-programming return


【解决方案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)) 会引发异常。
  • 我显然错过了前提的那一部分。
猜你喜欢
  • 1970-01-01
  • 2018-08-02
  • 1970-01-01
  • 2011-02-27
  • 2012-09-26
  • 1970-01-01
  • 2021-03-06
  • 2019-03-25
  • 2015-10-29
相关资源
最近更新 更多