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

Python函数参数传递完全指南 - 掌握5种参数传递方式

Python函数参数传递完全指南

掌握位置参数、关键字参数、默认参数、可变参数(*args, **kwargs)等5种参数传递方式

Python参数传递基础

在Python中,函数参数的传递方式决定了如何将数据传递给函数。理解不同的参数传递方式能让你编写更灵活、可读性更强的代码。

位置参数

最常见的参数传递方式,参数按顺序依次传递

关键字参数

通过参数名指定值,提高代码可读性

默认参数

为参数提供默认值,调用时可省略

位置参数

位置参数是最基本的参数传递方式,按照函数定义时参数的顺序传递值。

示例代码

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

# 使用位置参数调用
greet("Alice", "Hello")  # 输出: Hello, Alice!
greet("Bob", "Hi")       # 输出: Hi, Bob!

注意事项

  • 参数顺序必须与函数定义一致
  • 参数数量必须匹配
  • 位置参数必须放在关键字参数前面

关键字参数

关键字参数通过参数名指定值,使代码更易读,且不必记住参数顺序。

示例代码

def describe_pet(animal_type, pet_name):
    print(f"I have a {animal_type} named {pet_name}.")

# 使用关键字参数调用
describe_pet(animal_type="hamster", pet_name="Harry")
describe_pet(pet_name="Whiskers", animal_type="cat")

优点

  • 提高代码可读性
  • 不必记住参数顺序
  • 避免位置错误

限制

  • 关键字参数必须在位置参数之后
  • 参数名必须准确匹配

默认参数

默认参数允许为函数参数提供默认值,调用时可省略这些参数。

示例代码

def make_shirt(size="large", message="I love Python"):
    print(f"制作一件{size}号T恤,印有: '{message}'")

# 使用默认参数
make_shirt()  # 使用所有默认值
make_shirt(size="medium")  # 修改size,message使用默认值
make_shirt("small", "Hello World!")  # 位置参数

重要原则

  • 默认参数必须放在非默认参数之后
  • 默认值在函数定义时计算一次(注意可变对象的问题)
  • 默认参数使函数调用更简洁

可变参数 (*args 和 **kwargs)

当不确定要传递多少参数时,可以使用可变参数。

*args - 可变位置参数

收集所有位置参数到一个元组

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

print(sum_numbers(1, 2, 3))  # 输出: 6
print(sum_numbers(4, 5, 6, 7))  # 输出: 22

**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="Engineer")
print(user)  # 输出: {'name': 'Alice', 'age': 30, 'occupation': 'Engineer'}

组合使用规则

在函数定义中,参数顺序必须遵循:

  1. 位置参数
  2. 默认参数
  3. *args
  4. 关键字参数
  5. **kwargs
def complex_function(a, b=2, *args, c=3, **kwargs):
    print(f"a={a}, b={b}, c={c}")
    print(f"args: {args}")
    print(f"kwargs: {kwargs}")

complex_function(1, 4, 5, 6, c=7, d=8, e=9)

参数传递机制

Python中的参数传递既不是值传递也不是引用传递,而是"对象引用传递"。

不可变对象

数字、字符串、元组等不可变对象在函数内修改会创建新对象

def modify_number(x):
    x = x + 10
    print("函数内:", x)

num = 5
modify_number(num)
print("函数外:", num)  # 输出: 5 (未改变)

可变对象

列表、字典等可变对象在函数内修改会影响原始对象

def modify_list(lst):
    lst.append(4)
    print("函数内:", lst)

my_list = [1, 2, 3]
modify_list(my_list)
print("函数外:", my_list)  # 输出: [1, 2, 3, 4] (已改变)

掌握Python参数传递

灵活运用位置参数、关键字参数、默认参数和可变参数,将使你的Python函数更加强大和灵活。

开始编写更强大的Python函数

发表评论