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

Python和Scala的函数定义

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

之前的文章我们简单地看了下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
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-03-05,如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

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