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语言中,变量是与某个值关联的名字。你可以用它来保存一个值

  1. x = 10
  2. x + 1
  3. x = "hello world"

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

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

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

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

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

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

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

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

  • 数值转换

Julia支持三种数值转换

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

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

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

字符

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

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

函数

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

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

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

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

元祖的元素可以有名字。

  1. x = (a=2, b=2^2)
  2. println(x.a)
  3. # 或者 x[1]
  4. >>> 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...

Julia语言程序基础的更多相关文章

  1. 李洪强iOS开发之【零基础学习iOS开发】【02-C语言】02-第一个C语言程序

    前言 前面已经唠叨了这么多理论知识,从这讲开始,就要通过接触代码来学习C语言的语法.学习任何一门语言,首先要掌握的肯定是语法.学习C语言语法的目的:就是能够利用C语言编写程序,然后运行程序跟硬件(计算 ...

  2. 【值得收藏】C语言入门基础知识大全!从C语言程序结构到删库跑路!

    01 C语言程序的结构认识 用一个简单的c程序例子,介绍c语言的基本构成.格式.以及良好的书写风格,使小伙伴对c语言有个初步认识. 例1:计算两个整数之和的c程序: #include main() { ...

  3. Julia语言介绍

    官网:https://julialang.org/ 中文社区:https://cn.julialang.org/ Julia 是一个面向科学计算的高性能动态高级程序设计语言. 首先定位是通用编程语言, ...

  4. iOS开发系列--C语言之基础知识

    概览 当前移动开发的趋势已经势不可挡,这个系列希望浅谈一下个人对IOS开发的一些见解,这个IOS系列计划从几个角度去说IOS开发: C语言 OC基础 IOS开发(iphone/ipad) Swift ...

  5. 10个经典的C语言面试基础算法及代码

    10个经典的C语言面试基础算法及代码作者:码农网 – 小峰 原文地址:http://www.codeceo.com/article/10-c-interview-algorithm.html 算法是一 ...

  6. Linux基础与Linux下C语言编程基础

    Linux基础 1 Linux命令 如果使用GUI,Linux和Windows没有什么区别.Linux学习应用的一个特点是通过命令行进行使用. 登录Linux后,我们就可以在#或$符后面去输入命令,有 ...

  7. LINUX下C语言编程基础

    实验二 Linux下C语言编程基础 一.实验目的 1. 熟悉Linux系统下的开发环境 2. 熟悉vi的基本操作 3. 熟悉gcc编译器的基本原理 4. 熟练使用gcc编译器的常用选项 5 .熟练使用 ...

  8. Java学习-033-JavaWeb_002 -- 网页标记语言JSP基础知识

    JSP 是 Sun 公司提倡的一门网页技术标准.在 HTML 文件中,加入 Java 代码就构成了 JSP 网页,当 Web 服务器访问 JSP 请求的时候,首先执行其中的 Java 程序源码,然后以 ...

  9. C语言程序设计基础

    C语言程序设计基础 目录 C语言 C语言基础 C语言编程注意 C语言 C语言基础 C语言编程注意 0<9<9和0<9&&9<9是不同的 数组的声明和定义 con ...

随机推荐

  1. vux使用

    Vue中使用vux的配置,分为两种情况: 一.根据vux文档直接安装,无需手动配置 npm install vue-cli -g // 如果还没安装 vue init airyland/vux2 my ...

  2. NGK官方又出助力市场计划方案 1万枚VAST任性送

    近期NGK官方的一系列动作,可以说是在向外界宣告:NGK2.0即将来袭,席卷加密数字货币市场.前一段时间,NGK官方宣布,NGK公链布局算力领域,打造NGK算力生态星空计划,并推出了SPC星空币.目前 ...

  3. C++算法代码——扫雷游戏

    题目来自:http://218.5.5.242:9018/JudgeOnline/problem.php?id=1685 题目描述 扫雷游戏是一款十分经典的单机小游戏. 在 n 行 m 列的雷区中有一 ...

  4. fail模块场景(ansible)

    更多见博客 : https://blog.csdn.net/qq_35887546/article/details/105242720 创建剧本 /home/alice/ansible/lvm.yml ...

  5. mybatis 一对多和多对一 简单案例笔记

    以案例说明(以下案例代码都敲过验证过) 多对一(多个学生对一个老师  即学生集合中都存一个老师对象) Mybatis多对一实现方式1: //定义Student 和 Teacher 实体 @Data p ...

  6. JS数组的常用属性或方法

    1.length 数组长度 计算数组的长度 var arr=[1,2,3,4,5]; console.log(arr.length);//输出结果是5 2. push() 添加元素 向数组尾部添加新元 ...

  7. 小公举comm,快速比较两个排序文件

    前言 我们经常会有需求比较一个文件里的内容是否在另一个文件存在.假如我有一份监控列表的IP写入在了file1,我所有的机器IP写入在了file2,我要找出还有哪些机器没有在监控列表.以前的做法是写个两 ...

  8. OpenGL中的简单坐标系初看+VAO/VBO/EBO

    你好,三角形 一: 关于坐标的问题 标准化设备坐标:输入的顶点数据就应该在标准化设备坐标范围里面即:x,y,z的值都在(-1-1)之间.在这个区间之外的坐标都会被丢弃. 1.1一旦顶点数据传入顶点着色 ...

  9. 十一. SpringCloud Alibaba

    1. SpringCloud Alibaba简介 1.1 为什么会出现SpringCloud Alibaba Spring Cloud Netflix项目进入到维护模式 什么是维护模式?=> 将 ...

  10. mongoDB服务器连接不上Error: couldn't connect to server 127.0.0.1:27017, connection attempt failed: SocketException:

    一大早打开node项目就报错,终端报 UnhandledPromiseRejectionWarning: MongooseServerSelectionError: connect ECONNREFU ...