探索Julia(part10)--自定义函数
學習筆記,僅供參考,有錯必糾
參考自:Julia數據科學應用–Zacharias Voulgaris;官方文檔
使用Julia-1.1.1
自定義函數
Functions
在Julia中,函數是將參數值的元組映射到返回值的對象。Julia函數不是純粹的數學函數,因為函數可以改變程序的全局狀態,并受其影響,在Julia中定義函數的基本語法是:
function f(x,y)x + y end在Julia中還有第二種更簡潔的定義函數的語法。上面演示的傳統函數聲明語法等價于以下緊湊的"賦值形式":
f(x,y) = x + y在賦值形式中,函數體必須是單個表達式,盡管它可以是復合表達式(參見復合表達式)。簡短、簡單的函數定義在Julia中很常見。
函數調用使用傳統的括號語法:
f(2,3) #返回值 5函數名后不加括號,則表達式f指的是函數對象,可以像任何值一樣傳遞:
g = f; g(1, 2) #返回值 3和變量一樣,Unicode也可以用于函數名:
∑(x,y) = x + y; ∑(1, 2) #返回值 3return關鍵字
默認情況下,函數返回的值是最后一個計算表達式的值,該表達式是函數定義體中的最后一個表達式,return關鍵字將導致函數立即返回,例如:
function g2(x,y)return x * yx + y end;調用:
g2(5, 6) #返回值 30返回值類型
可以在函數聲明中使用::操作符指定返回值類型,這將返回值轉換為指定的類型:
function g3(x, y)::Int8return x * y end;查看返回值類型:
typeof(g3(3, 4)) #返回值 Int8對于不需要返回值的函數(僅用于某些副作用的函數),Julia約定是不返回值:
function printx(x)println("x = $x")return nothing end這是一種約定,因為nothing不是一個Julia關鍵字,而是唯一的nothing類型的單例對象。
Operators Are Functions
在Julia中,大多數操作符是支持特殊語法的函數(具有特殊求值語義的操作符,如&&和||例外,這些運算符則不能為函數),我們可以應用他們使用圓括號參數列表,就像其他任何函數一樣:
julia> 1 + 2 + 3 6julia> +(1,2,3) 6中綴形式(infix form)與函數應用程序形式(function application form)完全相同,實際上,前者被解析為在內部生成函數調用,這也意味著我們可以分配和傳遞操作符,比如+和*,就像你對待其他函數值一樣:
julia> f1 = +;julia> f1(1,2,3) 6具有特殊名稱的操作符
一些特殊表達式對應于調用具有不明顯名稱的函數,這些是:
| [A B C ...] | hcat |
| [A; B; C; ...] | vcat |
| [A B; C D; ...] | hvcat |
| A' | adjoint |
| A[i] | getindex |
| A[i] = x | setindex! |
| A.n | getproperty |
| A.n = x | setproperty! |
匿名函數
Julia中的函數是一類對象:它們可以被賦給變量,并使用標準的函數調用語法從已賦值的變量中調用。它們可以用作參數,也可以作為值返回。它們也可以匿名創建,無需給出名稱,例如:
julia> x -> x^2 + 2x - 1 #3 (generic function with 1 method)Julia創建了一個函數,參數為x,返回多項式x^2 + 2x - 1在該值處的值。請注意,該函數返回結果是一個泛型函數,且具有基于連續編號的編譯器生成的名稱。
匿名函數的主要用途是將它們傳遞給其他函數,作為一個參數。一個典型的例子是map方法,它對數組中的每個值應用一個函數,并返回一個包含結果值的新數組:
julia> map(x -> x^2 + 2x - 1, [1,3,-1]) 3-element Array{Int64,1}:214-2接受多個參數的匿名函數,可以被寫為:
(x, y, z) -> 2x + y - z一個零參數匿名函數被寫為:
()->3不帶參數的函數可能看起來很奇怪,但對于“延遲”計算很有用。
總結
以上是生活随笔為你收集整理的探索Julia(part10)--自定义函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 孟子曰人皆有不忍人之心翻译
- 下一篇: 念奴娇·赤壁怀古教案一等奖