腾讯测试大佬分享4个关于 Python 函数(方法)的冷知识

关于参数标识

不知道大家在工作中有没有遇到一种情况,你的同事 A 写了一个方法给你调用,然后你调用时不知道该传什么参数,然后这个同事 A 还很 cao dan 的居然不加班!你一脸茫然的看着这个方法,当你尝试传进去一个 abc,结果代码就报错了,此时此刻你是不是很苦恼、很想把你同事 A 暴打一顿逼问他这个方法到底该传个啥进去?

那么有没有办法解决这个问题呢?答案就是让你的同事在参数上标识出参数期望接收的值是啥,代码如下:

def fun(a: list):pass

通过在 a 参数后面跟上 : list 可以标识出 a 参数期望传入一个 list 类型,相当于给 a 参数写了一个注释。

不过,在实际工作中更多的是用来标识自定义类的名称(如下图),这样标识出来,别人在调用你这个方法时就知道该传个什么东西进去了。

如果你想学习自动化测试,我这边给你推荐一套视频,这个视频可以说是B站播放全网第一的自动化测试教程,同时在线人数到达1000人,并且还有笔记可以领取及各路大神技术交流:798478386   

【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)_哔哩哔哩_bilibili【已更新】B站讲的最详细的Python接口自动化测试实战教程全集(实战最新版)共计200条视频,包括:1.【接口自动化】目前软件测试的市场行情以及测试人员能力标准。、2.【接口自动化】全面熟练Requests库以及底层方法调用逻辑、3.【接口自动化】接口自动化实战及正则和JsonPath提取器的应用等,UP主更多精彩视频,请关注UP账号。https://www.bilibili.com/video/BV17p4y1B77x/?spm_id_from=333.337.search-card.all.click

图片

另外,如果你就是不听话,非得瞎传,那会怎样呢?

答案是不会怎样,因为这个标识并没有强限制,你瞎传进去本身并不会报错(只有当程序运行到要使用这个参数时,才可能会报错。),但如果你用的是 Pychram 写代码,那大概率会给你提示的传参类型不对的警告:

图片

另外,参数标识还有一个好处,特别是依赖编译器提示的同学。比如下面的函数,我函数的功能是删除传进来的列表地一个值,但是我又忘记了 list 内置的删除方法是怎么写的了,那就可以通过将参数 a 标识为 list,然后 pychram 就能知道参数 a 应该是个 list,就可以给你提供代码提示了:

图片

关于标识返回类型

又回到刚刚那个场景,自从暴打一顿同事 A 之后,我知道了他写的方法该怎么传参之后,问题又来了,那这个方法返回个啥呢?难道要自己运行一下代码,再打印 type 去看吗?这显然也不合理!(别问哪里不合理,反正我就是这么任性,把同事 A 再打一顿....)

然后,同事 A 默默的在函数名称后面加上了一句话,就解决了这个事情:

图片

就是后面的 -> list 这里的意思就是标识出 fun 函数会返回一个 list,然后返回标识和参数标识其实都是差不多的用法,也可以返回自定义类。

关于函数的占位符

像 pass 和 ... 都是函数的占位符,多数情况下是用来类中,当类的某个方法目前还未实现或者需要子类重写时,就可以用 pass 或者 ... 来先占位,两者效果是一样的。

图片

关于限制传参方式

某天,我写了一个方法,方法的参数有很多,同事 A 这个傻子在调用我的方法时,代码一直报错,查了很久,结果发现是他传参数的顺序错了,在我暴打他一顿之后,当机立断强制要求调用我的方法时必须通过关键字参数传参,这样就可以避免参数位置错误的情况。

通过在参数前一个位置加上一个 * 号,就可以强制规定 * 号后的所有参数都只能通过关键字参数传参,否则会报错, 使用时要注意别和 *agr 和 **kwarg 的使用搞混了

图片

图片

然后在某一天,我突然想给同事 A 搞点事情(好孩子不要学),我把参数中的 * 号删除了,但我在最后一个位置加上了一个/,强制改为只能通过位置参数传参。

图片

总结一下,* 代表是 * 后的所有参数都必须通过关键字参数传参,而 / 则是 / 前的所有参数都必须通过位置参数传参,因此在使用时要注意位置不要写错了。

图片

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

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

相关文章

使用pg_prewarm缓存PostgreSQL数据库表

pg_prewarm pg_prewarm 直接利用系统缓存的代码,对操作系统发出异步prefetch请求,在应用中,尤其在OLAP的情况下,对于大表的分析等等是非常耗费查询的时间的,而即使我们使用select table的方式,这张表也并不可能将所有…

后端整理(MySql)

1 事务 1.1 事务ACID原则 原子性(Atomicity) 事务的原子性指的是事务的操作,要么全部成功,要么全部失败回滚 一致性(Consistency) 事务的一致性是指事务必须使数据库从一个一致状态转变成另一个一致性…

hugging face下载数据集

开始直接执行这个,下载下来的图片打不开 git clone https://huggingface.co/datasets/diffusers/dog-example 解决办法: 安装git lfs 1. curl -s https://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh | sudo bash 2. sudo apt…

会议OA系统会议管理模块开发思路(layui搭建)

目录 一.为什么要进行开发 1.开发目的 2.项目流程 A.发起会议请求过程 1.首先实现我们的多选下拉框功能! 2.时间组件功能,并且提交我们新增加的会议内容 3.在进行发起会议编码时遇到的问题,BUG 3.1.有点时候js访问不到路径 3.2在增加…

Ctfshow web入门 JWT篇 web345-web350 详细题解 全

