定义仅限关键字参数

定义仅限关键字参数

Python里的函数不光支持通过有序位置参数(positional argument)调用,还能指定参数名,通过关键字参数(keyword argument)的方式调用。

比如下面这个用户查询函数:

def query_users(limit, offset, min_followers_count, include_profile):"""查询用户:param min_followers_count:最小关注者数量:param include_profile: 结果包含用户详细档案"""...

假如完全使用位置参数来调用它,会写出非常让人糊涂的代码:

# 时间长了, 谁能知道100和True分别代表什么呢?
query_users(20, 0, 100, True)

但如果使用关键字参数,代码会易读许多:

query_users(limit=20, offset=0, min_followers_count=100, include_profile=True)# 关键字参数可以不严格按照函数定义参数的顺序来传递
query_users(min_followers_count=100, include_profile=True, limit=20, offset=0)

所以,当你要调用参数较多(超过3个)的函数时,使用关键字参数模式可以大大提高代码的可读性。虽然关键字参数调用模式很有用,但有一个美中不足之处:它只是调用函数时的一种可选方式,无法成为强制要求。不过,我们可以用一种特殊的参数定义语法来弥补这个不足:

# 注意参数列表中的*符号
def query_users(limit, offset, *, min_followers_count, include_profile):

通过在参数列表中插入*符号,该符号后的所有参数都变成了“仅限关键字参数”(keyword-only argument)。如果调用方仍然想用位置参数来提供这些参数值,程序就会抛出错误:

>>> query_users(20, 0, 100, True)
# 执行后报错:
TypeError:query_users() takes 2 positional arguments but 4 were given
# 正确的调用方式
>>> query_users(20, 0, min_followers_count=100, include_profile=True)

当函数参数较多时,通过这种方式把部分参数变为“仅限关键字参数”,可以强制调用方提供参数名,提升代码可读性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/855287.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

0x0000007b应用程序错误解决

系统win7 一 问题 今天部署应用程序到win7系统上,双击应用程序弹出了0x0000007b的错误。 二 vcredist 2.1 简介 一般用Visual C开发的Windows应用程序需要这个运行时库的支持才能在没有安装Visual C的计算机上正常运行,也可以在开发软件时选择”在静…

Python爬虫实战案例之——MySql数据入库

Hello大家好,我是你们的南枫学长,咱们今天来学——爬虫之MySql数据入库。 话不多说,导入咱们的老朋友: Pymysql就是我们Python里面的mysql库,主要功能就是用来连接MySql数据库,那么下载还是一样的操作去进…

自动驾驶规划-RTT* 算法 【免费获取Matlab代码】

目录 1.算法原理3.结果展示4.参考文献5.代码获取 1.算法原理 RRT(Rapidly-Exploring Random Trees) 快速随机扩展树,是一种单一查询路径规划算法。RRT 将根节点作为搜索的起点,然后通过随机撒点采样增加叶子节点的方式,生成一个随机扩展树&a…

STM32开发过程中碰到的问题总结 - 3

文章目录 前言1. keil5升级到最新版本使用armV6编译工具链编译不通过2. 最新的keil用Jlink调试失败3. 移动了目录后跑不起来了4. 串口兼容了GNU 和arm只会,编译出来的成果物,串口输出不正常5.STM32下哪些IO口可以作为中断触发去使用6. 触发GPIO10的外部中…

如何优化 Bash 脚本的执行效率?

要优化 Bash 脚本的执行效率,可以考虑以下几个方面: 减少命令执行次数:Bash 脚本中的命令执行是比较耗时的,在可能的情况下,可以尽量减少命令的执行次数。例如,可以将多个命令合并成一个,使用管…

【Go语言】面向对象编程(二):通过组合实现类的继承和方法重写

通过组合实现类的继承和方法重写 要实现面向对象的编程,就必须实现面向对象编程的三大特性:封装、继承和多态。 1 封装 类的定义及其内部数据的定义可以看作是类的属性,基于类定义的函数方法则是类的成员方法。 2 继承 Go 语言中&#x…

数据库系统概述选择简答概念复习

目录 一、组成数据库的三要素 二、关系数据库特点 三、三级模式、二级映像 四、视图和审计提供的安全性 审计(Auditing) 视图(Views) 五、grant、revoke GRANT REVOKE 六、三种完整性 实体完整性 参照完整性 自定义完整性 七、事务的特性ACDI 原子性(Atomicity)…

大模型系列:提示词管理

