Julia-lang

新兴的Julia语言,Julia 一开始就是为高性能而设计的。 Julia 程序通过 LLVM 编译成高效的多平台机器码。

Julia中文社区: https://cn.julialang.org/

Julia的诞生: 一群拥有各种语言丰富编程经验的Matlab高级用户,对现有的科学计算编程工具感到不满——这些软件对自己专长的领域表现得非常棒,但在其它领域却非常糟糕。他们想要的是一个开源的软件,它要像C语言一般快速而又拥有如同Ruby的动态性;要具有Lisp般真正的同像性而又有Matlab般熟悉的数学记号;要像Python般通用、像R般在统计分析上得心应手、像Perl般自然地处理字符串、像Matlab般具有强大的线性代数运算能力、像shell般胶水语言的能力,易于学习而又不让真正的黑客感到无聊;它应该是交互式的,同时又是编译型的JIT(Just-In-Time)。

  • julia与传统动态语言最重要的区别是:

    • 核心语言很小:标准库是使用Julia下的,包括整数运算这样的基础运算
    • 丰富的基础类型:既可用于定义和描述对象,也可用于做可选的数据标注
    • 通过多重派发,可根据类型的不同,来调用同名函数的不同实现
    • 为了不同的参数类型,自动生成高效、专用的代码
    • 接近C语言的性能

Julia 变量

Julia语言中,变量是与某个值关联的名字。你可以用它来保存一个值

x = 10
x + 1
x = "hello world"

Julia提供了非常灵活的变量命名的策略。变量名是大小写敏感的,且不包含语义,意思就是说,Julia会根据变量的名字区别对待

julia> x = 1.0 1.0
julia> y = -3 -3
julia> Z = "My string" "My string"
julia> customary_phrase = "Hello world!" "Hello world!"
julia> UniversalDeclarationOfHumanRightsStart = " 人人生而自由,在尊严和权利上一律平等。"
  • 变量的命名

变量名字必须以英文字母开头。

命名规范:变量名字采用小写

用下划线分割命名中的单词,不鼓励使用

Type Module类型的名字使用大写字符开头,并且大写字母而不是用下划线分割单词

函数function 和 宏macro的名字使用小写,不使用下划线

会对输入参数进行更改的函数要使用叹号!结尾

  • 数值转换

Julia支持三种数值转换

​ - T(x) 和convert(T, x) 会把x转换成T类型

​ - 如果T是浮点类型,转换的结果就是最近的可表示值,可能会是正无穷大。

​ - 如果T为整数类型,当x不能由 T 类型表示时,会抛出异常InexactError

字符

char类型的值代表单个字符:他只是带有特殊文本表示法和适当算术行为的32位原始类型,不能转换为代表Unicode代码的数值,

  • 字符拼接
text = string("Hello", "World")
println(text) >>> HelloWorld
# 在Julia中字符串拼接的+号变成了*号
println("test" * "123")
  • 计算长度
# 计算字符串的长度
println(length.(text))
>>> 10
  • 引用变量进行字符拼接
# 引用变量
println("$text" * "123")
>>> HelloWorld123
  • 三引号字符串字面量
str = """
又来到某个港口
我不是一定要你回来 """
println("xix :$str")
  • 常见的操作
# findfirst 获取字符串中是否有相应的字符 如果有返回第一个匹配到的字符下标
flag = findfirst(isequal('0'), "OOOOOOOOOO0OOOOOOO0oo")
println(flag) # findfirst 获取字符串中是否有相应的字符 如果有返回最后一个匹配到的字符下标
flag = findlast(isequal('0'), "OOOOOOOOOO0OOOOOOO0oo")
println(flag) # findnext 字符串偏移 之后进行匹配 偏移到从第15个开始
flag = findnext(isequal('0'), "OOOOOOOOOO0OOOOOOO0oo", 15)
println(flag) # 判断字符是否存在在字符串中 返回bool值
flag = occursin("123", "1233123133")
println(flag) # 切片拆分 以, 间隔
join(["apples", "bananas", "pineapples"], ", ", " and ") "apples, bananas and pineapples"

函数

在Julia中,函数是将一个参数值元祖映射到返回值的对象。Julia的函数不是说纯粹的数学函数,在某种意义上,函数可以改变并受程序的全局状态的影响。在Julia中定义函数的基本语法是:

  • 函数基本语法
function f(x, y)
return x + y end
println(f(1,2)) # 函数还可以进行缩写 简洁语法
foo(x, y) = x * y
println(foo(2,3))
  • 函数指定返回类型
function bar(x, y)::Int64
return x * y
end println(
bar(3, 5))
  • 元祖

Julia有一个和函数参数与返回值密切相关的内置数据结构叫元祖。一个元祖是一个固定的长度的容器,可以容纳任何值。但是不可以被修改

yuanzu = (1,2,2,3,3)
println(typeof(yuanzu)) >>> NTuple{5, Int64}
  • 具名元祖

元祖的元素可以有名字。

x = (a=2, b=2^2)
println(x.a)
# 或者 x[1]
>>> 2

Julia与Python的区别

  • 切片 Julia 索引从1开始 Python从0开始
  • Python切片左开右闭 julia 左右全闭
  • Julia不支持负数索引
  • Julia的条件语句 使用end结束 Python是以缩进结束

Julia的变量作用域

作用于结构

结构 作用于类型 Allowed within
module , baremodule 全局 全局
struct 结构体 local(soft) 全局
for, while ,try local(soft) 全局或局部
macro local(hard) 全局
let ,functions, comprehensions, generators local(hard) 全局或局部

持续更新ing...

最新文章

  1. JS学习:第二周——NO.3盒子模型
  2. lucene-查询query->TermQuery按词条搜索
  3. 【JAVA、C++】LeetCode 017 Letter Combinations of a Phone Number
  4. PHP- 深入PHP、Redis连接
  5. 各种边框样式。。本以为border不是这么用的。
  6. 01-.Net编程机制
  7. POJ 3624 Charm Bracelet(01背包裸题)
  8. xBIM 格式之间转换
  9. haproxy下X-Frame-Options修复方法
  10. 《ProgrammingHive》阅读笔记-第二章
  11. hdu 2036 求多边形面积 (凸、凹多边形)
  12. linux下为目录和文件设置权限
  13. [WPF 基础知识系列] —— 绑定中的数据校验Vaildation
  14. c++11 函数模板的默认模板参数
  15. Sublime编辑器上的Linux Vim插件常用快捷键
  16. [技巧篇]02.关于MyBatis存取图片到MySQL数据Blob字段
  17. mysql innodb 数据表不存在
  18. nodeJs 对 Mysql 数据库的 curd
  19. centos 6.5 python2.6.6 zbar 安装
  20. [原创]spring及springmvc精简版--继承数据源,声明式事物

热门文章

  1. 负利率时代,NGK DeFi是否会推动资本向加密货币迁徙?
  2. Redis的数据结构与应用场景
  3. 云原生系列5 容器化日志之EFK
  4. VUE实现富文本编辑以及组件传值的使用总结
  5. svn报错Previous operation has not finished; run 'cleanup' if it was interrupted
  6. Docker搭建Hadoop环境
  7. MySQL注入与informantion_schema库
  8. 剑指 Offer 51. 数组中的逆序对 + 归并排序 + 树状数组
  9. Java 集合框架 02
  10. 关于PHP中$和$$的区别