之前的文章我们简单地看了下Scala和Python的变量定义,再来看看如何将代码块组织在一起变成一个函数吧。
先看看函数如何定义: Scala版本
def sum(x:Int):Int = {
if (x == 1) 1
else x + sum(x-1)
}
或者是
def sum(x:Int):Int = {
if (x == 1) return 1
else return x + sum(x-1)
}
Python版本 在3.5之前,函数定义这么写
def sum(x):
if (x == 1):
return 1
else:
return x + sum(x-1)
在之后我们可以写的更像Scala:
def sum(x:int) -> int:
if (x == 1):
return 1
else:
return x + sum(x-1)
Scala和Python的常规函数定义都由def开始,接下来是函数名sum,小括号里是以逗号分开参数列表(本例中没有),参数里要加上以冒号开始的类型标注(在Scala里这个是必须加上的,Scala的类型推断不会推断函数的参数类型,而Python在PEP484被接受之前是不能加上类型标注,之后补充上了类型标注)。这个例子中sum接受了Int类型的x。在sum的参数列表后面会补充上Scala是以冒号开头,Python是以->开头的函数返回值的数据类型。这一部分Scala和Python还是大致相同的。
在函数结构体部分,Scala以一个等号和一个花括号括起来的结构体,本例中就是if else语句(控制结构稍后再说),我们可以选择是不是使用命令式编程的方式加上return符号,显然不加上return,sum函数会显得更加简单。当然,如果函数只有一条语句也可以选择不用花括号,如下:
def sum(x:Int):Int = if (x == 1) 1 else x + sum(x-1)
Python则是以冒号结尾,结构体一定要放到下一行以空格开始到结束的时候另起一段代码,而Python的函数返回值必须要加上return,而且并不能像Scala那样可以进一步写成一行语句,因为lambda定义不能定义复杂的控制流程。不过简单的if else还是能实现的
test = lambda x:1 if (x==1) else 2
定义好之后我们就可以调用了,很简单。 Scala
scala> sum(2)
res2: Int = 3
Python
sum(2)
Out[4]: 3