既然大模型应用的编程范式是面向提示词的编程,需要建立一个全面且结构化的提示词库, 对提示词进行持续优化也是必不可少的,那么如何在大模型应用中更好的管理提示词呢? 1. 提示词回顾 提示词在本质上是向大型语言模型(…

基于Spring Boot的工具迭代

1. 申请git权限 2. git项目中点击我的-Settings-SSH Keys添加公钥 3. 公钥生成步骤 ssh-keygen -o -t rsa -b 4096 -C "your email" cd ~/.ssh/ cat id_rsa.pub 把公钥内容粘贴到SSH Keys 4. 创建本地分支git checkout -b branchname git远程仓库创建远程分支 …

GPT-4o的综合评估与前景展望

如何评价GPT-4o? GPT-4o作为OpenAI推出的最新一代大型语言模型,其性能、功能和应用前景都备受关注。以下是对GPT-4o的综合评估与前景展望: 一、技术性能评估 响应速度:GPT-4o在响应速度上有了显著提升,能够在极短的时间内对输入…

C++ 撤销重做

在C中实现redo/undo功能通常涉及到对命令或操作的历史进行追踪。这可以通过命令模式(Command Pattern)和内存中的栈结构来实现。命令模式允许你将操作封装为对象,这些对象可以被存储、排队、参数化、传递、调用,并且可以支持撤销&…

stm32f103 HAL库 HC-SR04测距

目录 一、实现测距二、添加TIM3控制LED根据距离以不同频率闪烁三、观察时序Modebus协议12路超声波雷达设计方案1. 系统架构设计2. 硬件设计3. 软件设计4. 通信协议设计5. 用户接口6. 安全和冗余7. 测试和验证8. 电源和物理封装9. 文档和支持 一、实现测距 配置时钟 配置定时器…

vue部署宝塔nginx配置(获取用户ip地址、反代理访问api接口、websocket转发)

以下配置为我自己的需求,因人而异,如果只是单纯的前端非交互页面,可以不用修改配置。 代码及注释,如下: #解决vue-router设置mode为history,去掉路由地址上的/#/后nginx显示404的问题location / {proxy_htt…

多模态大模型通用模式

MM-LLMs(多模态大模型)是目前比较新的和实用价值越发显著的方向。其指的是基于LLM的模型,具有接收、推理和输出多模态信息的能力。这里主要指图文的多模态。 代表模型:GPT-4o、Gemini-1.5-Pro、GPT-4v、Qwen-VL、CogVLM2、GLM4V、…

Ptrade和QMT的区别,怎么获取合适的量化交易软件?

​Ptrade和QMT的适用人群 交易活跃用户 量化爱好者已经专业量化投资者 高净值个人或机构 Ptrade和QMT的区别 回测和交易频率 Ptrade回测和交易只支持分钟级和日线级别的频率,而QMT支持tick级、分钟级、5分钟级、10分钟级、日线、周线、月线等。 使用QMT进行回…

Docker overlay磁盘使用100%处理方法overlay 100%

一、问题描述 服务器上运行了几个docker容器,运行个一周就会出现overlay 100%的情况,经查找,是容器里生成了很多core.xxx的文件导致的。 二、解决方法 首先通过以下命令查看: df -h 可以看的overlay已经100%了,进入到/var/lib/d…

数据库面试题-MySQL

数据库面试题-MySQL 1、数据库的三大范式是什么?2、MySQL数据库引擎有哪些?3、InnoDB与MyISAM的区别?4、数据库事务是什么?ACID是什么?5、什么是索引?6、SQL优化手段有哪些?7、简单说一说drop、delete和truncate的区别?8、什么是视图?9、什么是内联接、左外联接、右外…

计算机网络实验(9):路由器的基本配置和单臂路由配置

一、 实验名称 路由器的基本配置和单臂路由配置 二、实验目的: (1)路由器的基本配置: 掌握路由器几种常用配置方法; 掌握采用Console线缆配置路由器的方法; 掌握采用Telnet方式配置路由器的方法&#…

Java | Leetcode Java题解之第148题排序链表

题目: 题解: class Solution {public ListNode sortList(ListNode head) {if (head null) {return head;}int length 0;ListNode node head;while (node ! null) {length;node node.next;}ListNode dummyHead new ListNode(0, head);for (int subL…

26 种 prompt 套路,驯服大模型

节前,我们组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。 针对大模型技术趋势、算法项目落地经验分享、新手如何入门算法岗、该如何准备面试攻略、面试常考点等热门话题进行了深入的讨论。 总结链接如…