CTFshow JWT web345 先看题目,提示admin。 抓个包看看看。 好吧我不装了,其实我知道是JWT。直接开做。 在jwt.io转换后,发现不存在第三部分的签证,也就不需要知道密钥。 全称是JSON Web Token。 通俗地说,JWT的本质…

【知网检索】2023年金融,贸易和商业管理国际学术会议(FTBM2023)

随着经济全球化,贸易自由化的进程加快,我国经济对外开放程度不断加深,正在加快融入世界经济一体化当中。当今世界各国竞争过程中,金融、贸易以及商业形态已成为其关键与焦点竞争内容。 2023年金融、贸易和商业管理国际学术会议(F…

神经网络简单介绍

人工神经网络(artififial neural network) 简称神经网络,它是一种模仿生物神经网络结构和功能的非线性数学模型。 神经网络通过输入层接受原始特征信息,再通过隐藏层进行特征信息的加工和提取,最后通过输出层输出结果。 根据需要神经网络可以…

【1.1】Java微服务:初识微服务

✅作者简介:大家好,我是 Meteors., 向往着更加简洁高效的代码写法与编程方式,持续分享Java技术内容。 🍎个人主页:Meteors.的博客 💞当前专栏: 微服务 ✨特色专栏: 知识分享 &#x…

使用Flutter的image_picker插件实现设备的相册的访问和拍照

文章目录 需求描述Flutter插件image_picker的介绍使用步骤1、添加依赖2、导入 例子完整的代码效果 总结 需求描述 在应用开发时,我们有很多场景要使用到更换图片的功能,即将原本的图像替换设置成其他的图像,从设备的相册或相机中选择图片或拍…

word里的页码问题

封面不需要页码怎么办 一份文档写完,如果需要页码,第一页是封面,封面不需要页码怎么办? 解决:打开页眉页脚,然后把首页不同勾选上,这一页就没有页码了。 目录页与正文页码格式不同怎么办 目录…

Istio 安全 授权管理AuthorizationPolicy

这个和cka考试里面的网络策略是类似的。它是可以实现更加细颗粒度限制的。 本质其实就是设置谁可以访问,谁不可以访问。默认命名空间是没有AuthorizationPolicy---允许所有的客户端访问。 这里是没有指定应用到谁上面去,有没有指定使用哪些客户端&#…

Mybatis引出的一系列问题-Mybatis缓存机制的探究

Mybatis 使用到了两种缓存&#xff1a;本地缓存&#xff08;local cache&#xff09;和二级缓存&#xff08;second level cache&#xff09;。 一级缓存默认是开启的&#xff0c;而且不能关闭&#xff0c;MyBatis的一些关键特性&#xff08;例如通过<association>和<…

Nginx学习教程(基础篇)

目录 一、Nginx安装 二、Nginx基本使用 2.1、目录结构 conf html logs sbin 2.2、基本运行原理 2.3、nginx.conf最小配置解析 worker_processes worker_connections include mime.types default_type application/octet-stream sendfile on keepalive_timeout…

eBay逆变器UL458检测报告

逆变器是把直流电能&#xff08;电池、蓄电瓶&#xff09;转变成交流电&#xff08;一般为220V,50Hz正弦波&#xff09;。它由逆变桥、控制逻辑和滤波电路组成。逆变器是一种DC to AC的变压器&#xff0c;它其实与转化器是一种电压逆变的过程。广泛适用于办公设备&#xff0c;生…

【MYSQL】DataGrip连接linux本地mysql失败:Connection refused

防火墙需要开放3306端口 sudo ufw allow 3306 要么就把防火墙关了&#xff1a; sudo ufw disablemysql开放连接 记住你的密码 ALTER USER rootlocalhost IDENTIFIED WITH mysql_native_password by 123456;修改配置文件 sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf这个…

Vue的 hash 模式与 history 模式

为了能够在改变视图的同时&#xff0c;不向后端发出网络请求。浏览器提供了 hash 模式与 history 模式。 而 vue 中的路由器就是利用了这两种模式&#xff0c;来实现前端路由的。 路由器的 hash 模式&#xff1a; 一、在 router 目录下的 index.js 文件中&#xff0c;通过 m…

什么是搜索引擎?2023 年搜索引擎如何运作?

目录 什么是搜索引擎&#xff1f;搜索引擎的原理什么是搜索引擎爬取&#xff1f;什么是搜索引擎索引&#xff1f;什么是搜索引擎检索?什么是搜索引擎排序&#xff1f; 搜索引擎的目的是什么&#xff1f;搜索引擎如何赚钱&#xff1f;搜索引擎如何建立索引?网页抓取文本处理建…

[Docker实现测试部署CI/CD----Jenkins集成相关服务器(3)]

目录 7、 Jenkins 集成 SonarQubeJenkins 中安装 SonarScanner下载移动修改配置文件 8、Jenkins配置SonarQube安装插件添加SonarQube添加 SonarScanner 9、Jenkins集成目标服务器 7、 Jenkins 集成 SonarQube Jenkins 中安装 SonarScanner SonarScanner 是一种代码扫描工具&am…

express学习笔记6 - 用户模块

新建router/user.js const express require(express) const routerexpress.Router() router.get(/login, function(req, res, next) {console.log(/user/login, req.body)res.json({code: 0,msg: 登录成功})})module.exportsrouter 在router/user.js引入并使用 const us…

Mybatis ,Mybatis-plus列表多字段排序,包含sql以及warpper

根据 mybatis 根据多字段排序已经wrapper 根据多字段排序 首先根据咱们返回前端的数据列来规划好排序字段 如下&#xff1a; 这里的字段为返回VO的字段,要转换成数据库字段然后加入到排序中 示例&#xff0c;穿了 surname,cerRank 多字段,然后是倒序 false 首先创建好映射&am…