装饰器(Decorators)是 Python 的一个重要部分。简单地说:他们是修改其他函数的功能的函数。他们有助于让我们的代码更简短,也更Pythonic(Python范儿)。大多数初学者不知道在哪儿使用它们,所以我将要分享下,哪些区域里装饰器可以让你的代码更简洁。 首先,让我们讨论下如何写你自己的装饰器。
这可能是最难掌握的概念之一。我们会每次只讨论一个步骤,这样你能完全理解它。
import time #定义一个函数 x=func#把foo的内存地址富裕给了x x就是foo 的内存地址 #把func 形参赋值给x变量 def wapeer(): #定义个函数 s_time=time.time() x()#就是执行foo() ss_time=time.time() print(ss_time-s_time) return wapeer #定义函数的时候,西边的代码睡返回的内存地址 #把函数名 当做值返回 @inner #foo= inner(foo)#被装饰的函数正上方加一个装饰器的名字 def foo(): print("is ") foo()
@ 语法糖
如果你接触 Python 有一段时间了的话,想必你对 @ 符号一定不陌生了,没错 @ 符号就是装饰器的语法糖,它放在函数开始定义的地方,这样就可以省略最后一步再次赋值的操作。 def use_logging(func): def wrapper(): logging.warn("%s is running" % func.__name__) return func() return wrapper @use_logging def foo(): print("i am foo") foo()
如上所示,有了 @ ,我们就可以省去foo = use_logging(foo)这一句了,直接调用 foo() 即可得到想要的结果。你们看到了没有,foo() 函数不需要做任何修改,只需在定义的地方加上装饰器,调用的时候还是和以前一样,如果我们有其他的类似函数,我们可以继续调用装饰器来修饰函数,而不用重复修改函数或者增加新的封装。这样,我们就提高了程序的可重复利用性,并增加了程序的可读性。
装饰器在 Python 使用如此方便都要归因于 Python 的函数能像普通的对象一样能作为参数传递给其他函数,可以被赋值给其他变量,可以作为返回值,可以被定义在另外一个函数内。
内置函数:
print(abs(-10))#绝对值 print(all([1,2,3,]))#检验迭代对象 都为真的时候才为真 print(any[0,0,0,1,]) #有一个为真的时候就为真 print(ascii("aelx"))#在ascii码中原生显示 b=bytearray("meet",encoding="utf-8") print(b[0])
sorted 排序
例题:
dic= {1:2,3:4} ls=[1,2,3,4,5] def func(ls): lst=[] for i in ls: lst.append(i**i) return lst print(sorted(func(ls),reverse=True)) print(sorted(dic.values(),reverse=True)) print(sorted({1:2,3:4},reverse=True))
filter 过滤:
例题:
dic = [{"name":"alex","age":17},{"name":"aqwe","age":19}] print(list(filter(lambda x:x["age"]>17,dic)))
map () 映射函数 可以快速将多个元素相同的可迭代对象进行上下累加=返回的是一个数据
lst=[11,200,300,400,505] def func(x): return x**2 print(list(map(func,lst)))
reduce# 快速求一个可迭代对象的累计算
round # 四舍五入