这算不算 python 的小坑?

2016-03-02 15:30:44 +08:00
 haoc

看到这个两行代码,把我吓住了:
Python
if []:
print('False')

竟然没有报类型错误? Python 不是强类型么?
后来查了查 doc , if statement 在这里接受一个 expression 然后会调用 bool().
然后 bool([]) == False,所以没有出现类型错误。 -- 如果理解没错的话

感觉虽然这里没有出现[] == False 的问题但是这种 if [] 还是挺坑的,容易误导人。

4059 次点击
所在节点    Python
41 条回复
zhuangzhuang1988
2016-03-02 15:55:35 +08:00
@haoc 对的 好多东西似乎写起来爽.项目大的时候真想骂娘..
lovepython
2016-03-02 15:56:34 +08:00
这不是坑啊,
我记得基础时,就说明了, [ ] ( ) None 都是假

这是 python 特点,不让写那么多,简洁。哈哈
haoc
2016-03-02 15:57:18 +08:00
@Zzzzzzzzz 之前回错了。这个是说他引入了用 int 的 boolean 类是吧。那和这个 if 的有啥关系呢?
haoc
2016-03-02 15:58:19 +08:00
@lxy 我现在大致理解了。就是第一次看有点怪。
hahastudio
2016-03-02 16:03:47 +08:00
嗯,我不懂 /不习惯 falsy value ,所以它是坑
strahe
2016-03-02 16:08:44 +08:00
技巧和坑你确定分清楚了?
mulog
2016-03-02 16:09:46 +08:00
不算 只要记得有些地方需要对 None 和 empty list/dict 分开处理 这个特性还是很好用的
不能一个人看到某个写法觉得奇怪就是坑吧?
如果一门语言的一切写法你都觉得很合逻辑, 那很可能他和你已经会的一门语言基本差不多,那学来干什么。。
觉得还是起码先看完官方 doc 才来说坑不坑的问题吧 不看 doc 就说被坑了实在是。。
haoc
2016-03-02 16:10:12 +08:00
@hahastudio 哈哈,好吧。我查到 python 有关于 truth value testing 的 doc 。是我小白了:)
haoc
2016-03-02 16:13:46 +08:00
@mulog 嗯。你都说的对。我是最近刚开始用 python 写一些东西,然后确实没有认真看过 doc ,有点想当然了。
clino
2016-03-02 16:16:35 +08:00
我觉得这是一个很好的 feature
我记得以前看过相关文档的,结果现在找不到说这个的文档了
jarlyyn
2016-03-02 16:17:39 +08:00
@haoc

如果你对强类型的定义是这个,那我不明白你为什么会有顶楼的疑惑……

为什么会出现类型错误?

你的理解是判断了[]==fasle 吧?

就如同 3=='3'
haython
2016-03-02 16:18:13 +08:00
@jarlyyn python 是强类型,动态类型
haoc
2016-03-02 16:20:57 +08:00
@clino 哈。文档在附言里那个链接有。
imlonghao
2016-03-02 16:22:18 +08:00
我感觉这个挺好的...
jarlyyn
2016-03-02 16:23:12 +08:00
@haython

强在哪呢……

强类型之类,有什么标准么?

难道就是一个 1+'1'么……
haoc
2016-03-02 16:23:18 +08:00
@jarlyyn 我不知道一个概念叫 truthy value. 然后一开始就给理解跑偏了。
haoc
2016-03-02 16:29:37 +08:00
@jarlyyn 强弱类型标准是比较模糊。但是官方那个 wiki 里写的很明确为啥 python 应该是强类型。
chenxytw
2016-03-02 17:09:40 +08:00
@jarlyyn 一般认为强类型是指在生命周期内对同一内存片段仅有唯一解释。
noahlee
2016-03-02 22:42:25 +08:00
差点没反应过来, 就是个空列表, 挺方便的!
happywowwow
2016-03-03 11:41:39 +08:00
LZ 觉得 if 是用来判断 bool 值的
所以觉得 python 里面把 [] 计算成 bool 值是个坑

但是嘞 python 偷了很多懒 None () [] 什么的都是可以 if 的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/260519

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX