猜你喜欢
Julia语言编程入门

Julia语言编程入门

书籍作者:[美] 本拉瓦 ISBN:9787519844493
书籍语言:简体中文 连载状态:全集
电子书格式:pdf,txt,epub,mobi,azw3 下载次数:8020
创建日期:2021-02-14 发布日期:2021-02-14
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板
下载地址
内容简介

l 从基本知识入手,包括语言语法和语义。

l 掌握各个编程概念的明确定义。

l 按照逻辑进度学习值、变量、语句、函数和数据结构。

l 了解如何使用文件和数据库。

l 理解类型、方法和多重分派。

l 使用调试技术修正语法错误、运行时错误和语义错误。

l 通过案例研究探索接口设计和数据结构。


作者简介

Ben Lauwens是比利时皇家军事学院的一位数学教授。他拥有比利时天主教鲁汶大学和皇家军事学院的工程博士和硕士学位,以及皇家军事学院的学士学位。

Allen B. Downey 是美国欧林工程学院的计算机科学教授。他曾在韦尔斯利学院、科尔比学院和加州大学伯克利分校任教。他获得了加州大学伯克利分校的计算机科学博士学位以及麻省理工学院的硕士和学士学位。


编辑推荐

如果你要学习如何编程,Julia是一个绝J佳的即时编译的动态类型语言,并且语法简洁。这本实用指南使用Julia带领你一步一步地学习编程,先从基本的编程概念开始,逐步转向更高级的功能,如创建新类型和多重分派。

Julia的设计初衷是为了满足高性能,所以无论对于数值分析和计算科学,还是对于Web编程和脚本编写,Julia都是一种理想的通用语言。通过每一章的练习,会让你边学边理解各章介绍的编程概念。本书特别适合高中和大学层次的学生,对自学者和需要学习编程基础知识的专业人员也很适用。

为什么选择 Julia?

Julia的以下特点是决定性的因素:

?? Julia是一个高性能编程语言。

?? Julia使用了多重分派,允许程序员选择适合应用的不同编程模式。

?? Julia是一个动态类型语言,可以很容易地交互使用。

?? Julia有一种易于学习的简明的高级语法。

?? Julia是一个可选类型的编程语言,它的(用户自定义)数据类型可以让代码更清晰,也更健壮。

?? Julia 有一个扩展标准库,还有大量可用的第三方包。


《Julia语言编程入门》电子书免费下载

pdf下载 txt下载 epub下载 mobi下载 azw3下载

前言

前言

2018 年我开始准备一门针对完全没有编程经验的学生的编程课程。我想用Julia,不过我发现市面上没有用Julia 作为第一编程语言来学习编程的书。确实有很多不错的教程解释了Julia 的重要概念,不过没有哪一本书足够重视学习程序员是如何思考的。

Allen Downey 的《Think Python》介绍了学习正确编程的所有重要概念。不过,那本书是基于Python 语言的。我的讲义初稿可算是各种参考书的大杂烩,不过随着准备的时间越长,讲义内容就越像《Think Python》中的章节。我有了一个想法,想把那本书移植到Julia,把我的讲义整理成Julia 版的《Think Python》,这个想法很快付诸实施。

所有材料都可以从一个GitHub 存储库作为Jupyter notebook 获取。我在Julia Discourse 网站上发布了有关这个课程进度的消息后,反馈像潮水般涌来。大家迫切需要用Julia 作为第一编程语言介绍基本编程概念的一本书,显然,这是Julia 世界中缺失的一环。我联系了Allen,询问我能不能正式把《ThinkPython》移植到Julia 写一本书,他的回答很干脆:“加油!”他帮我与他的O’Reilly Media 编辑取得了联系,一年后,这本书终于完成,我对它做了最后的润色。

这条路走来真是有些坎坷。2018 年8 月,Julia v1.0 发布,与所有Julia 程序员一样,我不得不做代码迁移。将源文件转换为O’Reilly 兼容的AsciiDoc 文件时,这本书中的所有例子都经过了测试。工具链和示例代码都必须是Juliav1.0 兼容的。好在8 月份我不需要上课……

希望你喜欢这本书,它不仅能帮助你学习编程,还能教你像计算机科学家那样思考,至少能有那么一点点。

——Ben Lauwens

为什么选择Julia?

Julia 最初由Alan Edelman、Stefan Karpinski、Jeff Bezanson 和Viral Shah 在2012 年发布。这是一个免费且开源的编程语言。

选择编程语言往往很有主观性。对我来说,Julia 的以下特点是决定性的因素:

?? Julia 是一个高性能编程语言。

?? Julia 使用了多重分派,允许程序员选择适合应用的不同编程模式。

?? Julia 是一个动态类型语言,可以很容易地交互使用。

?? Julia 有一种易于学习的简明的高级语法。

?? Julia 是一个可选类型的编程语言,它的(用户自定义)数据类型可以让代码更清晰,也更健壮。

?? Julia 有一个扩展标准库,还有大量可用的第三方包。

Julia 是一种独一无二的编程语言,因为它解决了所谓的“两个语言问题”。

不需要任何其他编程语言,利用Julia 就可以写高性能的代码。不过,并不是说这会自动发生。要由程序员负责优化形成瓶颈的代码,不过只用Julia 本身就可以做到。

本书面向的读者

这本书适合任何想要学习编程的人,无须先前掌握任何编程知识。

我们会循序渐进地介绍新概念,并在后面的章节介绍更高级的主题。

本书可以作为高中或大学一个学期课程的教材。

本书使用约定

以下是本书使用的排版约定:

斜体(Italic)

表示新术语、URL、email 地址、文件名和文件扩展名。

等宽字体(Constant width)

表示程序列表,以及段落内部,用于引用程序元素,如变量或函数名称,数据库、数据类型、环境变量、函数语句和关键字等。

加粗等宽字体(Constant width bold)

表示由用户所输入的命令或其他文本。

斜体等宽字体(Constant width italic)

表示应由用户所提供的实际值或根据上下文所确定的值来替换的文本。

使用代码示例

