为什么 list.append 在布尔上下文中计算结果为 false?[重复]
- 2024-12-19 09:24:00
- admin 原创
- 148
问题描述:
计算结果为 false有什么原因吗list.append
?或者只是 C 语言中成功时返回 0 的惯例?
>>> u = []
>>> not u.append(6)
True
解决方案 1:
大多数 Python 方法都会就地改变容器,从而返回命令查询分离None
原则的一个应用。(Python 对事物总是相当务实,因此一些改变器在获取可用值时会返回可用值,否则会很昂贵或一团糟 - 该方法就是这种实用主义的一个很好的例子 - 但这些绝对是例外,而不是规则,也没有理由例外)。pop
`append`
解决方案 2:
None
计算结果为False
,在 Python 中,如果函数不返回任何内容,则假定其返回了None
。
如果你输入:
>> print u.append(6)
None
好了:)
解决方案 3:
因为.append
方法返回None
,因此not None
计算结果为True
。Python 出错时通常会引发错误:
>>> a = ()
>>> a.append(5)
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
a.append(5)
AttributeError: 'tuple' object has no attribute 'append'
解决方案 4:
它就地修改列表并返回None
。 None
计算结果为假。
解决方案 5:
实际上,它返回None
>>> print u.append(6)
None
>>> print not None
True
>>>
解决方案 6:
方法append
就地修改列表并返回值None
在您的例子中,您正在动态创建一个数组 [6],然后将其丢弃。变量 b 最终返回 None 值。
为什么?这符合Bertrand Meyer 提出的命令查询分离
原则。
该原则规定,每种方法要么是执行操作的命令,要么是向调用者返回数据的查询,但不能同时是两者。在您的示例中:
u.append(6)
append
修改了的状态[]
,因此返回符合原则的值不是最佳做法。
从理论上讲,这建立了一种理智的衡量标准,通过这种标准,人们可以推断程序的状态而无需同时修改该状态。
CQS 非常适合 python 等面向对象方法。
解决方案 7:
函数list.append
返回None
。它只是将值添加到您从中调用该方法的列表中。
以下内容可以让事情变得更清楚:
>>> u = []
>>> not u
False
>>> print(u.append(6)) # u.append(6) == None
None
>>> not u.append(6) # not None == True
True
相关推荐
热门文章
项目管理软件有哪些?
热门标签
曾咪二维码
扫码咨询,免费领取项目管理大礼包!
云禅道AD