我有兴趣在Python的真值设置像{'a', 'b'}
,或空集set()
(这是不一样的空字典{}
).我特别想知道是否bool(my_set)
是False
当且仅当设定my_set
为空.
忽略原语(如数字)以及用户定义的类型,https://docs.python.org/3/library/stdtypes.html#truth表示:
以下值被视为false:
- [...]
- 任何空序列,例如
''
,()
,[]
.- 例如,任何空映射
{}
.- [...]
所有其他值都被认为是真实的
据https://docs.python.org/3/library/stdtypes.html#sequence-types-list-tuple-range,一组是不是一个序列(它是无序的,它的元素没有索引,等等. ):
有三种基本序列类型:列表,元组和范围对象.
而且,根据https://docs.python.org/3/library/stdtypes.html#mapping-types-dict,
目前只有一种标准的映射类型,即字典.
所以,据我所知,set类型不是一种类型False
.但是,当我尝试时,bool(set())
评估为False
.
问题:
False
吗?在阅读有关Perl 6的内容时,我看到一个被大肆宣扬的功能,您不再需要这样做:
return "0 but true";
Run Code Online (Sandbox Code Playgroud)
...但可以改为:
return 0 but True;
Run Code Online (Sandbox Code Playgroud)
如果是这样的话,Perl 6中的真相如何运作?在Perl 5中,它很简单:0,""和undef都是假的,其他一切都是真的.
在布尔上下文中,Perl 6中有哪些规则?
在IE和Chrome中,在JavaScript控制台中输入此内容会引发异常:
{} == false // "SyntaxError: Unexpected token =="
Run Code Online (Sandbox Code Playgroud)
但是,所有这些语句的评估都没有问题:
false == {} // false
({} == false) // false
var a = {};
a == false // false
Run Code Online (Sandbox Code Playgroud)
这是故意的行为吗?为什么会这样?
import numpy as np
a = np.array([0])
b = np.array([None])
c = np.array([''])
d = np.array([' '])
Run Code Online (Sandbox Code Playgroud)
为什么我们应该有这种不一致性:
>>> bool(a)
False
>>> bool(b)
False
>>> bool(c)
True
>>> bool(d)
False
Run Code Online (Sandbox Code Playgroud) 带有问号的方法返回一些真实的东西(例如,一个数字)以表明某些东西是真的,或者true
本身应该返回它是否正常?
例如,Ruby标准库或Rails中是否有使用真实性的例子?
背景:有人String#int?
在回答一个单独的问题时编写了一个方法,该问题返回一个表示true的整数,并nil
表示false.另一位用户对没有返回布尔值感到惊讶.
在angular.js中,有一些代码片段用于!!
检查某个值是否在条件中是真实的.
这是最佳做法吗?我完全理解返回值或其他任务!! 用于确保类型为布尔值.但条件检查也是如此吗?
if (!!value) {
element[name] = true;
element.setAttribute(name, lowercasedName);
} else {
element[name] = false;
element.removeAttribute(lowercasedName);
}
Run Code Online (Sandbox Code Playgroud)
尽管总是可以使用mixins或方法重写来修改Bool强制,但是默认情况下哪些值被认为是真实的而哪些值被认为是虚假的?
我正在学习python,但是我对以下结果感到有些困惑.
In [41]: 1 == True
Out[41]: True
In [42]: if(1):
...: print('111')
...:
111
In [43]: ... == True
Out[43]: False <===== why this is False while '1 == True' is True in previous sample
In [44]: if (...): <==== here ... just behaves like True
...: print('...')
...:
...
Run Code Online (Sandbox Code Playgroud)
根据文档,...
真值为True.
但我仍觉得上面的代码有点不一致.
......更有趣的事情:
In [48]: 2==True
Out[48]: False <===== why 1==True returns True while 2==True returns False?
In [49]: if(2):
...: print('222')
...:
222
Run Code Online (Sandbox Code Playgroud) 我的Perl 5.26.2 x64(Cygwin)的经验行为是,当且仅当其字符串部分是真实时,双变量才是真实的:
# Falsy number, truthy string => truthy
$ perl -MScalar::Util=dualvar -E 'my $v=dualvar 0, "foo"; say "yes" if $v'
yes
# Truthy number, falsy string => falsy
$ perl -MScalar::Util=dualvar -E 'my $v=dualvar 1, ""; say "yes" if $v'
# Truthy number, truthy string => truthy
$ perl -MScalar::Util=dualvar -E 'my $v=dualvar 1, "foo"; say "yes" if $v'
yes
# Falsy number, falsy string => falsy
$ perl -MScalar::Util=dualvar -E 'my $v=dualvar 0, ""; say …
Run Code Online (Sandbox Code Playgroud) 我期待以下比较给出错误:
var A = B = 0;
if(A == B == 0)
console.log(true);
else
console.log(false);
Run Code Online (Sandbox Code Playgroud)
但奇怪的是它会回归false
.
更奇怪的是,
console.log((A == B == 1));
Run Code Online (Sandbox Code Playgroud)
回报true
.
这种"三元"比较如何运作?
truthiness ×10
javascript ×3
python ×3
perl6 ×2
raku ×2
angularjs ×1
arrays ×1
comparison ×1
exception ×1
idioms ×1
if-statement ×1
numpy ×1
perl ×1
python-3.x ×1
ruby ×1
set ×1
types ×1