标签: truthiness

我怎样才能避免Ruby中的真实性?

是否有任何标准方法可以避免Ruby中的真实性,或者我是否需要推出自己的解决方案,例如

class FalseClass
  def to_bool
    self
  end
end

class TrueClass
  def to_bool
    self
  end
end

true.to_bool # => true
false.to_bool # => false
nil.to_bool # => NoMethodError
42.to_bool # => NoMethodError
Run Code Online (Sandbox Code Playgroud)

背景:我知道这to_bool会违背Ruby的宽容性质,但我正在玩三元逻辑,并且想要避免意外地做类似的事情

require "ternary_logic"
x = UNKNOWN
do_something if x
Run Code Online (Sandbox Code Playgroud)

我正在使用三元逻辑,因为我正在写一个flatmate共享网站的解析器(用于个人而非商业用途)并且某些字段可能缺少信息,因此不知道该地方是否存在是否符合我的标准.但是,我会尝试限制使用三元逻辑的代码量.

ruby truthiness

4
推荐指数
1
解决办法
888
查看次数

连续测试中多%%的含量是多少?

考虑:

a <- c("a", "b", "c")
b <- c("a", "e", "f")
c <- c("a", "h", "i")

> a %in% b %in% c
[1] FALSE FALSE FALSE
Run Code Online (Sandbox Code Playgroud)

我希望这可以评估TRUE FALSE FALSE,因为每个向量中的第一个元素是"a".为什么不是这样?

logic r truthiness

3
推荐指数
1
解决办法
62
查看次数

测试Truthy或Falsy参数通过函数传递到if语句

我也在这一点上画空白.而不是提供答案,我将不胜感激,如果有人可以帮助我理解为什么我的代码不打印预期的输出:

def bool_to_str(bval):
    if bval is True:
        mytest = 'Yes'
    else:
        mytest = 'No'
    return mytest
Run Code Online (Sandbox Code Playgroud)

预期产量:

>>>bool_to_str([1, 2, 3])
'Yes'
>>>bool_to_str(abcdef)
'Yes'
Run Code Online (Sandbox Code Playgroud)

实际输出的是什么:

>>>bool_to_str([1, 2, 3])
'No'
>>>bool_to_str(abcdef)
'No'
Run Code Online (Sandbox Code Playgroud)

请帮我理解我做错了什么.我认为函数需要测试参数的实际真值,但我不明白我错过了什么.

python if-statement truthiness

3
推荐指数
1
解决办法
177
查看次数

python对象的真假标准是什么?

我见过以下情况:

>>> def func(a):
...     if a:
...         print("True")
...
>>> a = [1, 2, 3]
>>> func(a)
True
>>> a == True
False
Run Code Online (Sandbox Code Playgroud)

为什么会出现这种差异?

python python-3.x truthiness

3
推荐指数
1
解决办法
2039
查看次数

比较是否真的允许返回数字而不是布尔值,为什么?

我在 Python 文档的真值测试下发现了一个令人惊讶的句子:

\n
\n

除非另有说明,具有布尔结果的运算和内置函数始终返回 0 或 False(表示 false)和 1 或 True(表示 true)。

\n
\n

关系运算符似乎没有例外语句,因此 IIUC 它们可以返回0and1而不是某些内置类型(例如 )的值上的Falseand ,甚至是不确定的。True7 < 3

\n

因此,为了满足我的代码生成类型值bool或防御性编程(只要这很重要)的规范要求,我应该将逻辑表达式包装在对 的调用中吗bool

\n

附加问题:为什么会有这个纬度?它是否使 CPython 或其他实现变得更容易?

\n

编辑\n问题已得到解答并且我已接受,但我想在PEP 285 \xe2\x80\x93 添加布尔类型中添加它,我发现了以下语句:

\n
    \n
  1. 所有概念上返回布尔结果的内置操作都将更改为返回 False 或 True,而不是 0 或 1;例如,比较、\xe2\x80\x9cnot\xe2\x80\x9d 运算符以及 isinstance() 等谓词。
  2. \n
  3. 所有定义为返回布尔结果的内置操作都将更改为返回 False 或 True,而不是 0 或 1。特别是,这会影响比较 (<、<=、==、!=、>、>=、 is, is not, in, not in),一元运算符 \xe2\x80\x98not\xe2\x80\x99,内置函数 callable()、hasattr()、isinstance() …

