前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python和Scala里的控制流程

Python和Scala里的控制流程

作者头像
哒呵呵
发布2018-08-06 14:18:17
4020
发布2018-08-06 14:18:17
举报
文章被收录于专栏:鸿的学习笔记鸿的学习笔记

在前一篇函数定义中,提到了控制流程,那么就先来看看Python和Scala里的控制流程吧。我们知道在编程语言中最常见的控制流程就是while,if,for,就分别来看看我们应该怎么使用吧。

首先先看看while的使用:(为了简单起见,接下来都会使用Scala脚本control.scala)

代码语言:javascript
复制
var i= 1
while (i < 5) {
  println(i)
  i += 1
}

Python是这么写的:

代码语言:javascript
复制
i = 1    
while i < 5:
    print(i)
    i += 1

我们分析下这两个代码块的结构。

我们先变量定义var i = 1/i = 1,Scala的类型推断会将i判定为Int,i这时可以视为初始值,下一行的while语句,Scala小括号()里面的是判定终结语句,直到i < 5表达式为false。Python则不需要括号。稍微聊开点,我们可以在Scala的REPL里输入i < 5,<实际是对象i的一个方法,可以理解为(i).<(5),返回的是Boolean值,i < 5只是一个语法糖,Python也是如此,i < 5实际上也是i.lt(5),返回的也是Boolean值。

再回到while结构体中,{}里面则是主要的代码执行体,Python则是使用了换行符和缩进。结构体里面是要执行的代码块,i += 1表示i每次循环自增1。

聊完while,再看看if的使用: Scala

代码语言:javascript
复制
var i = 1
if (i > 1) 2
else 3

Python

代码语言:javascript
复制
i = 1
if i > 1:
   1
else:
   2

当然两个都有更加简单的版本 Scala

代码语言:javascript
复制
if (1>2) 1 else 2 

Python

代码语言:javascript
复制
1 if i > 1 else 2

在Python里,if里的表达式无需括号括起来,只要加空格并以冒号结尾。Scala的if必须用括号括起来,除非如上面例子中那样,只是单个Scala语句。

最后看看for的使用: for在Scala和Python值得都是集合的遍历,而不是C和Java里的类似于while的for(i=0;i<2;i++)。 先来看看Scala,Scala使用foreach和for去遍历某个集合:

代码语言:javascript
复制
val S = 1 to 4
S.foreach(i=>println(i))
1
2
3
4

在本例中,传入给foreach的是一个匿名函数i=>println(i),接受的参数为i。Scala既然是一门scalable的语言,我们还能写的更简单些:

代码语言:javascript
复制
S.foreach(println)

不过只有你的匿名函数只能接受单个参数的时候才能使用。Scala里另一种for的表达式是

代码语言:javascript
复制
for(i <- S)
 println(i)

S是一个之前定义好的集合,值得注意的一点是:i是一个val,而不是var,虽然看上去像var,但实际上每一次的迭代都是新的值。在实际操作中对于S中的每个元素,一个新的i会被创建出来,初始化为元素的值。为了证明这点我们可以看看i是否能重新赋值:

代码语言:javascript
复制
scala> for(i <- S)
     | i = 1
<console>:11: error: reassignment to val
              i = 1

回过头来看看Python Python的for遍历就比较简单了,只有一个for in如下:

代码语言:javascript
复制
S = range(10)
for i in S:
    print(i)

这里的S可以为任意一个集合,在Python2的时候,for循环的是立即计算出一个集合遍历,而在Python3发生了一个改变,就是S使用迭代器去减少内存的使用。除了常规的for循环,Python还拥有着更精简的表达式:列表推导和生成器推导,此处暂时不表。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-03-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 鸿的学习笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档