• 泛型函数


    import functools
    
    @functools.singledispatch()
    def myfunc(arg):
      print("default myfunc({!r})".format(arg))
    
    @myfunc.register(int)
    def myfunc_int(arg):
      print("myfunc_int({})".format(arg))
    
    @myfunc.register(list)
    def myfunc_list(arg):
      print('myfunc_list()')
      for item in arg:
        print('  {}'.format(item))
    
    myfunc('string argument')
    myfunc(1)
    myfunc(2.3)
    myfunc(['a', 'b', 'c'])
    
    新函数的register()属性相当于另一个修饰符,用于注册替代实现。用singledispatch()包装的第一个函数就是默认实现,
    在未指定其他类型特定函数时就使用这个默认实现,在这个例子中特定类型就是float
    """print
    default myfunc('string argument')
    myfunc_int(1)
    default myfunc(2.3)
    myfunc_list() a b c
    """
    没有找到这个类型的完全匹配时,会计算继承顺序,并使用最接近的匹配类型
    
    import functools
    class A:
      pass
    
    class B(A):
      pass
    
    class C(A):
      pass
    
    class D(B):
      pass
    
    class E(C,D):
      pass
    
    @functools.singledispatch
    def myfunc(arg):
      print("default myfunc({})".format(arg.__class__.__name__))
    
    @mufunc.regigster(A)
    def myfunc_A(arg):
      print('myfunc_A({})'.format(arg.__class__.__name__))
    
    @myfunc.register(B)
    def myfunc_B(arg):
      print('myfunc_B({})'.format(arg.__class__.__name__))
    
    @myfunc.register(C)
    def myfunc_C(arg):
      print("myfunc_C({})".format(arg.__class__.__name__))
    
    myfunc(A())
    myfunc(B())
    myfunc(C())
    myfunc(D())
    myfunc(E())
    
    在这个例子中,类D和E与已注册的任何泛型函数都不完全匹配,所选择的函数取决于类层次结构
    """print
    myfunc_A(A)
    myfunc_B(B)
    myfunc_C(C)
    myfunc_B(D)
    myfunc_C(E)
    """
    
  • 相关阅读:
    dnn
    DATAGRID学习
    在.net下的换行符
    treeview
    《25项最优时间管理工具与技巧》
    vim常用操作
    【Google给毕业生的忠告】
    MySQL的安装、使用及权限管理
    各种国际化标准组织
    ubuntu thunderbird 邮箱 163 配置 不能发送问题
  • 原文地址:https://www.cnblogs.com/weiweivip666/p/16177951.html
Copyright © 2020-2023  润新知