免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3600 | 回复: 6
打印 上一主题 下一主题

(1 and [a] or [b])[0] [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-08-31 10:56 |只看该作者 |倒序浏览
>>> a = ""
>>> b = "second"
>>> (1 and [a] or [b])[0]



这里的 (1 and [a] or )[0]应该怎么理解,[0]加在末尾是什么意思?

[ 本帖最后由 rubee 于 2007-8-31 10:58 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-08-31 11:07 |只看该作者
原帖由 rubee 于 2007-8-31 10:56 发表
>>> a = ""
>>> b = "second"
>>> (1 and [a] or )[0]


这里的 (1 and [a] or )[0]应该怎么理解,[0]加在末尾是什么意思?




相等于c:
if ( 1 ) {
    return a;
} else {
    return b;
}


可以看看 dive into python 里面专门有这个。


[0]加在末尾表示:
取[a] 中的第一个元素,即a
因为 1 and [a] 始终返回 [a]。

论坛徽章:
0
3 [报告]
发表于 2007-08-31 17:16 |只看该作者
非常感谢!!

论坛徽章:
0
4 [报告]
发表于 2007-08-31 17:31 |只看该作者
()不需要的吧,看起来反倒怪怪的。。

论坛徽章:
0
5 [报告]
发表于 2007-08-31 17:46 |只看该作者
我觉得有了()可读性要强一些吧,当然我的个人意见了。

论坛徽章:
0
6 [报告]
发表于 2007-10-27 23:06 |只看该作者
置顶的二本书里有这个例子的说明。。。

代替 isTure ? yes : no 这样子的东西。。。

二个东西 and ...  如果都为真,取后一个。所以要把a 变成[a]

论坛徽章:
0
7 [报告]
发表于 2007-10-29 07:30 |只看该作者
终于理解

a and b

当a为空 则结果等于a 否则结果等于b

a or b
当a为空 则结果等于b 否则结果等于a

于是
a and [ b ] or c
[ b ]恒不为空
因此 当 a为空 上式等于 a or c 等于 c
当a不为空 上式等于 [ b ] or c 等于[ b ]

0,False,None, '',[],{},()等都为空


另外一个角度理解
a and b 如果结果是True,那么返回b
如果结果是False, 并且两个操作数中只有一个空,那么就返回这个操作数
如果结果是False,并且两个错作数都是空,那么返回第一个操作数

a or b 如果结果是True 并且两个操作数都不是空,那么返回第一个操作数
如果结果是True,两个操作数只有一个不是空,那么返回这个操作数
如果结果是False,那么返回第二个操作数

从堆栈的角度看, 其实返回值就是当表达式的值可以确定的时候,栈顶的那个对象

我是绝对不会去用这样方法写程序的。

[ 本帖最后由 ttvast 于 2007-10-29 07:31 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP