首页 > 其他分享 >类型注解Callable

类型注解Callable

时间:2023-08-28 11:11:08浏览次数:35  
标签:None temperature int float Callable 类型 注解

from collections.abc import Callable

"""
Callable[[ParamType1, ParamType2], ReturnType]
[参数1类型,参数2类型], 返回值类型

Callable[[], int] 是 Callable[[], float] 的子类型,因为 int 是 float 的子类型。
这意味着,那个 Callable 的返回值类型经历了协变(covariant),
因为 int 和 float 之间具有子类型关系,而且变化方向与 Callable 类型中返回值的类型变化方向相同。

反过来,如果回调预期处理 float 值,却提供接受 int 参数的回调,则会导致类型错误。

Callable[[int], None] 不是 Callable[[float], None] 的子类型。
虽然 int 是 float 的子类型,但是在参数化 Callable 类型中,关系是相反的,
即 Callable[[float], None] 是 Callable[[int], None] 的子类型。
因此我们说,那个 Callable 声明的参数类型经历了逆变(contravariant)。
"""

def update(probe: Callable[[], float], display: Callable[[float], None]) -> None:
    temperature = probe()
    display(temperature)


def probe_ok() -> int: #int是float的子类型,所以Callable定义的返回类型float兼容int,即协变
    return 42


def display_wrong(temperature: int) -> None:
    print(hex(temperature))


update(probe_ok, display_wrong) # 类型错误error: Argument 2 to "update" has incompatible type "Callable[[int], None]"; expected "Callable[[float], None]"  [arg-type]


def display_ok(temperature: complex) -> None:
    print(temperature)


update(probe_ok, display_ok)


标签:None,temperature,int,float,Callable,类型,注解
From: https://www.cnblogs.com/weiweivip666/p/17661795.html

相关文章

  • SpringBoot常用注解
    前段时间学习了SpringBoot这个快速开发框架,觉得这个框架写的真的是太优秀了,尤其是SpringBoot的自动配置机制,真的是过于强大,它使我们不再需要定义样板化的配置,大大提高了程序的开发效率。在这点上,我需要解释的是SpringBoot其实是对Spring和SpringMVC框架的再封装。那么,有的......
  • 设置 SVN 文件的 MIME 类型
    脚本的代码放在GoogleCode上,CSS和JS均直接调用SVN主干文件.改写脚本的时候发现IE6以外的浏览器不能正常执行,比如:页面直接显示成代码,JavaScript不执行,且获得浏览器警告信息如下.ResourceinterpretedasScriptbuttransferredwithMIMEtypetext/plain经......
  • 在CXF中用JAXB数据绑定支持Map类型
     一些java类型不能自然映射成xml,例如,HashMap或其他非JavaBean类,这个时候可以覆盖XmlAdapter来自定义转换方法。XMlAdapter讲解: javax.xml.bind.annotation.adapters 类XmlAdapter<ValueType,BoundType> 类型参数:BoundType-JAXB不知道如何处理的一些类型。编写一个适配......
  • 动态类型和静态类型以及多态
    一个对象的静态类型在编译的时候就确定了。一个对象的动态类型是指它指向的对象或则它绑定的对象(因此只有指针和引用才有动态类型),一个对象的动态类型只有编译的时候才会确定。1Quote*p=newb_Quote;//Quote是基类,b_Quote是子类指针p的静态类型是Quote,在编译......
  • 语言类型详解
    1、编译型语言需通过编译器(compiler)将源代码编译成机器码,之后才能执行的语言。一般需经过编译(compile)、链接(linker)这两个步骤。编译是把源代码编译成机器码,链接是把各个模块的机器码和依赖库串连起来生成可执行文件。优点:编译器一般会有预编译的过程对代码进行优化。因为编译只......
  • 20230629 java.sql.CallableStatement
    介绍java.sql.CallableStatementpublicinterfaceCallableStatementextendsPreparedStatementAPIpublicregisterOutParameterwasNullset/getgetArraygetRefsetAsciiStreamsetBigDecimal,getBigDecimalsetBinaryStreamsetBlob,getBlobsetBoolean,getBoo......
  • 类型别名TypeAlias
    fromcollections.abcimportIterablefromtypingimportTypeAliasFromTo=tuple[str,str]#3.10之前FromTo:TypeAlias=tuple[str,str]#3.10之后推荐使用TypeAliasdefzip_replace(text:str,changes:Iterable[FromTo])->str:forfrom_,toinchange......
  • C++11——5.9 强类型枚举
    详细介绍请见:★★★原文链接★★★:https://subingwen.cn/cpp/enum/ 枚举语法(C++98):关键字enum 枚举名字(可以不写,不写就是匿名枚举) {枚举值};#include<iostream>usingnamespacestd;//枚举在相同作用域内全局范围内可见(定义在类内就类内全局可见;定义在全局就全......
  • Integer包装类型阅读
    以JDK11为例privatestaticclassIntegerCache{staticfinalintlow=-128;staticfinalinthigh;staticfinalIntegercache[];static{//highvaluemaybeconfiguredbypropertyinth=127;......
  • 架构师必读:揭秘Redis五大数据类型及超实用应用场景!
    大家好,我是你们的小米!今天我们要来聊聊一个在面试中经常被问到的话题:Redis的五种数据类型及其应用场景。作为一名热爱技术的小伙伴,对于这个话题,我们可是要深入挖掘一下哦!String(字符串)String(字符串)类型是Redis最简单的数据类型之一,它不仅可以存储字符串,还可以存储整数和浮点数。在......