本书中使用的所有代码都可以从GitHub 上的一个Git 存储库(https://github.com/BenLauwens/ThinkJulia.jl)获取。如果你不熟悉Git,应该知道这是一个版本控制系统,允许你跟踪一个项目里的有关文件。Git 控制下的一个文件集合就称为一个“存储库”。GitHub 是一个托管服务,为Git 存储库提供了存储空间,并提供了一个方便的Web 界面。

现在已经有一个很方便的包,可以直接增加到Julia。只需要在Pkg 模式下在REPL 中键入add https://github.com/BenLauwens/ThinkJulia.jl,参见第4 章“海龟绘图”一节。

运行Julia 代码最容易的方法是访问https://juliabox.com 并启动一个免费会话。

可以使用REPL,另外它还提供了一个notebook 界面。如果想在你的计算机上安装Julia,可以从Julia Computing 免费下载JuliaPro。这包括一个最新的Julia 版本、基于Atom 的Juno 交互式开发环境,以及多个预安装的Julia 包。如果你喜欢研究,可以从https://julialang.org 下载Julia,安装你喜欢的编辑器(例如,Atom 或Visual Studio Code),并启用用于Julia 集成的插件。

如果是本地安装,还可以增加IJulia 包,在你的计算机上运行一个Jupyternotebook。

这本书的目的是帮助你完成工作。一般来讲,你可以在程序和文档中使用这些示例代码,不需要联系我们来得到许可,除非你直接复制了大部分的代码。例如,如果你在编写一个程序,使用了本书中的多段代码,这并不需要得到许可。但是出售或发行O’Reilly 书示例代码光盘则需要得到许可。回答问题时如果引用了这本书的文字和示例代码,这不需要得到许可。但是如果你的产品的文档借用了本书中大量示例代码,则需要得到许可。

我们希望但不严格要求标明引用出处。引用信息通常包括书名、作者、出版商和ISBN。例如,“Think Julia by Ben Lauwens and Allen B. Downey (O’Reilly).Copyright 2019 Allen B. Downey, Ben Lauwens, 978-1-492-04503-8”。

如果你认为你在使用代码示例时超出了合理使用范围或者上述许可范围,可以随时联系我们:[email protected]

O’Reilly 在线学习平台(O’Reilly Online Learning)

近40 年来,O’Reilly Media 致力于提供技术和商业培训、知识和卓越见解,来帮助众多公司取得成功。

我们拥有独一无二的专家和革新者组成的庞大网络,他们通过图书、文章、会议和我们的在线学习平台分享他们的知识和经验。O’Reilly 的在线学习平台允许你按需访问现场培训课程、深入的学习路径、交互式编程环境,以及O’Reilly 和200 多家其他出版商提供的大量文本和视频资源。有关的更多信息,请访问http://oreilly.com。

联系我们

请将关于本书的意见和问题通过以下地址提供给出版商:

美国:

O’Reilly Media, Inc.

1005 Gravenstein Highway North

Sebastopol, CA 95472

中国:

北京市西城区西直门南大街2号成铭大厦C座807室(100035)

奥莱利技术咨询(北京)有限公司

针对这本书,我们还建有一个网页,列出了有关勘误、示例和其他信息。可以通过以下地址访问这个页面:https://oreil.ly/think-julia。

如果对这本书有什么建议,或者要询问技术上的问题,请将电子邮件发送至:[email protected]

要了解关于我们的图书、课程、会议和新闻的更多信息,请访问我们的网站:http://www.oreilly.com。

我们的Facebook: http://facebook.com/oreilly。

我们的Twitter: http://twitter.com/oreillymedia。

我们的YouTube: http://www.youtube.com/oreillymedia。

致谢

非常感谢Allen 写了《Think Python》一书,并允许我把这本书移植到Julia。

你的热情深深地感染了我!

还要感谢这本书的技术审校人员:Tim Besard、Bart Janssens 和David P.Sanders,你们提出了很多非常有帮助的建议。

感谢O’Reilly Media 的Melissa Potter,你让这本书更出色。是你督促我少走弯路做正确的事,并让这本书尽可能让人耳目一新。

感谢O’Reilly Media 的Matt Hacker,是你帮助我解决了那些Atlas 工具链和语法高亮显示问题。

感谢所有与我共同完成这本书初版的同学们,还有提出修改意见和建议的所有贡献者(如后所列)。

贡献者名单

如果你有建议或修改意见,请发email 至[email protected] 或者在GitHub 上开一个问题。如果我根据你的反馈做了修改,会把你增加到贡献者名单里(除非你要求省略)。

要让我知道你使用的是这本书哪一个版本,哪一种格式。最好至少给出有错误的那个句子的一部分,这样更方便我查找。也可以给出页码和节号,不过这样查找起来可能不那么容易。

非常感谢!

?? Scott Jones 指出Void 改为Nothing,正是在此之后,我开始把这本书迁移到Julia v1.0。

?? Robin Deits 发现了第2 章的一些拼写错误。

?? Mark Schmitz 建议启用语法高亮显示。

?? Zigu Zhao 找出了第8 章的一些bug。

?? Oleg Soloviev 发现了增加ThinkJulia 包的URL 中的一个错误。

?? Aaron Ang 发现了一些渲染和命名问题。

?? Sergey Volkov 发现第7 章中一个已经失效的链接。

?? Sean McAllister 建议应当提到一个非常棒的BenchmarkTools 包。

?? Carlos Bolech 发来一个长长的修改意见和建议列表。

?? Krishna Kumar 修改了第18 章中的Markov 示例。


目录

目录

前言 1

第1 章 程序之路 9

什么是程序? 9

运行Julia 10

第一个程序 12

算术操作符 12

值和类型 13

形式语言和自然语言 14

调试 16

术语表 17

练习 19

第2 章 变量、表达式和语句 21

赋值语句 21

变量名 22

表达式和语句 23

脚本模式 24

操作符优先级 26

字符串操作 27

注释 27

调试 28

术语表 29

练习 31

第3 章 函数 33

函数调用 33

数学函数 34

组合 35

增加新函数 36

定义和使用 37

执行流 38

形参和实参 39

变量和形参是局部变量 41

堆栈图 41

有返回值的函数和Void 函数 43

为什么使用函数? 44

调试 45

术语表 45

练习 47

第4 章 案例研究:界面设计 51

海龟绘图 51

简单重复 53

练习 54

封装 56

泛化 57

接口设计 58

重构 59

开发计划 61

Docstring 61

调试 62

术语表 63

练习 64

第5 章 条件和递归 67

向下取整除和求模 67

布尔表达式 68

逻辑操作符 69

条件执行 69

选择执行 70

串链条件 71

嵌套条件 71

递归 73

递归函数的堆栈图 74

无限递归 75

键盘输入 76

调试 77

术语表 78

练习 80

第6 章 有返回值的函数 85

返回值 85

增量式开发 87

组合 90

布尔函数 91

更多递归 92

信仰飞跃 95

另一个例子 96

检查类型 96

调试 98

术语表 99

练习 100

第7 章 迭代 103

重新赋值 103

更新变量 105

while 语句 105

break 107

continue 108

平方根 109

算法 111

调试 111

术语表 112

练习 113

第8 章 字符串 117

字符 117

字符串是一个序列 118

length 119

遍历 120

字符串分片 121

字符串是不可变的 122

字符串插值 123

查找 124

循环和计数 124

字符串库 125

∈操作符 126

字符串比较 127

调试 127

术语表 129

练习 131

第9 章 案例研究:单词游戏 135

读取单词列表 135

查找 138

利用索引循环 140

调试 142

术语表 143

练习 143

第10 章 数组 147

数组是一个序列 147

数组是可变的 148

遍历数组 150

数组分片 151

数组库 152

映射、过滤器和归约 153

点语法 155

删除(插入)元素 155

数组和字符串 157

对象和值 158

别名 159

数组参数 161

调试 163

术语表 165

练习 167

第11 章 字典 171

字典是一个映射 171

字典作为计数器集合 174

循环和字典 175

反向查找 176

字典和数组 178

备忘录 179

全局变量 181

调试 184

术语表 185

练习 187

第12 章 元组 191

元组是不可变的 191

元组赋值 193

元组作为返回值 194

变长参数元组 195

数组和元组 196

字典和元组 199

序列的序列 201

调试 202

术语表 202

练习 203

第13 章 案例研究:数据结构选择 207

词频分析 207

随机数 208

单词直方图 210

最常用的单词 211

可选参数 212

字典差 213

随机单词 214

马尔科夫分析 215

数据结构 218

调试 219

术语表 221

练习 222

第14 章 文件 225

持久存储 225

读和写 226

格式化 227

文件名和路径 227

捕获异常 229

数据库 230

串行化 232

命令对象 233

模块 234

调试 236

术语表 237

练习 238

第15 章 Struct 和对象 241

组合类型 241

Struct 是不可变的 243

可变的Struct 243

矩形 244

实例作为参数 245

实例作为返回值 247

拷贝 248

调试 249

术语表 250

练习 251

第16 章 Struct 和函数 253

时间 253

纯函数 254

修改函数 256

原型与规划 257

调试 259

术语表 260

练习 261

第17 章 多重分派 263

类型声明 263

方法 264

另外一些例子 266

构造函数 267

show 269

操作符重载 269

多重分派 270

泛型编程 271

接口和实现 273

调试 274

术语表 274

练习 276

第18 章 子类型 277

扑克牌 277

全局变量 279

比较扑克牌 279

单元测试 280

一副牌 281

增加、删除、洗牌和排序 282

抽象类型和子类型 283

抽象类型和函数 285

类型图 286

调试 288

数据封装 289

术语表 291

练习 292

第19 章 精选:语法 297

命名元组 297

函数 298

匿名函数 298

关键字参数 299

闭包 300

块 300

控制流 302

类型 304

方法 306

构造函数 307

转换和提升 308

元编程 309

缺失值 311

调用C 和Fortran 代码 312

术语表 313

第20 章 精选:Base 和标准库 317

测量性能 318

集合和数据结构 318

数学 321

字符串 321

数组 323

接口 324

交互工具 326

调试 328

术语表 329

第21 章 调试 331

语法错误 332

我一直在改,不过没有区别 333

运行时错误 334

语义错误 339

附录A Unicode 输入 343

附录B JuliaBox 345