【发布时间】:2018-12-18 23:10:26
【问题描述】:
很抱歉,如果以前没有问过这个问题,因为这对任何接受过任何形式的 Python 培训的人来说都是显而易见的。我大部分时间都在用 Java 编程,我想知道我认为这是 Python 中的一个特质。我在胡闹
this=bool
if(this==True):this="big"
print(this)
毫不奇怪,我收到了一个泛型类型声明作为输出,因为如果为 True,那确实会很大。
<class 'bool'>
然后我使用我有限的 Java 理解来确定我可以进一步简化表达式,它是一个条件,对吗?这些是为布尔类型制作的。
this=bool
if(this):this="big"
print(this)
然后我差点笑出声来,但笑声中夹杂着恐惧
big
“this”比“this==True”“更少虚假”是有道理的,后者是大写 F 的 False,但我仍然认为它不应该评估为 True。此外,truthy 和 falsy 在其他情况下似乎足以产生预期的结果。那么是什么让一个空的布尔值变为真值呢?
我的第一个想法是它必须只是检查“this”是否存在。所以我删除了第一行的声明,期望找到“if([不存在的东西]):”会被跳过。相反,它抛出了一个错误。如果它存在的简单事实评估为 True,那么它的不存在不应该简单地评估为 False 吗?如果未初始化的值不返回 false,则初始化(空)值评估为 true 的功能有什么意义?
我以为我在阅读this answer 后理解了,实际上我的第一个想法是,“哦,它必须只是检查'this'是否存在。”然后我输入
if(this is not None):
也
if(this!=None):
并再次得到“大”作为输出,表明“这个”是无。
然后,我几乎惊慌失措地输入了
this=bool
if(this==None):this="big"
if(this==True):this="big"
if(this==False):this="big"
print(this)
你可能已经猜到了,失败了
<class 'bool'>
布尔值肯定是这“三个”之一?请不要告诉我我发现了“第四个”布尔值,我无法处理那种恶名。
问题(我认为)我遇到的所有问题是在第一行中删除“this”的初始化会导致错误,而不是 if 语句中的错误情况。如果在 x 存在时执行“if(x):”,那么不存在的“x”不应该通过并跳过该语句吗?为什么不保留 Java 中的布尔 if 功能,而只是强制我们检查 x 在这种情况下是否不为空?
【问题讨论】:
-
但是,
this=bool将 类bool分配给变量this。所有类对象都是真实的。 -
在 Java 中尝试使用
Object this = Boolean.class;执行此操作,看看是否有this.equals(true)。这相当于您在该代码中所做的。 -
“如果未初始化的值不返回 false,则初始化(空)值评估为 true 的功能有什么意义?”你从来没有测试过这个。您正在测试的值始终被初始化。如果不是,它将引发
NameError(在全局范围内)或UnboundLocalError(在函数范围内),它们不会默默地评估为真或假。 -
此外,Python 中没有未初始化的值
标签: python if-statement boolean