函数的参数
总结一下这几种参数先:本来位置是默认滴,后来不知咋地可变了,位置上还用关键字这么上档次的名字命名关键字了。先讲讲废话:我们做接口自动化或者其它测试,总之需要使用一些参数的时候,我们作为函数的调用者,无需了解太多,你只需要肤浅的知道如何如何滴传递准确无误的参数以及知道函数将返回什么值即可,这样就可以完美的完成工作了,至于那些内部复杂的逻辑被封装起来了,作为调用者暂时就不考虑啦。
(1) 位置参数:顾名思义就是排排坐,按位置赋值就这么简单。
先计算X三次方的值:下面对于power()函数而言,参数x就是位置参数,但有且仅能传入一个参数,传入过多就是作死的行为了。
如果要计算X的n次方,就要传入两个参数了,只要对应位置即可
默认参数:作用就是简化函数的调用,也有需要小心的地方
(1) 必选参数必须在前,默认参数在后;
(2) 有较多参数摆在面前时,变化较大参数在前,变化较小的在后并作为默认参数;
比如传入记录信息的函数,需要传入author、tel两个参数
这时调用report()函数后输入两个参数值即可
当然两个参数的对于那些登录的账号、密码这操作完全没问题,但如果是一些表单需要填入住址、电话、婚史、收入等信息,那后期调用函数的复杂度大大增加,所以我们就可以靠默认函数把信息不大变动的参数设置为默认值再进行调用抛砖引玉一番:把地址和收入设置为默认参数
若是与我们设置的默认参数不符合,只能自己动动手指添加对应的额外信息啦。
默认参数这家伙还是有点点瑕疵的,默认参数必须一定以及肯定得指向不可变对象。 现在用典型的list来举个例子(因为这家伙内容可变)
下面这是老掉牙的正常调用了,结果没毛病
再用默认参数调用三次,看结果就惊呆了,每次出来的结果都记住了上次的内容,这就很尴尬了。
原因在于L列表是一个变量并指向[],每调用一次函数就会改变[]里的内容(上面提过了这里的内容是可变的),下次再调用的时候,默认参数里的内容就刷的一下改变了,所以才会处出现上面尴尬的场景。有矛就有盾:使用None/str等这些不可变对象来解决问题,使用这些不可变对象可以大大滴降低修改数据导致的错误,更重要的是在多任务环境的情况下,对象不变,同时读取对象就不需要加锁,也不会出现问题。
写完这顽固不化的默认参数,就轮到灵活多变的可变参数上场了。
(2)可变参数:字面上的意思,想要多少个就多少个(0到任意个)只需要在参数前面加个*就可以轻松搞定啦,来点干货:定义一个函数,输入任意个参数,返回参数数值之和除以字符数的结果。
(3)现在可以坐下来谈谈关键字参数啦讲这个之前先了解一下Python内置字典dict,使用键-值(key-value)进行存储,主要是用来查到内容,讲到查找就会不自觉的想起我们之前相亲相爱的list了。
假设说阿里的员工有几万人,你要从中查找一个人所对应的工资,那我们就要先从names中,查找出这个人的名字的位置,然后工资salary中取出相应的工资,这种方式会因为list元素的增加导致查找时间延长;如果用我们机智的dict,直接用就可以用名字查找工资,尽管这个表有三千尺,查找速度也是丝毫不会耽搁。
真枪实弹才是真理:
这玩意就像字典一样可以根据条件查找,也可以收集新的东西进去。
并且dict只有一对一的节奏,不带多对一的形式(key-value)
字典嘛肯定不可能所有东西都能查出来滴,一旦查不出来就得报错了,所以我们就要通过一些手段来判断这个key存不存在了。
(1) 使用dict提供的get()方法判断key是否存在以及判断后返回的内容;
(2) 删除dict中的一个key就使用pop(key)方法。
好了这个半路杀出的程咬金就讲到这里,小小的总结一波;
(1) 首先要知道为甚么list查找的速度会比dict慢的多,就是你拿着字典为了找个字一种是一页一页翻着找,另一种是通过偏旁部首去找,显而易见肯定后者更快,所以说list查找和插入的速度,不会因为key贼多就变慢;(2) 有利就有弊,虽然list在查找和插入的速度方面不讨喜,但是人家占用的空间少那内存基本上就不会浪费了,而dict就是利用空间来换取时间的做法,极其可耻的浪费了极多内存;
(3) 还要注意的是dict中的key必须是不可变对象、不可变对象、不可变对象;
(4) 这个通过key准确计算位置的算法就叫:(Hash)哈希算法。
下面步入正轨
所谓的关键字参数呢就是允许你可以传入0-N个含参数名的参数(其中还可写入必选参数),并且这些关键字参数会很自觉的组装成刚刚我们所讲的dict
这跟可变参数就是一个和两个*的区别。
(5)最后一波进攻:命名关键字参数
(如果传入的参数过多,而在调用的时候不需要全部使用就中间插入一个*,后面的参数就是你要调用的,至于前面的就让他们放飞自我了)
> 要注意的是
(1)使用命名关键字参数必须要传入参数名,否则就得炸了。
(2)如果函数定义中已经有一个可变参数了,后面的命名关键字参数就不需要分隔符*了。
下面来个对比操作就一目了然了
直接对*后的参数赋值就会报错。
来个大杂烩例子:
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。