资讯专栏INFORMATION COLUMN

Python每日小知识(6)函数滴参数

andot / 2483人阅读

摘要:默认参数这家伙还是有点点瑕疵的,默认参数必须一定以及肯定得指向不可变对象。写完这顽固不化的默认参数,就轮到灵活多变的可变参数上场了。

函数的参数

总结一下这几种参数先:本来位置是默认滴,后来不知咋地可变了,位置上还用关键字这么上档次的名字命名关键字了。

先讲讲废话:我们做接口自动化或者其它测试,总之需要使用一些参数的时候,我们作为函数的调用者,无需了解太多,你只需要肤浅的知道如何如何滴传递准确无误的参数以及知道函数将返回什么值即可,这样就可以完美的完成工作了,至于那些内部复杂的逻辑被封装起来了,作为调用者暂时就不考虑啦。

(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)如果函数定义中已经有一个可变参数了,后面的命名关键字参数就不需要分隔符*了。

下面来个对比操作就一目了然了

直接对*后的参数赋值就会报错。

来个大杂烩例子:

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/41496.html

相关文章

  • Python每日知识(2):字符串和编码

    摘要:表示的通过方法可以编码为指定的。有图有真相没看错就是这么简单,但是要注意有中文的这种异类是无法用帅气的编码的,因为中文编码的范围超过了编码所能承受帅气的范围,会报错。 了解:ASCII编码(是1个字节)仍然可以完美滴处理数字,因为最早的时候只有127个字符编入计算机,但是遇到处理中文1个字节就有点捉襟见肘了,这时候我们就脑壳疼了,所以中国制定了GB2312编码,用来把中文编进去;然后各...

    gyl_coder 评论0 收藏0
  • Python每日知识(5):调用和定义函数

    摘要:再调用个绝对值内置函数来加深影响心急吃不了热豆腐啊有且仅能传入一个参数,传入不符合数量的参数就会报错误传入的参数数量是没错了,但传入错误的参数类型也是会死的很惨的。 调用函数 干货:Python官网查看函数帮助信息 http://docs.python.org/3/libr... showImg(https://segmentfault.com/img/bV71Kn?w=348&h=8...

    yibinnn 评论0 收藏0
  • Python每日知识(3):list和tuple的使用

    摘要:同样的用上节讲的函数获取元素的个数记住这是获取的是列表个数个数个数重要的事说三遍。用索引访问每个元素的位置,索引是从开始的开始的开始的索引也是有容忍限度的超过了就会原地爆炸报错如果列表中元素个数贼多,想获取后面的元素就要实行曲线救国了。 list和tuple是Python内置的有序集合,一个是可变的,一个是不可变滴;这都不是事,主要是理解一下指向不变。 看图说话: showImg(ht...

    SoapEye 评论0 收藏0
  • Python纪念册】哪些浪漫至极的表白程序—“你做我的男孩,我做你的宇宙”

    摘要:完整的资料源码都打包等你来取哈免费滴直接视频效果展示如下纪念册哪些浪漫至极的表白程序截图展示如下界面漫天花瓣飞舞。  导语 大家好,我是木木子!​​ 今日的表白案例上线啦~有没有期待?安排安排!源码基地见免费源码哈! 贴心的木子君也给你们好多爱心花瓣、以及表白的小程序!在主页的左侧哦! 这款...

    aisuhua 评论0 收藏0
  • Python每日知识(1):输入和输出、数据类型和变量

    摘要:理解了输入输出,就可以简单的打印有意义的程序了比如打印先输入回车输入或其它内容,存入变量输入当然为了用户体验更好,可以适当的添加一些提示信息数据类型和变量整数常用十六进制表示与数学上表示方法一样等。常量不能变的量,通常用大写字母表示 1、输出函数:Print() 接受多个字符串时用逗号隔开(相当于空格),就可连成一串输出。 showImg(https://segmentfault.co...

    546669204 评论0 收藏0

发表评论

0条评论

andot

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<