04Scla学习:For与Function进阶实战、Lazy的使用

1 For 循环进阶

1) Fo使用

可以看到以下代码i,j都没有进行申明类型,它可以根据右侧类型元素自动进行类型推导。

在本次for循环中,有2个集合(1 to 2)有两个元素,通过左箭头 <- 把元素赋值给i 和j.

For循环这里有个限制条件 i  != j, 当i=1时,符合条件的是j=2, 当i=2时, 符合条件的j是1。即 100*i+2 = 102, 200*2 +1 =201 ;

def main(args: Array[String]): Unit = {

for (i <- 1 to 2; j <- 1 to 2 if i != j)

println((100 * i + j) + " ");

}

运行代码得到如下结果:


102

201

2) 函数是有值的

函数的返回值可以有值,如果没有值就是void,以下代码就是有返回值。


def addA(x: Int) = x + 100

println("The result from a function is :" + addA(2)) 

运行代码得到如下结果:


The result from a function is :102

3) 匿名函数

还有一种声明函数的方法,就是声明一个匿名函数,所谓匿名函数就是没有名字的函数,这点和js有点像,学过js的同学应该很快就理解了。

或者可以说把匿名函数复制给一个常量,通过常量调用匿名函数。

通过 val add = (x: int) => x +100 ,来声明一个匿名函数,把 add指向这个匿名函数,匿名函数的实现使用右指针 =>指向实现的方法体。

通过 add(2)调用匿名函数。


def main(args: Array[String]): Unit = {

val add = (x: Int) => x + 200

println("The result from a val is " +  add(2))

}

运行代码得到如下结果:


The result from a val is 202

4)函数的递归调用

递归调用实际上就是自己调用自己的函数,单要注意递归需要有退出循环的条件,否则就会造成“死循环”。

以下代码试求10的斐波那数,就是 10 * 9 * 8 * 7 * 6* 5 * 4 * 3 * 2 * 1


 def main(args: Array[String]): Unit = {

def fac(n:Int): Int = if (n <= 0) 1 else n * fac(n - 1)

println("The result from  a fac is : " + fac(10) )

}

运行代码得到如下结果:


The result from a val is : 3628800

5) 有初始值的函数

在本例中输入3个参数, content, left, right. 其中content 是输入的内容, left和right是左右”护法“,呵呵,其实是左右连接符。


  def main(args: Array[String]): Unit = {

def combine(content: String, left: String = "[", right: String = "]") = left + content + right

println("The result from a combine is : " + combine("I love Spark", "@", "@"))

}

运行代码得到如下结果:


The result from a combine is : &I love Spark&

6)函数的参数是可变的

函数的输入值不是固定的,通过*表示可以输入多个参数,既可变参数。


 def main(args: Array[String]): Unit = {

def connected(args: Int*) = {

var result = 0

for(arg <- args) result += arg

result

}

println("The result from a connected is : " + connected(1,2,3,4,5) )

println("The result from a connected is : " + connected(1,2,3,4,5,6) )

}

运行代码得到如下结果:


The result from a connected is : 15

The result from a connected is : 21

3 延迟加载lazy load

如果在E盘下不存在 users.txt, 使用 Source.fromFile()函数读取文件,就会报错抛出异常,

但是如果引用的常量前加上 lazy,它就不会报错。它只有在第一次被使用时,才被实例化。

注意:只要在下面的代码中不使用,就不会抛出异常。


import scala.io.Source

object Test {

def main(args: Array[String]): Unit = {

lazy val file = Source.fromFile("e:\\userx.txt")

println("Scala");

//    for (line <- file.getLines()) {

//      println(line);

//    }

}

}

DT大数据梦工厂的微信公众号是DT_Spark,每天都会有大数据实战视频发布,请您持续学习。

Scala 深入浅出实战经典(1-64讲)完整视频、PPT、代码下载:
百度云盘:http://pan.baidu.com/s/1c0noOt6
腾讯微云:http://url.cn/TnGbdC
360云盘:http://yunpan.cn/cQ4c2UALDjSKy   访问密码 45e2 
时间: 2024-10-04 16:33:18

04Scla学习:For与Function进阶实战、Lazy的使用的相关文章

004-For与Function进阶实战、Lazy的使用

