欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 幼教 > (六)Python中的函数参数传递

(六)Python中的函数参数传递

2025/2/24 16:35:02 来源:https://blog.csdn.net/c_lutch/article/details/145628382  浏览:    关键词:(六)Python中的函数参数传递

本文着重讲两个函数参数传递参数
目录

  1. 基本的函数传递
  2. 两个函数参数传递参数

基本的函数传递


当调用函数时,默认情况下实参会按照位置顺序传递给对应的形参,即将第一个实参传递给第一个形参,第二个实参传递给第二个形参,以此类推。在这里插入图片描述虽然位置传递的方式比较便捷,但是如果形参的数目过多,开发者很难记住每个形参的作用,这时可以通过关键字传递的方式给形参传值,这里的关键字就是形参的名称。当调用函数时,通过“形参名=实参”的形式将形参与实参关联,按照形参的名称进行参数传递,它允许实参和形参的顺序不一致。
在这里插入图片描述


仅限位置参数和仅限关键字参数


在Python 3.8及更高版本中,引入了仅限位置参数(Positional-Only Parameters)和仅限关键字参数(Keyword-Only Parameters)的概念。这些特性允许开发者更精确地控制函数的参数传递方式,从而提高代码的可读性和灵活性。

一、语法特性解析

1. 位置限定参数(Positional-Only)
使用 / 符号定义,左侧参数必须通过位置传递:

def data_loader(src, /, batch_size=32):print(f"加载 {src} | 批次大小 {batch_size}")# 合法调用
data_loader("dataset.csv")
data_loader("images/", 64)# 非法调用
# data_loader(src="text.txt")  # 违反位置限定规则

2. 关键字限定参数(Keyword-Only)
使用 * 或单独 *args 定义,右侧参数必须通过关键字传递:

def connect_db(*, host, port=3306):print(f"连接 {host}:{port}")# 合法调用
connect_db(host="localhost")
connect_db(host="10.0.0.1", port=5432)# 非法调用
# connect_db("127.0.0.1")  # 缺少关键字标识

二、设计哲学剖析

位置限定的价值场景
  • 保护参数名称:当参数名可能变化时,避免影响现有调用方
  • 数学函数适配:如 math.sin(x) 符合数学表达式习惯
  • 性能优化:跳过参数名查找,提升低层级函数效率
关键字限定的核心优势
  • 显式意图表达:强制开发者明确参数用途
  • 参数顺序自由:支持任意顺序传递关键参数
  • 扩展兼容性:新增参数不影响已有调用

三、混合模式实战

黄金组合语法(pos1, pos2, /, standard, *, kw1, kw2)

def process_file(path,  # 必须位置传参/,mode='r',  # 位置或关键字*, encoding='utf-8',  # 必须关键字validate=False
):print(f"处理 {path} | 模式 {mode} | 编码 {encoding} | 验证 {validate}")# 典型调用
process_file("data.log", "rb", encoding="ascii")  # 标准参数混合传递
process_file("config.yml", validate=True)  # 跳过可选参数

四、工程实践准则

  1. 防御性设计:公共API优先使用关键字参数
  2. 渐进式增强:新功能参数设置为关键字限定
  3. 文档规范:使用类型注解强化约束
    def transform(input: bytes, /, *, version: Literal[1, 2] = 1
    ) -> str:...
    
  4. 错误预防:结合 inspect 模块进行参数检查

总结

仅限位置参数和仅限关键字参数为Python开发者提供了更强大的工具来控制函数的参数传递方式。通过合理使用这些特性,可以使代码更加清晰、易读,并减少潜在的错误。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com