暑假集训后回家,在家闷了几天,忽然发现好久没碰Python了。在这台陪了我8年的老电脑上下了Python,写着写着代码突然卡死,干了个尴尬,绝对不是我敲得太快它才卡的,咳
咳。最近都是在玩C++,现在发现Python的确生疏了很多。不过,我又学到了个骚操作。分享出来给有兴趣的朋友们看看,也算是笔记吧啦巴拉巴拉。。。。。。
我要说的就是那传说中天下无双的、缺之不可的、大名鼎鼎的。。。。。if else 选择语句。
是的,你没看错。就是if else。
C语言中可以这么玩:
if (x > y) w = x;
else w = y;
变成Python就是:
if x > y:
w = x
else:
w = y
这个简单就不解释了,Python还可以这样:
w = x if x > y else y
上面这个也能看懂吧,是不是更接近自然语言?这不算啥,骚的操作来啦:
w = [y,x][x>y]
懵逼了吧,嘿嘿。这玩意有人说是二维列表,我不知道大家都是怎么叫的,不过的确用到了列表。首先吧,[y,x]
就是个列表,[x>y]
呢,是这个列表的下标,(列
表和C语言的数组差不多)在Python中,默认真值为1假值为0,所以当x>y为真的时候呢,即[y,x][1]就是等于x。
更让人懵逼的写法:
w = (x>y and [a] or [b])[0]
真服能写出这种代码的家伙,咳咳,吓得我赶紧搬我的小板凳过来做笔记。
要明白这个写法的意思,首先要知道“短路原则”是什么。
短路原则:
1.在逻辑运算符and中,如果前面的条件为假,则不继续进行and后面的条件判断;
2.在逻辑运算符or中,如果前面的条件为真,则不继续进行or后面的条件判断。
在Python中呢,
对于`(x>y and [a] or [b])[0]`来说:
如果x>y的值为真,则继续判断and后面的条件,显然不管a的值为何,列表[a]都是个真值,此时根据短路原则就不继续判断or后面的条件了,返回true,并且返回
[a]
也就是列表,此时对其取值,即[a][0]
所以此时w == [a][0]
。如果x>y的值为假,则根据短路原则不判断and后面的条件,转而判断or后面的条件,显然[b]是真值,所以此时
w == [b][0]
。长见识了,虽然原理很简单,听别人一解释也都懂。但关键是这不是自己想出来的。所以说呢,大神和大傻之间的差别,就差在这里了。
牛逼的人各有各的牛逼之处,愣头青也有愣头青的瓜皮。学习吧,跟着大佬们的脚步颤抖吧。总有走过来的那一天。
额,今天讲了什么。。。。。
1.
if x > y:
w = x
else:
w = y
2.
w = x if x > y else y
3.
w = [y,x][x>y]
4.
w = (x>y and [a] or [b])[0]
就这么少了,日积月累吧哈。