跳转至

Python函数参数类型详解

1. 参数类型概述

Python函数支持多种参数类型,使函数调用更加灵活。主要包括: - 位置参数 - 默认参数 - 关键字参数 - 可变参数

2. 位置参数(Positional Arguments)

位置参数是最基本的参数类型,调用时必须按照定义的顺序传递参数。

2.1 基本用法

def greet(first_name, last_name):
    return f"Hello, {first_name} {last_name}!"

# 调用时必须按顺序传递参数
print(greet("John", "Doe"))  # 输出: Hello, John Doe!

2.2 注意事项

  • 参数数量必须匹配
  • 参数顺序必须正确
  • 缺少参数会引发TypeError

3. 默认参数(Default Arguments)

默认参数允许在函数定义时为参数指定默认值,调用时可以省略这些参数。

3.1 基本用法

def greet(name, greeting="Hello"):
    return f"{greeting}, {name}!"

print(greet("Alice"))          # 输出: Hello, Alice!
print(greet("Bob", "Hi"))      # 输出: Hi, Bob!

3.2 注意事项

  • 默认参数必须放在位置参数后面
  • 默认值在函数定义时计算,而不是调用时
  • 可变对象(如列表)作为默认值可能导致意外结果
# 错误示例:可变对象作为默认值
def add_item(item, lst=[]):    # 不推荐
    lst.append(item)
    return lst

# 正确示例
def add_item(item, lst=None):
    if lst is None:
        lst = []
    lst.append(item)
    return lst

4. 关键字参数(Keyword Arguments)

关键字参数允许通过参数名指定参数值,不必考虑参数顺序。

4.1 基本用法

def create_profile(name, age, city):
    return f"{name} is {age} years old from {city}"

# 使用关键字参数,顺序可以不同
print(create_profile(age=25, city="Beijing", name="Tom"))
print(create_profile(name="Alice", city="Shanghai", age=30))

4.2 混合使用

def mixed_args(a, b, c):
    return f"a={a}, b={b}, c={c}"

# 位置参数和关键字参数混合使用
print(mixed_args(1, c=3, b=2))  # 正确
# print(mixed_args(a=1, 2, 3))  # 错误:位置参数不能在关键字参数后

5. 可变参数

5.1 *args(可变位置参数)

使用*args接收任意数量的位置参数,以元组形式存储。

def sum_all(*numbers):
    """计算所有参数的和"""
    return sum(numbers)

print(sum_all(1, 2, 3))        # 6
print(sum_all(1, 2, 3, 4, 5))  # 15

5.2 **kwargs(可变关键字参数)

使用**kwargs接收任意数量的关键字参数,以字典形式存储。

def print_info(**info):
    """打印所有信息"""
    for key, value in info.items():
        print(f"{key}: {value}")

print_info(name="Alice", age=25, city="Beijing")

5.3 组合使用

def combined_example(a, b=10, *args, **kwargs):
    print(f"a = {a}")
    print(f"b = {b}")
    print(f"args = {args}")
    print(f"kwargs = {kwargs}")

combined_example(1, 2, 3, 4, x=100, y=200)
# 输出:
# a = 1
# b = 2
# args = (3, 4)
# kwargs = {'x': 100, 'y': 200}

6. 参数顺序规则

在Python函数定义中,参数必须按照以下顺序排列: 1. 位置参数 2. 默认参数 3. 可变位置参数 (args) 4. 可变关键字参数 (*kwargs)

def standard_arg_order(pos1, pos2, def1="default", *args, **kwargs):
    pass

7. 实践建议

  • 使用描述性的参数名
  • 遵循Python命名规范(小写+下划线)
  • 避免使用单字母参数名(除非是约定俗成的)
  • 不要使用可变对象作为默认值
  • 默认值应该是不可变类型
  • 使用None作为可变对象的默认值占位符
  • 在文档字符串中说明参数的类型和用途
  • 说明参数的有效值范围
  • 提供参数使用示例

进一步学习