函数注解、functools模块

函数:
函数参数注解:
Python3.5引入:
1,对函数的参数进行类型注解
2,对函数的返回值进行类型注解
3,只对函数参数做一个辅助的说明,并不对函数参数进行类型检查
4,提供给第三方工具,做代码分析,发现隐藏的bug
5,函数注解的信息,保存在annotations属性中
annotations属性:
add.annotations # 返回 {‘return’: int, ‘x’: int, ‘y’: int}

    代码:
        def add(x:int, y:int) -> int:
            return x + y
    变量注解3.6引入:
    代码:
        def add(x:int = 3, y:int = 4):
            return x + y

    业务应用:
        函数参数类型检查:

        思路:
            1,函数参数的检查,一定是在函数外
            2,函数应该作为参数,传入到检查中
            3,检查函数拿到函数传入的实际参数,与形参声明对比

    函数定义的弊端:
        1,Python是动态语言,变量随时可以被赋值,且能赋值为不同的类型
        2,Python的变量类型是在运行时决定的
        3,
inspet模块:
    介绍:提供获取对象信息的函数,可以检查函数和类、类型检查。
    signature(callable):
        介绍:获取签名(函数签名包含了一个函数的信息,包括函数名、它的参数类型、它所在的类和名称空间及其他信息)
        sig = inspect.signature(add) 
        #返回 <Signature (x:int, y:int) -> int>
        import inspect

        def add(x, y:int=7, *args, z, t=10, **kwargs) -> int:
            return x + y
        sig = inspect.signature(add)
        print(sig)

    parameters:
        介绍:inspect.signature函数返回一个inspect.Signature对象。这个对象有parameters属性。
        这是一个有序的字典;把参数名和inspect.Parameter对象对应起来。

        # mappingproxy({'x': <Parameter "x:int">, 'y': <Parameter "y:int">})
        1,保存在元组中,是只读的
        name:参数的名字
        annotation:参数的注解
        default:参数的缺省值
        empty:特殊的类,用来标记default属性或注释annotation属性的空值
        kind:实参如何绑定到形参,就是形参的类型
            POSITIONAL_OR_KEYWORD:值可以作为关键字或者位置参数提供
            VAR_POSITIONAL:可变位置参数,对应*args
            KEYWORD_ONLY:keyword-only参数,对应*或者*args之后的出现的非可变关键字参数
            VAR_KEYWORD:可变关键字参数,对应**kwargs

标准库中的装饰器:

property:

classmethod:

staticmethod:

functools模块:
    1,@functools.wraps:
        解释:使用functools.wraps装饰器把相关的属性从被装饰的函数复制到装饰函数中。

    2,partial
        解释:基于一个函数创建一个新的可调用对象,把原函数的某些参数固定。
        应用:使用这个函数可以把接受一个或多个参数的函数改编成需要回调的API,这样参数更少!
            示例:
            def add(x, y):
                return x + y
            from functools import partial
            triple = partial(add, 3)

    3,functools.lru_cache:
        解释:这是一项优化技术,它把耗时的函数的结果保存起来,避免传入相同的参数时重复计算。
            应用:@functools.lru_cache(maxsize=128, typed=False)
                maxsize:指定存储多少个调用的结果,缓存满了之后,旧的结果会被丢弃,腾出空间。
                    1,maxsize是二的幂。
                typed:如果为True,把不同参数类型得到的结果分开保存,即把浮点数和整数区分开。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值