在go語言中函式定義格式如下:
func
functionname
([parameter list]
)[returntypes]
例1:
下面的函式是用於求兩個數的和
func
getsum
(num1 int
, num2 int
)int
這個函式傳遞了兩個引數,分別為num1
與num2
,並且他們都為int
型別,將相加後的結果進行返回。
上面這個函式還可以這樣定義
func
getsum1
(num1, num2 int
)int
當num1和num2是相同型別的時候我們可以省略掉前面的型別,go編譯器會自動進行推斷。
因為在go語言中存在值型別與引用型別,所以在函式引數進行傳遞時也要注意這個問題。
例2:
func
paramfunc
(a int
, b *
int, c [
]int
)func
main()
paramfunc
(a,&b, c)
fmt.
println
("main:"
) fmt.
println
(a) fmt.
println
(b) fmt.
println
(c)}
程式輸出如下
paramfunc:
100100[1
1003
]main:
1100[1
1003
]
在go語言中也支援變長引數,但需要注意的是變長引數必須放在函式引數的最後乙個,否則會報錯。
下面這段**演示了如何使用變長引數
例3:
func
main()
x :=
min(slice...
) fmt.
printf
("the minimum is: %d"
, x)
}func
min(s ...
int)
int min := s[0]
for_
, v :=
range s
}return min
}
func
printf
(format string
, a ...
inte***ce
)(n int
, err error
)
上面這段**暫時看不懂也沒關係,但是只需要記住,當你想傳遞給函式的引數不能確定有多少時可以使用變長引數。
go語言中函式還支援乙個特性那就是:多返回值。通過返回結果與乙個錯誤值,這樣可以使函式的呼叫者很方便的知道函式是否執行成功,這樣的模式也被稱為command,ok模式,在我們未來的程式設計中也推薦大家使用這種方式。下面這段**顯示了如何操作多返回值。
例4:
func
div(a, b float64)(
float64
,error
)return a / b,
nil}
func
main()
fmt.
println
("result: "
, result)
}
也可以下面這種模式
func
main()
else
}
注:多返回值需要使用()
進行標記。
除了上面支援的多返回值,在go語言中還可以給返回值命名,當需要返回的時候,我們只需要一條簡單的不帶引數的return語句。我們將上面那個除法的函式修改一下
例5:
func
div(a, b float64
)(result float64
, err error
) result = a / b
return
}
注:即使只有乙個命名返回值,也需要使用()
括起來。
匿名函式如其名字一樣,是乙個沒有名字的函式,除了沒有名字外其他地方與正常函式相同。匿名函式可以直接呼叫,儲存到變數,作為引數或者返回值。
例6:
func
main()
fmt.
println(f
())}
閉包可以解釋為乙個函式與這個函式外部變數的乙個封裝。粗略的可以理解為乙個類,類裡面有變數和方法,其中閉包所包含的外部變數對應著類中的靜態變數。為什麼這麼理解,首先讓我們來看乙個例子。
例7:
func
add(
)func
(int
)int
}func
main()
程式輸出結果如下:
string1 11
string12 13
string123 16
string1 11
string12 13
string123 16
如果不了解的閉包肯定會覺得很奇怪,為什麼會輸出這樣的結果。這就要用到我最開始的解釋。閉包就是乙個函式和乙個函式外的變數的封裝,而且這個變數就對應著類中的靜態變數。這樣就可以將這個程式的輸出結果解釋的通了。
在go語言學習筆記中,雨痕提到在彙編**中,閉包返回的不僅僅是匿名函式,還包括所引用的環境變數指標,這與我們之前的解釋也是類似的,閉包通過操作指標來呼叫對應的變數。
小問題:
嘗試一下如何通過閉包來實現斐波那契數列。
pandas組隊學習 task7
使用isna函式,返回值為每個位置是否缺失的邏輯變數。檢視某一列缺失的行,可以根據isna的返回值進行索引,例如 df df.height.isna head 如果要檢視多個列的情況,可以使用any和all。例如,isna all檢視三個列同時缺失 sub set df height weight ...
動手學深度學習Task7
一 優化演算法高階 二 word2vec 三 詞嵌入高階 一 優化演算法高階 在 section 11.4 中,我們提到,目標函式有關自變數的梯度代表了目標函式在自變數當前位置下降最快的方向。因此,梯度下降也叫作最陡下降 steepest descent 在每次迭代中,梯度下降根據自變數當前位置,沿...
《李巨集毅機器學習》task7
熵是用來衡量乙個系統混論程度的物理量,代表乙個系統中蘊含多少資訊量,資訊量越大表明乙個系統不確定性就越大,就存在越多的可能性。演算法支援模型 樹結構特徵選擇 連續值處理 缺失值處理 剪枝id3 分類多叉樹 資訊增益 不支援不支援 不支援c4.5 分類多叉樹 資訊增益比 支援支援 支援cart 分類 ...