14.程式程式設計進階:函式的引數
接上一講,這節我們專門介紹python函式的引數處理
本節主要內容 * 函式的形式引數和實際引數 * 函式的引數定義規則 * 函式引數的預設值 * 函式的可變引數 * 函式的關鍵字引數 * 函式的命名關鍵字引數
1.3. 函式的引數
1.3.1 函式的形式引數和實際引數
函式的引數主要會涉及到兩個概念:形式引數、實際引數 * 形式引數:其實就是定義函式時,函式括號中的變數,形式引數的意義是當前函式如果要被呼叫執行,就必須讓函式接收括號中定好的引數才能正常執行,就是形式上需要這些資料才能執行函式,所以稱為形式引數 * 實際引數:實際引數是我們在通過函式名稱呼叫函式時,在括號中傳遞的真實資料;實際傳遞給函式用於執行的資料,稱為實際引數 形式引數和實際引數的具體關係如下圖所示:
1.3.2. 函式的引數定義規則
函式通過def進行定義,用於執行一個功能,一個函式,可以需要引數,也可以不需要引數。 類似我們現實生活,執行一個功能就是做一件事情,做這件事情需要的資源就是引數,去做一件事情,有些需要資源,有些是不需要資源的。
所以! 規則1:如果我們的程式中出現了一部分功能程式碼重複執行,就需要封裝一個函式來減少程式碼的重複量 規則2:根據程式碼執行是否需要其他額外的資料,需要額外的幾個資料就定義幾個引數,不需要額外的資料就不定義引數 規則3:實際引數可以傳遞任意物件(python中一切皆物件)
1.3.3. 函式引數預設值
某些時候,我們可以給函式的引數定義預設值,這樣函式在呼叫過程中,如果某些引數沒有傳遞,就直接使用預設值來執行函式程式碼了,函式預設引數確定比較簡單,直接在形式引數上賦值就可以 ```
# 重新定義函式,給引數設定預設值5
def getCircleArea(pi=3.1415, radius=5) :
a = pi * (radius ** 2);
return a;
# 呼叫函式計算圓面積,不傳遞引數,使用預設值
a1 = getCircleArea();
# 呼叫函式,傳遞引數進行計算
a2 = getCircleArea(3.14, 3);
# 呼叫函式,給第二個引數傳遞資料進行計算
a3 = getCircleArea(radius=8);
```
1.3.4. 函式的可變引數
在某些情況下, 函式的引數個數不是確定的,這樣在常規定義函式時就木有辦法進行形式引數的定義了。 python提供了一種可變引數,可以完美的解決這個問題 可變引數,是在形式引數前面加一個*符號作為標識 ```
# 定義一個函式,用於列印多個資料
def printMsg(*msgs) :
for x in msgs:
print(x);
printMsg("tom");
printMsg("tom", "jerry");
printMsg("tom", "jerry", "shuke");
# 以上三個函式呼叫,都是可以正常執行的
```
注意,在某些特殊情況下,函式的可變引數放在了固定引數的前面;此時函式的呼叫就需要通過變數名稱指定資料了(這個也成為命名關鍵字引數,後面的內容中有單獨介紹) ```
# 可變引數msgs放在固定引數name的前面了
def printMsg(*msgs, name) :
print (name);
print(msgs);
for x in msgs:
print("-->" + x);
# 普通呼叫,出現錯誤
# 函式中的引數都被可變引數接收了,name就木有可以接收的資料了
printMsg("tom", "jerry");
# 必須如下方式呼叫才可以;指定name引數傳遞資料
printMsg("tom", "jerry", name="shuke");
```
可變引數是將傳入函式的多個引數,自動封裝成了一個tuple字典,也就是一組資料來使用。 上面的可變引數
*msgs
在函式中列印的結果如下: ```
print (msgs);
執行結果:("tom", "jerry")
```
1.3.5. 特殊的用法:關鍵字引數
將傳遞給函式的引數,解析成dict字典的形式,也就是key:value鍵值對的形式,這就是關鍵字引數的意義,更加方便可變引數的操作 關鍵字引數,使用兩個**符號來宣告關鍵字引數 ```
def printMsg(**msgs) :
print(msgs);
printMsg(name="jerry", age=18);
函式中列印結果:{name:"jerry", age:18}
```
注意,關鍵字引數,還可以指定只能傳遞什麼樣的名稱為引數名稱,就是命名關鍵字引數。命名關鍵字引數通過*符號作為分隔符號,符號後面的引數就是命名關鍵字引數 ```
# 定義具有命名關鍵字的引數
def printMsg(name, age, *, province, city):
print(name, age, province, city);
# 呼叫時需要傳遞具體的引數
printMsg("tom", 18, province="HN", city="ZZ");
另外一種情況,就是在可變引數的後面,新增的引數都是命名關鍵字引數,這裡的命名關鍵字引數就不需要*符號分隔了
# 下面的函式,province和city兩個引數是放在可變引數*args後面的
# 就是制定的命名關鍵字引數,在前面可變引數部分有提到
def printMsg(name, age, *args, province, city):
函式中的執行程式碼
# 此時函式的呼叫如下
printMsg("tom", 19, "tom is a cat", province="HZ", city="ZZ");
```
本節內容主要介紹python中的函式引數問題,下一節繼續介紹函式的返回值處理
相關文章
- 13.程式程式設計進階:函式程式設計函式
- 15. 程式程式設計進階:函式的返回值程式設計函式
- 前端基礎進階(七):函式與函數語言程式設計前端函式函數程式設計
- 函數語言程式設計(2) 高階函式函數程式設計函式
- Python 函數語言程式設計 – 高階函式Python函數程式設計函式
- 函數語言程式設計4-高階函式函數程式設計函式
- javascript函數語言程式設計: 優雅的使用underscore進行函式程式設計JavaScript函數程式設計函式
- Spring MVC 函數語言程式設計進階SpringMVC函數程式設計
- 程式中的函式引數函式
- JavaScript進階系列01,函式的宣告,函式引數,函式閉包JavaScript函式
- 函數語言程式設計 - 玩轉高階回撥函式函數程式設計函式
- Python技法2:函式引數的進階用法Python函式
- 函數語言程式設計-鏈式程式設計RAC函數程式設計
- Python函數語言程式設計-高階函式、匿名函式、裝飾器、偏函式Python函數程式設計函式
- 函式定義、函式的引數、函式的預設引數函式
- 程式設計習慣-函式無引數用void填充程式設計函式
- iOS鏈式程式設計及函數語言程式設計iOS程式設計函數
- 【廖雪峰python進階筆記】函數語言程式設計Python筆記函數程式設計
- 人人都能學會的python程式設計教程12:函式的引數Python程式設計函式
- Scala函式與函數語言程式設計函式函數程式設計
- 函式式思維和函數語言程式設計函式函數程式設計
- 函式程式設計函式程式設計
- Rust 程式設計影片教程(進階)——028_1 函式指標Rust程式設計函式指標
- shell程式設計進階程式設計
- js函式作為函式的引數程式碼例項JS函式
- 程式設計師的進階之路程式設計師
- 函數語言程式設計:Lambda 表示式函數程式設計
- 瞭解 JavaScript 函數語言程式設計 - 宣告式函式JavaScript函數程式設計函式
- 函數語言程式設計(一) 認識“程式設計正規化”和“函式”函數程式設計函式
- Rust 程式設計視訊教程(進階)——028_1 函式指標Rust程式設計函式指標
- scala 函式程式設計函式程式設計
- 函式程式設計之道函式程式設計
- Python 快速教程(進階篇04):函式的引數對應Python函式
- 併發程式設計進階程式設計
- JavaScript函數語言程式設計之pointfree與宣告式程式設計JavaScript函數程式設計
- 函數語言程式設計 vs 物件導向程式設計 vs 程式式程式設計的JS演示比較 - DEV函數程式設計物件JSdev
- 圖解|搞定分散式?程式設計師進階之路圖解分散式程式設計師
- Python函數語言程式設計指南(2):函式Python函數程式設計函式