小白跟着大神学Python——Day12 装饰器、内置函数
装饰器
装饰器:装饰器的本质就是一个闭包,其实也就是个python函数而已。 存在的意义:在不改变原函数调用方式以及任何代码的前提下,给原函数增加了一些额外的功能。比如:登录验证,插入日志,测试执行效率等等。 简单标准版的格式: def wrapper(f): def inner(*args,**kwargs): '''执行被装饰函数前的操作''' ret = f(*args,**kwargs) #被修饰函数 '''执行被装饰函数后的操作''' return ret return inner @wrapper #语法糖 func = wrapper(func) = inner def func(): print('好好学习') func() #开放封闭原则: 1. 对扩展是开放的 为什么要对扩展开放呢?我们说,任何一个程序,不可能在设计之初就已经想好了所有的功能并且未来不做任何更新和修改。所以我们必须允许代码扩展、添加新功能。 2. 对修改是封闭的 为什么要对修改封闭呢?就像我们刚刚提到的,因为我们写的一个函数,很有可能已经交付给其他人使用了,如果这个时候我们对其进行了修改,很有可能影响其他已经在使用该函数的用户。 装饰器完美的遵循了这个开放封闭原则。
装饰器的进阶
带参数的装饰器 def outer(flag): def timer(func): def inner(*args,**kwargs): if flag: print('''执行函数之前要做的''') re = func(*args,**kwargs) if flag: print('''执行函数之后要做的''') return re return inner return timer @outer(False) def func(): print(111) func()
#多个装饰器装饰一个函数!遵循就近原则
def wrapper1(func): def inner(): print('wrapper1 ,before func') func() print('wrapper1 ,after func') return inner def wrapper2(func): def inner(): print('wrapper2 ,before func') func() print('wrapper2 ,after func') return inner @wrapper2 #f() = wrapper2(f) 里面f = inner1 外面的f = inner2 @wrapper1 #f() = wrapper1(f) 里面f = f 外面的f = inner1 def f(): print('in f') f() #inner2(inner1(f()))
内置函数
python给咱们提供了一些他认为你会经常用到的函数。
作用域相关 globals() # 函数会以字典的类型返回全局名称空间中的所有全局变量 locals() # 函数会以字典的类型返回当前名称空间的全部变量(在全局展示全局,在局部展示局部,在子级展示子级) 其他相关 1.字符串类型代码的执行 eval,exec,complie 慎用,用在写死的字符串中 eval 去除引号,执行字符串类型的代码,并返回最终结果。 比较危险,慎用 exec 执行字符串类型的代码流 complie 比较少用,有source,filename,model参数,可忽略(需要时可查看源码) 2.输入输出相关 input 接受一个标准输入数据,以字符串类型返回 print 打印输出。print(1,2,3,sep=' ',end = ' ', file = '文件名称') 可设置打印分隔和以什么结尾 3.内存相关 hash id hash 获取一个对象(可哈希对象:int,str,bool,tuple)的哈希值。注意数字哈希值为原来本身 id 用于获取对象的内存地址 4.文件操作相关 open 打开一个文件 #文件操作中详解 __import__ 函数用于动态加载类和函数。 5. help() 用于查看函数或模块用途的详细说明。 6.调用相关 callable 函数用于检查一个对象是否是可调用的。如果返回True,obj可能调用失败;但如果返回False,一定调用失败。 7.查看内置属性 dir 函数不带参数时,返回当前范围内的变量、方法和定义的类型列表;
带参数时,返回参数的属性、方法列表。 8.迭代器生成器相关 range 创建一个整数对象,一般用在for循环中。 next 内部实际使用了__next__方法,返回迭代器的下个项目。 iter 将一个可迭代对象生成为迭代器 数字类型相关 1.数据类型: bool 将给定参数转成bool值,非零即True。 int 将字符串转为整数 2.取整 3.可以二进制转换为十进制 int('0100',base = 2) float 将整数和字符串转换成浮点数 complex 创建一个real+imag*j的复数 2.进制转换: bin 十进制转换为二进制 oct 十进制转换为八进制 hex 十进制转换为十六进制 3.数学运算: abs 函数返回数字的绝对值 divmod 返回商和余数的元组 分页时候会用到print(divmod(100,9))
round 保留浮点数的小数位数,默认保留整数,整数只能保留一位 如round(10,3) #10.0
pow 求x**y此幂pow(10,3) #1000,三个参数则为对z取余 pow(10,3,10) #0
sum 对可迭代对象进行求和计算(可设置初始值) sum(iterable,初始值)
min 返回可迭代对象的最小值,可加key,key为函数名,通过函数的规则,返回最小值 print(min(l1,key = abs))
max 返回可迭代对象的最大值,可加key,key为函数名,通过函数的规则,返回最小值
4.数字结构相关 列表和元组:
list 将可迭代对象转换为列表
tuple 将可迭代对象转换为元祖
相关内置函数:
reversed 将一个序列翻转,并返回此翻转序列的迭代器!!!!
slice 构造一个切片对象 li = ['a','b','c','d','e','f','g'] sli_obj = slice(0,7,2)
5.字符串相关
format 与具体数据有关,用于计算各种小鼠精算等。
str 将数据转化为字符串
bytes 用于不同编码之间的转化 bytes(str,encoding ='utf-8') 第二种方法
bytearry 返回一个新字节数组,这个数组里的元素是可变的,并且每个元素的范围:(0,256)
memoryview
ord 输入字符找该字符编码的位置
unicode 输入位置数字找到其对应的字符
ascii 是ascii码中的返回该值,不是就返回Unicode码
chr 输入位置数字找出对应的字符
ascii 是否是ascii码的元素,是返回该值,不是返回Unicode编码
repr 返回一个对象的string形式(原形毕露)
6.数据集合:
dict 创建一个字典
set 创建一个集合
frozenset 返回一个冻结的结合,冻结后集合不能再添加或删除任何元素
len 返回一个对象中元素的个数
7.相关内置函数
sorted 对所有课迭代的对象进行排序操作 sort(self,key,reversed)
enumerate 枚举,返回一个枚举对象
all 可迭代对象中全部都是True才是True
any 可迭代对象中,有一个True为True
zip (像拉链)函数用于将可迭代的对象作为从参数,将对象中对应的元素打包成一个个元组
filter 过滤类似于列表推导式的筛选模式。返回一个迭代器
map 类似于列表推导式的循环模式,返回一个迭代器多于lambda结合
reduce 龟叔留在 from functools import reduce
浙公网安备 33010602011771号