


Python培训
400-996-5531
欢迎大家来到自学Python教室,前面我们学习了Python面向对象的相关内容,对于面向过程和面向对象大家还是要多进行对比分析,了解面向对象的方法的优势,并在实战中多进行应用!今天我们介绍一个Python中的小技巧:and-or,了解一下吧:
看下面这段代码:
a = "heaven" b = "hell" c = True and a or b print c d = False and a or b print d
输出:
heaven hell
结果很奇怪是不是?
表达式从左往右运算,1和"heaven"做and的结果是"heaven",再与"hell"做or的结果是"heaven";0和"heaven"做and的结果是0,再与"hell"做or的结果是"hell"。
抛开绕人的and和or的逻辑,你只需记住,在一个bool and a or b语句中,当bool条件为真时,结果是a;当bool条件为假时,结果是b。
有学过c/c++的同学应该会发现,这和bool?a:b表达式很像。
有了它,原本需要一个if-else语句表述的逻辑:
if a > 0: print "big" else: print "small"
就可以直接写成:
print (a > 0) and "big" or "small"
然而不幸的是,如果直接这么用,有一天你会踩到坑的。和c语言中的?:表达式不同,这里的and、or语句是利用了Python中的逻辑运算实现的。当a本身是个假值(如0,"")时,结果就不会像你期望的那样。
比如:
a = "" b = "hell" c = True and a or b print c
得到的结果不是""而是"hell"。因为""和"hell"做and的结果是"hell"。
所以,and-or真正的技巧在于,确保a的值不会为假。最常用的方式是使 a 成为 [a] 、 b 成为 [b],然后使用返回值列表的第一个元素:
a = "" b = "hell" c = (True and [a] or [b])[0] print c
由于[a]是一个非空列表,所以它决不会为假。即使a是0或者''或者其它假值,列表[a]也为真,因为它有一个元素。
在两个常量值进行选择时,and-or会让你的代码更简单。但如果你觉得这个技巧带来的副作用已经让你头大了,没关系,用if-else可以做相同的事情。不过在Python的某些情况下,你可能没法使用if语句,比如lambda函数中,这时候你可能就需要and-or的帮助了。
什么是lambda函数?呵呵,这是python的高阶玩法,你去了解一下吧!
恭喜你在Python自学的道路上又坚持了一天,今天为大家分享的Python教程:and-or小技巧,你学会了吗?更多Python教程尽在达内Python培训机构官网,敬请关注!
免责声明:内容和图片源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。
填写下面表单即可预约申请免费试听! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!
Copyright © 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有