当前位置:首页 > Python > 正文

Python函数参数类型与排序规则全面详解 - 编程教程

Python函数参数类型与排序规则全面详解

本文深入解析Python函数的四种参数类型及其强制排序规则,通过实际代码示例演示如何正确声明和使用位置参数、默认参数、可变参数和关键字参数。

一、Python函数参数四大类型

1. 位置参数 (Positional Arguments)

必须按顺序传递的参数,数量必须匹配

def greet(name, greeting):
    print(f"{greeting}, {name}!")

# 正确调用
greet("Alice", "Hello")  # 输出: Hello, Alice!

# 错误调用(参数顺序颠倒)
greet("Hi", "Bob")      # 输出: Bob, Hi!

2. 默认参数 (Default Arguments)

定义时指定默认值,调用时可省略

def connect(host, port=8080, timeout=10):
    print(f"连接到 {host}:{port}, 超时:{timeout}秒")

# 有效调用
connect("example.com")               # 使用默认port和timeout
connect("api.com", 8000)             # 自定义port, 默认timeout
connect("db.com", timeout=30)        # 使用关键字指定timeout

3. 可变参数 (*args)

接收任意数量的位置参数,打包为元组

def sum_values(*args):
    total = 0
    for num in args:
        total += num
    return total

print(sum_values(1, 2, 3))       # 输出: 6
print(sum_values(10, 20, 30, 40)) # 输出: 100

4. 关键字参数 (**kwargs)

接收任意数量的关键字参数,打包为字典

def build_profile(**kwargs):
    profile = {}
    for key, value in kwargs.items():
        profile[key] = value
    return profile

user = build_profile(name="Alice", age=30, occupation="工程师")
print(user)  # 输出: {'name': 'Alice', 'age': 30, 'occupation': '工程师'}

二、参数排序黄金法则

强制顺序规则:位置参数 → 默认参数 → 可变参数(*args) → 关键字参数(**kwargs)

正确声明顺序示例

# 符合规则的函数声明
def valid_func(a, b, c=10, *args, **kwargs):
    print(f"位置参数: {a}, {b}")
    print(f"默认参数: c={c}")
    print(f"可变参数: {args}")
    print(f"关键字参数: {kwargs}")

# 正确调用
valid_func(1, 2, 3, 4, 5, name="Alice", age=25)

# 错误声明(将导致SyntaxError)
# def invalid_func(a, b=2, *args, c=10, **kwargs): 
#     ...

三、综合应用实例

def create_product(name, price, category="电子产品", *sizes, **details):
    print("\n=== 产品信息 ===")
    print(f"名称: {name}")
    print(f"价格: ¥{price:.2f}")
    print(f"分类: {category}")
    
    if sizes:
        print(f"可选尺寸: {', '.join(sizes)}")
    
    if details:
        print("附加信息:")
        for key, value in details.items():
            print(f"  - {key}: {value}")

# 调用示例
create_product("智能手机", 2999.99, "数码", "64GB", "128GB", 
              color="黑色", warranty="2年")

create_product("笔记本电脑", 5999.99, "电脑", "512GB", "1TB",
               brand="ThinkPad", weight="1.5kg", os="Windows 11")

四、关键要点总结

  • 位置参数必须放在最前面且数量匹配
  • 默认参数必须声明在位置参数之后
  • *args用于接收多余的位置参数,声明在默认参数后
  • **kwargs必须放在参数列表最后,接收任意关键字参数
  • 混合使用时必须严格遵守:位置参数 → 默认参数 → *args → **kwargs
  • 调用函数时,位置参数必须在关键字参数之前传递

发表评论