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

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

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

相关文章:

  • 电商网站开发会遇到哪些问题江阴企业网站制作
  • 做网站 用asp上海网络推广排名公司
  • 家用电脑和宽带做网站南昌百度搜索排名优化
  • 城建公司建设网站基础资料一站式网站建设公司
  • 建设网站360获客软件排名前十名
  • 电商网站建设合同模板下载谷歌浏览器并安装
  • (四)数据检索与增强生成——让对话系统更智能、更高效
  • 微软的 Copilot 现在可以浏览网页并为您执行操作
  • Qt中左侧项目菜单中构建设置功能中的构建步骤是怎么回事
  • 数字内容个性化推荐引擎构建
  • 计算机网络实验(包括实验指导书)
  • 可视化工具
  • STM32 × CLion 新建项目
  • 人工智能(AI)入门篇:什么是人工智能?什么是生成式人工智能?
  • 浅入浅出:从传统开发者角度去了解区块链和智能合约之间的关系
  • 【安全】简单解析统一身份认证:介绍、原理和实现方法
  • DevOps与Docker的关系
  • 微信小程序开发-02.准备工作
  • uniapp地图导航及后台百度地图回显(v2/v3版本)
  • MySQL介绍及使用
  • 数智跃迁ethercat转profinet网关开启abb机器人未来制造新篇
  • 【Nova UI】五、解锁 SASS 魔法,优雅实现 BEM 规范
  • WordPress浮动广告插件+飘动效果客服插件
  • 开源 PDF.js 文件编辑操作
  • ETF 场内基金是什么?佣金最低又是多少呢?
  • 【微机及接口技术】- 第四章 内部存储器及其接口(下)