美文网首页Python小推车python学习
Python学习打call第二十二天:参数注解

Python学习打call第二十二天:参数注解

作者: 暖A暖 | 来源:发表于2019-02-20 17:49 被阅读15次

    1.函数定义的弊端

    • python是动态语言,变量随时可以被赋值,且能赋值为不同的类型,动态语言很灵活,但是这种特性也是弊端;
    • 难发现:由于不做任何类型检查,直到运行期问题才显现出来,或者线上运行时才能暴露出问 题 ;
    • 难使用:函数的使用者看到函数的时候,并不知道你的函数的设计,并不知道应该传入什么类 型的数据;
    • 解决办法:可以通过增加文档Documentation String(帮助文档)和使用函数参数注解两种办法来解决这个弊端;

    2.什么是参数注解

    def show(x: int, y: int) -> int:
        '''
        :param x:
        :param y:
        :return:
        '''
        return x * y
    print(show(10,20)) # 200
    
    
    • 函数中间使用 ''' '''包裹起来的注释说明就是参数注解;

    3.使用参数注解的好处

    • 参数注解可以避免动态语音的弊端;

    • 可以对函数的参数进行类型注解和对函数的返回值进行类型注解;

    • 参数注解只对函数参数做一个辅助的说明,并不对函数参数进行类型检查;

    4.Functools模块的使用

    # 示例1
    import inspect
    
    def add(x:int, y:int, *args,**kwargs) -> int:
        return x + y
    sig = inspect.signature(add)
    print(sig) # (x: int, y: int, *args, **kwargs) -> int
    print(sig.parameters) # OrderedDict([('x', <Parameter "x: int">), ('y', <Parameter "y: int">), ('args', <Parameter "*args">), ('kwargs', <Parameter "**kwargs">)])
    
    
    # 示例2: partial偏函数
    from functools import partial
    def add(x, y):
        return x + y
    partial_add = partial(add, x=1)
    result = partial_add(y=2)
    print(result)   #输出: 3
    
    # lru_cache
    from functools import lru_cache
    import time
    
    @lru_cache()
    def add(x, y):
        time.sleep(10)
        return x + y
    
    print(add(1,2))
    print(add(2,3))
    print(add(2,3))
    print(add(2,3))
    
    • 指那些作用于函数或者返回其它函数的函数,通常只要是可以被当做函数调用的对象就是这个模块的目标;

    • lru_cache装饰器的作用就是把计算结果保存在内存中,下一次有同一个参数传入的话就不会再次进行计算;

    相关文章

      网友评论

        本文标题:Python学习打call第二十二天:参数注解

        本文链接:https://www.haomeiwen.com/subject/ruahyqtx.html