首页
学习
活动
专区
圈层
工具
发布

Python和Scala的函数定义

之前的文章我们简单地看了下Scala和Python的变量定义,再来看看如何将代码块组织在一起变成一个函数吧。

先看看函数如何定义: Scala版本

代码语言:javascript
复制
def sum(x:Int):Int = {
   if (x == 1) 1
   else x + sum(x-1)
}

或者是

代码语言:javascript
复制
def sum(x:Int):Int = {
   if (x == 1) return 1
   else return x + sum(x-1)
}

Python版本 在3.5之前,函数定义这么写

代码语言:javascript
复制
def sum(x):
  if (x == 1):
      return 1 
  else:
      return x + sum(x-1) 

在之后我们可以写的更像Scala:

代码语言:javascript
复制
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函数会显得更加简单。当然,如果函数只有一条语句也可以选择不用花括号,如下:

代码语言:javascript
复制
def sum(x:Int):Int = if (x == 1) 1 else x + sum(x-1)

Python则是以冒号结尾,结构体一定要放到下一行以空格开始到结束的时候另起一段代码,而Python的函数返回值必须要加上return,而且并不能像Scala那样可以进一步写成一行语句,因为lambda定义不能定义复杂的控制流程。不过简单的if else还是能实现的

代码语言:javascript
复制
test = lambda x:1 if (x==1) else 2 

定义好之后我们就可以调用了,很简单。 Scala

代码语言:javascript
复制
scala> sum(2)
res2: Int = 3

Python

代码语言:javascript
复制
sum(2)
Out[4]: 3
下一篇
举报
领券