在前一篇函数定义中,提到了控制流程,那么就先来看看Python和Scala里的控制流程吧。我们知道在编程语言中最常见的控制流程就是while,if,for,就分别来看看我们应该怎么使用吧。
首先先看看while的使用:(为了简单起见,接下来都会使用Scala脚本control.scala)
Python是这么写的:
我们分析下这两个代码块的结构。
我们先变量定义var i = 1/i = 1,Scala的类型推断会将i判定为Int,i这时可以视为初始值,下一行的while语句,Scala小括号()里面的是判定终结语句,直到i lt(5),返回的也是Boolean值。
再回到while结构体中,{}里面则是主要的代码执行体,Python则是使用了换行符和缩进。结构体里面是要执行的代码块,i += 1表示i每次循环自增1。
聊完while,再看看if的使用:
Scala
Python
当然两个都有更加简单的版本
Scala
Python
在Python里,if里的表达式无需括号括起来,只要加空格并以冒号结尾。Scala的if必须用括号括起来,除非如上面例子中那样,只是单个Scala语句。
最后看看for的使用:
for在Scala和Python值得都是集合的遍历,而不是C和Java里的类似于while的for(i=0;i
先来看看Scala,Scala使用foreach和for去遍历某个集合:
在本例中,传入给foreach的是一个匿名函数i=>println(i),接受的参数为i。Scala既然是一门scalable的语言,我们还能写的更简单些:
不过只有你的匿名函数只能接受单个参数的时候才能使用。Scala里另一种for的表达式是
S是一个之前定义好的集合,值得注意的一点是:i是一个val,而不是var,虽然看上去像var,但实际上每一次的迭代都是新的值。在实际操作中对于S中的每个元素,一个新的i会被创建出来,初始化为元素的值。为了证明这点我们可以看看i是否能重新赋值:
回过头来看看Python
Python的for遍历就比较简单了,只有一个for in如下:
这里的S可以为任意一个集合,在Python2的时候,for循环的是立即计算出一个集合遍历,而在Python3发生了一个改变,就是S使用迭代器去减少内存的使用。除了常规的for循环,Python还拥有着更精简的表达式:列表推导和生成器推导,此处暂时不表。
领取专属 10元无门槛券
私享最新 技术干货