python-解析语句、条件语句、打包和解包

很多入门的教程书上是不会提到这个东西的,但是在网上看别人的代码时经常能够看到这种语句。

那么到底是什么叫解析语句呢?

最经典的例子:

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

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Lua 5.1 参考手册 by Roberto Ierusalimschy, Luiz Henrique de F...
    苏黎九歌阅读 13,906评论 0 38
  • pyspark.sql模块 模块上下文 Spark SQL和DataFrames的重要类: pyspark.sql...
    mpro阅读 9,505评论 0 13
  • 无言_fc12阅读 71评论 0 0
  • 姥姥村里,很多老宅子门前,都会摆放一块这样的长方体石头,我不知道石头的具体名字,只知道每次回老家,姥姥都会...
    小猪皮杰阅读 598评论 1 0
  • 开学整整一周,我和英语老师发现早读迟到的孩子一天比一天少了。到今天,班里只剩一位“迟到大王”了。班主找他谈话,我也...
    百合小香阅读 353评论 2 10