Python-函数参数

在这里插入图片描述

1. 参数基础

函数参数是向函数传递数据的主要方式,Python 提供了多种参数传递机制。

基本用法

def greet(name):  # name 是形式参数
    print(f"Hello, {name}!")

greet("Alice")  # "Alice" 是实际参数

使用场景:当函数需要外部数据来完成其操作时

2. 参数类型

2.1 位置参数 (Positional Arguments)

最常见的参数类型,按位置顺序传递

def power(base, exponent):
    return base ** exponent

print(power(2, 3))  # 8

最佳实践

  • 将最重要的参数放在前面
  • 避免超过5个位置参数,否则考虑使用对象或字典

2.2 关键字参数 (Keyword Arguments)

通过参数名指定,不依赖位置

print(power(exponent=3, base=2))  # 8

优势

  • 提高代码可读性
  • 允许跳过某些参数

2.3 默认参数 (Default Arguments)

定义函数时指定默认值

def power(base, exponent=2):  # exponent默认为2
    return base ** exponent

print(power(3))  # 9
print(power(3, 3))  # 27

重要规则

  • 默认参数只计算一次(对于可变对象要特别注意)
  • 默认参数应放在参数列表最后

2.4 可变参数

2.4.1 *args - 可变位置参数

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

def sum_all(*numbers):
    return sum(numbers)

print(sum_all(1, 2, 3))  # 6

使用场景:不确定需要接收多少参数时

2.4.2 **kwargs - 可变关键字参数

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

def print_info(**info):
    for key, value in info.items():
        print(f"{key}: {value}")

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

最佳实践:常用于包装函数或配置参数传递

3. 参数解包

3.1 列表/元组解包 (*)

def func(a, b, c):
    print(a, b, c)

args = [1, 2, 3]
func(*args)  # 1 2 3

3.2 字典解包 (**)

kwargs = {'a': 1, 'b': 2, 'c': 3}
func(**kwargs)  # 1 2 3

应用场景:从其他函数获取参数后传递

4. 参数传递机制

Python 使用"对象引用传递"(按共享传参)

def modify_list(lst):
    lst.append(4)  # 修改会影响原对象

my_list = [1, 2, 3]
modify_list(my_list)
print(my_list)  # [1, 2, 3, 4]

重要特性

  • 不可变对象(数字、字符串、元组)表现为"按值传递"
  • 可变对象(列表、字典)表现为"按引用传递"

5. 类型提示 (Python 3.5+)

def greeting(name: str, age: int = 18) -> str:
    return f"{name} is {age} years old"

优势

  • 提高代码可读性
  • IDE 能提供更好的代码补全和检查
  • 可使用 mypy 进行静态类型检查

6. 参数最佳实践

  1. 保持参数数量合理:理想情况下不超过5个
  2. 使用关键字参数提高可读性,特别是布尔参数
  3. 避免可变默认参数:默认值应为不可变对象
  4. 合理使用类型提示:特别是公共API
  5. 参数顺序:位置参数 → 默认参数 → *args → **kwargs

7. 高级技巧

仅限关键字参数

def func(a, b, *, c, d):  # c和d必须用关键字传递
    pass

func(1, 2, c=3, d=4)  # 正确
func(1, 2, 3, 4)      # 错误

参数注解

def func(a: 'description', b: int = 5) -> 'return description':
    pass

应用:文档生成或参数验证框架

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Aerkui

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值