我是Python的新手,我对Python处理空对象的方式有点困惑。
考虑这段代码;
a = {}
if a:
print "a is alive!"
else:
print "a is NOT alive!"
if not a:
print "NOT a!"
else:
print "a!"
if a is None:
print "a is None!"
else:
print "a is NOT None!"
我得到了这段代码的以下输出。
a is NOT alive!
NOT a!
a is NOT None!
我假设由{}初始化的对象是有效对象。为什么Python不那样对待它?为什么要得到diff If条件的diff输出?
在C++中,当我说
Object obj;
if (obj){
}
如果obj不是NULL,它将进入IF块(不管它是垃圾值还是其他)
但当我翻译成Python时也是一样的。
a = {} #This is a valid object
if a:
# Doesn't work!
为什么?我读到Python将{}计算为false。这是为什么?
它是一个有效的python对象,但它是空的,因此它被视为false
,列表[]
或数字0
也是如此。您确实有一个dict,但它不是none
对象。
Empy DICT/集合/列表等的计算结果为FALSE。None是它自己的类型,只有一个可能的值。
https://docs.python.org/2.4/lib/truth.html告诉您什么被计算为true和false
我看不出你的输出有什么奇怪的。让我们一步一步走:
a
是dictionary,更具体地说是dictionary对象;a
是一个字典,但是它是空的,所以它的真值是false
因此:
A
是false
,第一个if
打印else
语句,这是正确的;if
(因为not a
计算结果为true
,因为a
为false
)打印if
部分,这也是正确的。a
不是none
对象,而是dict
对象,因此取下并打印else
部分也是正确的。问题内容: 我想撤消一个列表,但是我设法做到了,但是在工作的中间我发现了一些奇怪的事情。下面的程序按预期工作,但list_reversed [i] = list [len(list)-1-i] 和 print(list [i]) (顺理成章地注释了 最后一行 )这 行 引起了 list 的更改。我没看到什么?我的Python版本是3.3.3。先感谢您。 问题答案: 以下: 使两个变量引用相同的列表
问题内容: 前一阵子,在使用Class.getMethod和自动装箱时,我遇到了类似的问题,因此在自己的查找算法中实现它很有意义。但是,真正让我感到困惑的是,以下两种方法也不起作用: String.class实现了Serializable接口,我确实希望它包含在lookup方法中。 我也必须在自己的查找算法中考虑这一点吗? 编辑 :我确实读过Javadoc, 所以让我强调一下问题的第二部分 :如果
问题内容: 我试图了解扩展在Python中是如何工作的,并且并没有达到我的期望。例如: 但我本来期望: 为什么返回None而不是扩展列表? 问题答案: 该方法将追加到现有数组并返回。在您的情况下,您正在动态创建一个数组-对其进行扩展,然后将其丢弃。该变量以返回值结束。
请注意,NULL字节始终存在,您可以使用检查它。 我知道我可以使用获得类似的结果。我不是在问其他选择,我只是想了解格式字符(如doc所说的“NUL填充字符串”)背后的逻辑。 “NULL”值在哪里涉及到所有这些?
我有以下输入字符串: 这里有各种各样的错误:标题前面有“。”应该是ID后面的分隔符。作者姓名的最后两个字符出现在日期字段中,实际日期丢失。 我怎样才能纠正这些问题?
问题内容: 我有以下代码: 我希望它返回“ 05/20/2012”,但它返回“ 04/20/2012” 这对我来说毫无意义-有人可以帮助我了解发生了什么以及如何获得正确的响应吗? 感谢您的关注! 问题答案: 从零开始。如和 尝试