python types boolean type-conversion truthiness

3
推荐指数
1
解决办法
72
查看次数

如何在return语句中将string计算为boolean?

我在Python 3.4中有这样的函数:

def is_value_valid(the_str):
    return len(the_str) != 0
Run Code Online (Sandbox Code Playgroud)

当然还有其他方法来写这个,比如return the_str != "".是否有更多pythonic方式来编写这个表达式?我熟悉truthy/falsy的概念,所以我知道我可以在if条件下快捷方式:

if not the_str:
    # do stuff
Run Code Online (Sandbox Code Playgroud)

但是if 期望在它的表达式中有一个布尔结果(这是我作为C++程序员的天真过度简化;我不熟悉这方面的标准).但是,没有任何东西可以强制表达式在return语句中求值为boolean.我试过只返回字符串,只要没有人将返回的值视为字符串,它在boolean context下调用代码就可以了.但是从后置条件的角度来看,我不想返回非布尔类型.

python boolean truthiness

2
推荐指数
1
解决办法
3033
查看次数

实现 isNil

我正在实现一个看似微不足道的实用程序函数来检查值是否为nullundefined

我原来的实现是这样的:

function isNil(value) {
  return value === null || value === undefined;
}
Run Code Online (Sandbox Code Playgroud)

然后我查找了Lodash 的实现

function isNil(value) {
  return value == null
}
Run Code Online (Sandbox Code Playgroud)

从表面上看,这似乎是一种天真的方法,因为它违反了 eslint 的eqeqeq 规则并且只检查null.

我猜测这种方法之所以有效是因为 JavaScript 的真实性相等性规则的结合,但是 Lodash 的实现实际上有优势吗?

javascript null undefined truthiness lodash

2
推荐指数
1
解决办法
6402
查看次数

Python OR列表

在Python中你可以做到

print (0 or None or False or "" or [] or "hello" or None or "bar")
Run Code Online (Sandbox Code Playgroud)

这将打印

hello
Run Code Online (Sandbox Code Playgroud)

你能用清单做同样的事吗?即是否有Python功能,foo以便以下也将打印hello

print (foo([0, None, False, "", [], "hello", None, "bar"]))
Run Code Online (Sandbox Code Playgroud)

请注意,bar不打印.

python list or-operator truthiness

2
推荐指数
1
解决办法
242
查看次数

python date/time/datetime 对象的布尔值可以为 False 吗?

我最近遇到了一些检查日期时间对象的代码,并认为可以稍微清理一下:

# original
if (datetime1 and (datetime2 is None)):
  do_things()

# slightly cleaner version
if (datetime1 and not datetime2):
  do_things()
Run Code Online (Sandbox Code Playgroud)

但我意识到,如果存在一个计算结果为 False 的有效日期时间对象,这两个语句并不完全相同。例如:

if not '':
  print('beep')
else:
  print('boop')
# output: beep

if '' is None:
  print('beep')
else:
  print('boop')
# output: boop
Run Code Online (Sandbox Code Playgroud)

在Python中查找有关日期时间/时间/日期对象的布尔值的信息时,我一无所获。有谁知道Python是如何处理这个问题的?如果我遇到不同对象类型的类似问题,是否有可靠的方法来检查其布尔值何时为 true 或 false?

python python-datetime truthiness

2
推荐指数
1
解决办法
742
查看次数

对象有价值但似乎不存在?

我有以下Python代码:

if bedrooms: # bedrooms exists
    .....
else: #  BEDROOMS DOES NOT EXIST 
    bn = "BEDROOMS DOES NOT EXIST"
Run Code Online (Sandbox Code Playgroud)

我在我的调试器中单步执行它,并注意到即使bedroom == 0流程跳转到else语句.

为了测试这个我试过:

>>> bedrooms
0.0
>>> type(bedrooms)
<type 'float'>
Run Code Online (Sandbox Code Playgroud)

有人能解释一下这里发生了什么吗?

python evaluation if-statement truthiness

1
推荐指数
1
解决办法
64
查看次数