python-解析语句、条件语句、打包和解包
2019-04-15 本文已影响16人
DKider
很多入门的教程书上是不会提到这个东西的,但是在网上看别人的代码时经常能够看到这种语句。
那么到底是什么叫解析语句呢?
最经典的例子:
l = [x for x in range(10)]
中括号中的语句就是解析语句。
官方语法:
[expression for value in iterable if condition]
其中expression 和 condition 都与value有关,而if 语句是可选的。
这个语句可以用for语句改写:
result = []
for value in iterable:
if condition:
result.append(expression)
举个简单的例子,我们的程序需要一个1~n的平方组成的列表,即[1, 4, 9, 16, 25, 36, 49, ······n*n]
如果用for循环来写,就是这样:
squares = []
for x in range(1, n+1):
squares.append(x*x)
但是我们用解析语句:
squares = [x*x for x in range(1,n+1)]
就只需要一行,当然也可以加if语句,比如生成1~n奇数的平方:
squares = [x*x for x in range(1, n+1) if x % 2 == 1]
结果为[1, 9, 25, 49, ······]
是不是很方便。这个解析语句又叫做列表生成式,实验证明用这种方法俩初始化列表要比用append方法快很多。
这种方法不仅可以用于列表,元组也可以这样生成,不过元组不可变。
(x*x for x in range(1, n+1) if x % 2 == 1)
{k: k*k for k in range(10)}
同样的这种语法用的较多的还有一个if-else语句:
一般我们都这么用:
if condition:
return True
else:
return False
像这种if-else语句下面的语句只有一个且只有值不同,就可以写成这样:
return True if condition else False
这样可以让代码变的简洁,更加美观优雅。
同样我们在赋值是也可以这么写:
max = a if a > b else b
这就像是C语言的语句:
max = a > b ? a : b;
这个语句叫条件表达式。
官方写法:
expr1 if condition else expr2
相当于:
if condition:
max = expr1
else:
max = expr2
至于打包和解包,举个大家都熟悉的例子就好了。
在c语言中,我们如果要交换两个标量a、b的值,那么我们就会写成这样:
tmp = a;
a = b;
b = tmp;
当然不止在C语言中,大部分语言都是这样写,你在python中这么写没有什么问题。
但是我们有更加简单的写法:
a, b = b, a
emmmm……,是不是超级方便。
哈哈哈。就这样了,我去洗澡了。