004-For与Function进阶实战.Lazy的使用 For进阶 非常常见的形式 可以加入条件表达式进行数据过滤 Function进阶 函数是有值的(默认的话为Unit),所以可以直接将结果赋值给变量 =>(可理解为做法)匿名函数的使用 只对函数的做法关心并不关心函数的名字 匿名函数执行方法 函数的值赋值给一个变量 通过变量的名称加上()(括号进行函数传值) 递归调用时候必须要声明函数的返回值类型 函数中参数的默认初始化 如果在调用中传递参数的值会覆盖掉初始化的值 可变参数的定义 Lazy的

王家林亲传《DT大数据梦工厂》第四讲For与Function进阶实战、Lazy的使用

你想了解大数据,你想成为年薪百万吗?那你还等着什么,快点来吧!跟着王家林老师学习spark大数据 第四讲For与Function进阶实战.Lazy的使用 For循环 object For_Function_Advanced{ def  main ( args: Array[String]): Unit ={ for(i  <-  1 to 2;j <-  1 to 2)print((100*i + j) + “ ”) printIn for(i  <-  1 to 2;j <- 

For与Function进阶实战、Lazy的使用笔记总结

本期内容: 1:For循环的进阶实战,(更多的实战代码) 2:Function进阶实战,(Function更多的定义和实现方式) 3:Lazy的使用,(延迟加载) For循环常用: for(i <- 1 to 2; j <- 1 to 2 if i!=j){ println((100*i+j)+" ") } Function函数: 注意:(特别重要) 1:scala中的函数是一定有值返回的,但可以在声明时不明确指定函数的返回值,代码块中的最后一个参数作为scala函数的返回

scala-04For与Function进阶实战、Lazy的使用

For与Function进阶实战.Lazy的使用 一.for循环的进阶实战 Def main=(args:Array[String]):Unit{ For(i<- 1 to 3;j<- 3 to 8) Println((100*i+j)+" ") 也可在for循环中加入条件表达式: For(i<- 1 to 3;j<- 3 to 8  if i!=j) Println((100*i+j)+" ") } 定义函数的时候一般函数都有值,函数可以作为函数的参数去赋值

Scala学习回顾(四)---- For与Function进阶实战、Lazy的使用

注:本文学习源自:DT大数据梦工厂(微信公众号:DT_Spark) 1.For循环的进阶 2.函数的进阶 3.lazy的作用 参考资料: DT大数据梦工厂微信公众号:DT_Spark

分享《深度学习之TensorFlow:入门、原理与进阶实战》PDF+源代码

下载:https://pan.baidu.com/s/1zI-pblJ5dEwjGVe-QQP9hQ 更多资料:http://blog.51cto.com/3215120 <深度学习之TensorFlow:入门.原理与进阶实战>,李金洪 著.中文PDF,939页,带书签目录,文字可以复制粘贴.配套源代码. 如图: 原文地址:http://blog.51cto.com/14050756/2315854

深度学习之TensorFlow:入门原理与进阶实战

深度学习之TensorFlow:入门原理与进阶实战 链接:https://pan.baidu.com/s/1wUos19e7qhm_fA52FV8gQg 提取码:nz8i 目录 · · · · · · 配套学习资源 前言 第1篇 深度学习与TensorFlow基础 第1章 快速了解人工智能与TensorFlow 2 1.1 什么是深度学习 2 1.2 TensorFlow是做什么的 3 1.3 TensorFlow的特点 4 1.4 其他深度学习框架特点及介绍 5 1.5 如何通过本书学好深度学

MySQL的进阶实战篇

[版权申明]未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) http://blog.csdn.net/javazejian/article/details/69857949 出自[zejian的博客] 关联文章: MySQL的初次见面礼基础实战篇 MySQL的进阶实战篇 本篇上一篇博文MySQL的初次见面礼基础实战篇的延续,是mysql的进阶内容的记录,本篇主要知识点如下: 进阶实战篇 进阶实战篇 mysql视图机制 什么是视图 视图创建与使用 视图的本质 高效索引 使用索引的理由 索引

Python神经网络算法与深度学习视频教程人工智能算法机器学习实战视频教程

38套大数据,云计算,架构,数据分析师,Hadoop,Spark,Storm,Kafka,人工智能,机器学习,深度学习,项目实战视频教程 视频课程包含: 38套大数据和人工智能精品高级课包含:大数据,云计算,架构,数据挖掘实战,实时推荐系统实战,电视收视率项目实战,实时流统计项目实战,离线电商分析项目实战,Spark大型项目实战用户分析,智能客户系统项目实战,Linux基础,Hadoop,Spark,Storm,Docker,Mapreduce,Kafka,Flume,OpenStack,Hiv