day0318装饰器和内置函数

一.装饰器

1.装饰器:

解释:装饰器的本事就是一个函数,不改动主代码的情况下,增加新功能。返回值也是一个函数对象。

2.装饰器工作过程

import time
def func():
    print('主功能')
    time.sleep(1)
def timer(f):                      #形参就是替换原函数func
    def inner():
        print('开始')
        start_time=time.time()
        f()                         #调用函数func
        end_time=time.time()
        print('运行时间:',end_time-start_time)
        print('结束')

    return inner                   #这里只能是inner  不能写inner()
func=timer(func)                   #timer(func)==inner
func()

调用两个函数:

import time
def func():
    print('新加辅助功能')
    time.sleep(1)

def func1():
    print('主功能')
    time.sleep(1)
def timer(f,g):                      #形参就是替换原函数func
    def inner():
        print('开始')
        start_time=time.time()
        g()                            #调用函数func1
        f()                           #调用函数func
        end_time=time.time()
        print('运行时间:',end_time-start_time)
        print('结束')

    return inner                      #这里只能是inner  不能写inner()
func=timer(func,func1)                   #timer(func)==inner
func()

3.语法糖:

如果有多个函数,不能每次否输入#func=timer(func),何况函数名定义也是不一样的。引入语法糖。

import time
def timer(f):
    def inner():
        start_time=time.time()
        f()
        time.sleep(1)
        print(time.time()-start_time)
    return inner
@timer                                      #语法糖==>func1=timer(func1)
def func1():
    print(' 主功能 ')
func1()                

4.开放封闭原则

  1.对扩展是开放的

  必须允许代码扩展,添加新功能。

  2.修改封闭,这样不会影响其他用户使用该函数。

5.带有多个参数的装饰器

def warpper1(func):
    def inner():
        print('warpper1,before func')
        func()
        print('warpper1,after func')
    return inner

def warpper2(func):
    def inner():
        print('warpper2,before func')
        func()
        print('warpper2,after func')
    return inner
@warpper2
@warpper1
def f():
    print('in Func')
f()
结果:
warpper2,before func   #这里需要注意执行顺序。相当于两层。
warpper1,before func
in Func
warpper1,after func
warpper2,after func

二. 内置函数

1.abs(X)      #函数返回数字的绝对值,X是数字  不能是其他类型

2.all()      #函数用于判断给定的可迭代参数iterable中的所有元素都是否为TRUE,如果都是true则返回true,若含有[],{},(),0,False,none都返回False。

3.any()       #函数用于判断给定的可迭代参数iterable中的所有元素都是否为False,如果都是False则返回False,若含有[],{},(),0,False,none都返回True。

4.bin()        #返回一个整数int,或者长整型long int 的二进制表示。

5.bool()      #函数返回将给定的参数转化成布尔类型,如果没有参数,返回False。

6.bytearray()

print(bytearray([1,2,3]))
print(bytearray('中',encoding='utf-8'))
print(bytearray(5))
结果:
bytearray(b'\x01\x02\x03')
bytearray(b'\xe4\xb8\xad')
bytearray(b'\x00\x00\x00\x00\x00')

7.callable()    #函数用于检查一个对象是否可调用的。

8.chr()      #用一个范围在range(256)内的(0~255)整数作为参数,返回一个对应的字符。

9.

猜你喜欢

转载自www.cnblogs.com/Zhao159461/p/10555544.html
今日推荐