Python

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……,是不是超级方便。

哈哈哈。就这样了,我去洗澡了。

上一篇 下一篇

猜你喜欢

热点阅读