您的位置:首页 > 编程语言 > Python开发

python学习之路-4 内置函数和装饰器

2016-05-30 00:40 721 查看

本篇涉及内容

内置函数

装饰器

内置函数

callable() 判断对象是否可以被调用,返回一个布尔值

chr() 将十进制整数转换为ascii编码中对应的字符

ord() 将字符转换成ascii编码表中对应的十进制整数

dir() # 查看一个对象有哪些功能

help() 查看对象的使用方法

divmod() # 通过除数和被除数返回一个元组(商, 余数) 做分页比较有用

isinstance() 判断对象是否是一个类的实例, 返回一个布尔值

enumerate() 用于遍历序列中的元素以及它们的下标

filter(函数名, 可迭代对象) 调用函数,将可迭代对象中的每一个元素传给函数去执行,返回的结果为True则保留该元素,将保留的元素组成一个列表,将该列表作为返回值

map(函数,可迭代对象) 调用函数,将可迭代对象中的每一个元素传给函数去执行,返回的结果组成一个列表,将该列表作为返回值

globals() # 全局变量 locals() # 局部变量

hash() 通过hash计算出一个全数字的值

len() python2.7 字节长度 python3 字符长度

bytes() 将字符转成字节

max() 求最大值

min() 求最小值

sum() 求和

pow() 求幂次方

reversed() 反转 和list的reversed()方法一样

round() 四舍五入

slice() 跟切片的方法一样 没什么卵用,比切片还麻烦

sorted() 排序

type() 查看对象类型

zip() 将多个列表的相对应的位置进行组合成一个元组,元组作为元素产生新的列表

装饰器

装饰器可以在不改变函数体和函数调用的情况下在该函数执行之前,或者执行之后进行额外的操作

装饰器的功能

自动执行装饰器函数,并将被装饰函数的函数名当做参数传递给装饰器函数

将装饰器函数的返回值,重新赋值给被装饰函数

装饰器之案例演变

创建一个简单的函数,该函数的内容为输出nginx告警信息,该函数同时被A部门调用

新的需求来了,A部门说需要在输出告警之前和输出告警之后分别输出"即将告警"和"告警结束",然后我们对上面的代码做如下修改:

新的问题出现了,A部门老大说你这个修改了原来函数的代码,有没有办法在不修改函数代码的基础上完成这个功能啊,思考半天,灵机一动,想到一个办法,代码如下:

总结了一下A部门老大的需求就是要想不改变函数调用方式的情况下去对原函数做扩展,然后就有了下面的装饰器:

上面代码流程详解:


使用了装饰器之后执行发现,我并没有调用函数,但是自己就执行了,这肯定不是我想要得结果,然后继续百度、谷歌。。。各种FQ各种搜最后,代码修改如下:

上面代码流程详解:



过了几天,A部门老大跑过来对我说:"你看能不能这样,这个只能够对nginx做告警,我现在需要对mysql也要做告警,你能不能在底层函数上面加一个参数,然后我把告警的信息当做参数给传进去",然后我又一顿狂搜,搞出来的代码如下:

过了没几天,他又跑过来,说mysql告警的时候需要传多个参数,nginx告警只需要传一个参数,你看能否搞下,然后我又进入到狂搜的状态,最后搞出来代码如下

过了没两天又跑来找我,说底层函数没有返回值,我需要一个返回值,然后经过一顿的狂搜,搞到下面的代码

来自为知笔记(Wiz)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: