函式進階
以下介紹 Python 函式常見的進階語法。
## 1. 指定名稱的參數(Keyword Arguments)
呼叫函式時,可以直接指定參數名稱,因此不必依照參數順序傳入,程式也更容易閱讀。
```python
def introduce(name, age, city):
return f"{name} 今年 {age} 歲,住在 {city}。"
message = introduce(city="台北", name="小明", age=20)
print(message)
```
輸出:
```text
小明 今年 20 歲,住在 台北。
```
也可以使用 `*` 強制某些參數必須以名稱指定:
```python
def connect(host, *, port=80):
print(f"連線到 {host}:{port}")
connect("example.com", port=443)
```
---
## 2. 任意長度的參數
### `*args`
`*args` 可以接收任意數量的位置參數,函式內會以 tuple 形式取得。
```python
def add_all(*numbers):
total = sum(numbers)
return total
print(add_all(1, 2, 3))
print(add_all(10, 20, 30, 40))
```
輸出:
```text
6
100
```
### `**kwargs`
`**kwargs` 可以接收任意數量的指定名稱參數,函式內會以 dictionary 形式取得。
```python
def show_info(**info):
for key, value in info.items():
print(f"{key}: {value}")
show_info(name="小美", age=25, city="高雄")
```
輸出:
```text
name: 小美
age: 25
city: 高雄
```
---
## 3. 任意長度的回傳值
Python 函式可以一次回傳多個值。實際上,Python 會將它們包裝成 tuple。呼叫時可以使用多重指定接收。
```python
def calculate(a, b):
total = a + b
difference = a - b
product = a * b
return total, difference, product
sum_result, diff_result, product_result = calculate(10, 3)
print(sum_result)
print(diff_result)
print(product_result)
```
輸出:
```text
13
7
30
```
若不拆開接收,也可以直接取得 tuple:
```python
result = calculate(10, 3)
print(result) # (13, 7, 30)
```
### 重點整理
- `參數名稱=值`:使用指定名稱傳入參數。
- `*args`:接收任意數量的位置參數。
- `**kwargs`:接收任意數量的指定名稱參數。
- `return a, b, c`:一次回傳多個值,實際上會形成 tuple。
相關學習地圖、教學課程
Python 資料工程
Python 後端工程、資料庫