zoukankan      html  css  js  c++  java
  • 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'x01x02x03')
    bytearray(b'xe4xb8xad')
    bytearray(b'x00x00x00x00x00')
    

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

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

    9.locals()      #函数会议字典的类型返回当前位置的全部局部变量

       globals()         #函数以字典的类型返回全部变量

    a=123
    b=[15,55,58]
    def fun():
        c=1
        print(locals())
        print(globals())
    fun()
    结果:
    
    {'c': 1}
    {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object
    

    10.eval()    #执行字符串代码,并返回最终结果

    print(eval(input('多岁的')))         #具有执行功能
    print(eval('2+8'))
    结果:
    多岁的
    10
    

    11.exec()    #执行字符串类型的代码。

    s='''
    for i in [1,2,3]:
        print(i)
    '''
    exec(s)                    #执行s的字符串的代码
    结果:
    1
    2
    3
    

    12.compile()      #将字符串类型的代码编译,代码对象能够通过exec语句来执行或者eval进行求值。

    13.hash id  内存相关      #获取一个对象,(可哈希对象:int,str,bool,tuple)的哈希值。

    14.open()       #用于打开一个文件,创建一个file,相关方法调用读写。

    15.help()        #函数用于查看函数或模块用的详细说明。

    16.callable()      #函数用于检查一个对象是否可调用。如果返回True,object仍然可能调用失败;如果返回是False,object绝对不会成功。

    17.dir           #函数不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。如果参数包含方法__dir__(),该方法将被调用。如果参数不包含__dir__(),该方法将最大限度地收集参数信息。

  • 相关阅读:
    angular源码分析:angular中$rootscope的实现——scope的一生
    angular源码分析:图解angular的启动流程
    angular源码分析:angular的整个加载流程
    angular源码分析:injector.js文件分析——angular中的依赖注入式如何实现的(续)
    angular源码分析:angular中jqLite的实现——你可以丢掉jQuery了
    第二章:互联网的进化成型
    angular源码分析:angular的源代码目录结构说明
    angular源码分析:angular中各种常用函数,比较省代码的各种小技巧
    angular源码分析:angular中的依赖注入式如何实现的
    【Linux】Shell基础命令、文件软(硬)链接的理解
  • 原文地址:https://www.cnblogs.com/Zhao159461/p/10555544.html
Copyright © 2011-2022 走看看