今天是周日, 简单写点吧, 简单总结一下 Python 中函数参数

Python Function Parameters

Python 函数参数机制非常灵活丰富, 理解各种参数类型及其用法对于写出优雅、易维护的代码非常重要. 本文将介绍 Python 中函数参数的种类与用法, 并详细讲解 Python 3.8 引入的参数分隔符 / 和 *, 帮助你更好地设计函数接口.

1. Postional Arguments 位置参数

函数定义中最常见的参数, 调用时按顺序传入值

PYTHON
def greet(name, age):
    print(f"Hello, {name}. You are {age} years old.")

greet("Alice", 30)  # Hello, Alice. You are 30 years old.
Click to expand and view more

2. Keyword Arguments 关键字参数

调用时以 key=value 形式传入, 顺序可变

PYTHON
greet(age=30, name="Alice")
Click to expand and view more

3. Default Arguments 默认参数

定义函数时给参数赋默认值, 调用时可省略

PYTHON
def greet(name, age=20):
    print(f"Hello, {name}. You are {age} years old.")

greet("Bob")        # 使用默认年龄20
greet("Bob", 25)    # 指定年龄
Click to expand and view more
PYTHON
def greet(names: list[str] = ["Alice", "Bob"]):
    ...
Click to expand and view more

若希望使用默认值, 建议使用下面这种方法

PYTHON
def greet(names: list[str] | None = None):
    if not names:
        names = ["Alice", "Bob"]
    ...
Click to expand and view more

同样的, 默认值参数如果为一个表达式, 则是在定义时求值, 而非运行改函数时才求值

4. *args 可变位置参数

用于接收任意数量的位置参数, 形成元组

PYTHON
def sum_all(*args):
    return sum(args)

sum_all(1, 2, 3)  # 6
sum_all()         # 0
Click to expand and view more

5. **kwargs 可变关键字参数

用于接收任意数量的关键字参数, 形成字典

PYTHON
def print_info(**kwargs):
    for k, v in kwargs.items():
        print(f"{k} = {v}")

print_info(name="Alice", age=30)
Click to expand and view more

/ 和 * 的用法

Python 3.8 引入了两种新的函数参数分隔符: 斜杠 /(forward slash) 和 星号 *(asterisk) 符号, 用于更精细地控制参数的调用方式

Postional-only parameters (/)

斜杠前的参数必须通过位置传递, 不能用关键字传递

PYTHON
def func(a, b, /, c, d):
    print(a, b, c, d)
Click to expand and view more

调用时

PYTHON
func(1, 2, c=3, d=4)   # 正确
func(1, 2, 3, 4)       # 也正确
func(a=1, b=2, c=3, d=4)  # 错误,a 和 b 不能用关键字传递
Click to expand and view more

用途:

Keyword-only parameters (*)

星号后的参数必须用关键字传递, 不能用位置传递

PYTHON
def func(a, b, *, c, d):
    print(a, b, c, d)
Click to expand and view more

调用时

PYTHON
func(1, 2, c=3, d=4)   # 正确
func(1, 2, 3, 4)       # 错误,c 和 d 只能用关键字传递
Click to expand and view more

用途:

Use both / and *

/* 也可以同时使用

PYTHON
def func(a, b, /, c, d, *, e, f):
    print(a, b, c, d, e, f)
Click to expand and view more

调用时

Start searching

Enter keywords to search articles

↑↓
ESC
⌘K Shortcut