关于参数标识
不知道大家在工作中有没有遇到一种情况,你的同事 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 搞点事情(好孩子不要学),我把参数中的 * 号删除了,但我在最后一个位置加上了一个/,强制改为只能通过位置参数传参。
总结一下,* 代表是 * 后的所有参数都必须通过关键字参数传参,而 / 则是 / 前的所有参数都必须通过位置参数传参,因此在使用时要注意位置不要写错了。