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中一個函式可以回傳多個值 ,使用元祖來表示
function foo(a, b)
return a + b, a * b
end
println(foo(2,3))
>>>(5, 6)
- 變參函式
function bar(a, b, x...)
return a, b, x
end
println(bar(1, 2, 3,3,4,4))
>>>(1, 2, (3, 3, 4, 4))
- 日期內置函式
# 匯入日期庫
using Dates
println(Date(2021, 1, 10))
# >>> 2021-01-10
println(Date(2021,2))
# >>> 2021-02-01
println(Date(2021))
# >>> 2021-01-01
- 關鍵字引數
# 關鍵字引數
function plot(a, b, c=2)
println("$a, $b, $c")
end
plot(6, 8, 1)
>>> 6, 8, 1
plot(6, 8)
>>> 6, 8, 2
- 函式引數中的Do結構
map([1, 2, 3]) do x
if x < 0&& iseven(x) # iseven功能是判斷這個引數是否被2整除
return 0
elseif x == 0
return 1
else
return x
end
end
# 程式會將map中的值遍歷賦值為x
- Julia讀寫檔案操作
open("test.txt", "w") do io
write(io, "123")
end
# convert("需要轉換的型別", 資料data) convert可以將資料轉換成相關的資料
open("test.txt", "r") do io
line = readline(io)
println(line)
end
# 回圈讀取字串 一定要記得if for等陳述句需要使用end結束
open("test.txt", "r") do io
line = readline(io)
println(line)
for i in line
println(i)
end
end
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...
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/276923.html
標籤:其他
上一篇:Python資料分析入門(二十):資料可視化之繪制餅圖
下一篇:從陣列創建ArrayList
