首页 > 其他分享 >后端技术:typing类型标识

后端技术:typing类型标识

时间:2024-01-17 13:55:19浏览次数:20  
标签:func int age 标识 str typing 类型 def

类型别名

# 类型别名
infoType = Dict[str, Any]
people: infoType = {"info": 1}  # 有些类型名很长所以用类型别名

perple: Dict[str, Any] = {"info": 1}  # 可以看出与上面使用类型别名infoType的people作用相同

联合类型 即可选

flag: Union[bool, int] = 1  # 也就是可以是[]中的任一,
flag: Union[bool, int] = True

可选类型 可以为none,不为None的话必须是int等限定类型

my_optional: Optional[int] = None

-> str返回值的类型(前面都是参数的类型,这里讲返回值类型)

def func(a: int) -> str:
	return str(a)

可调用类型 Callable

def example_func(number: int, text: str = "default") -> str:
    return f"Number: {number}, Text: {text}"

def hello(func: Callable[[int, str], str]):
    return func(13, "1")

result = hello(example_func)
print(result)

创建新类型

UserId = NewType("UserId", int)
uuid: UserId = 1

泛型:在运行的时候根据用户传入类型决定类型

T = TypeVar("T")

# 泛型类
class Info(Generic[T]):
    def __init__(self, value: T):
        self.info = value

        
aa = Info(value=1)
print(aa.info)

获取参数的类型信息

print(get_type_hints(example_func))
>>>
{'number': <class 'int'>, 'text': <class 'str'>, 'return': <class 'str'>}

源码中有 */什么意思?

先说 *,下面hello1函数中的参数,*代表其后面的age参数在对函数进行调用的时候传参一定是以关键字的形式传入才可以。

def hello1(name, *, age):
    print(name, age)

hello1(12, age=11)

再看/啥意思,下面的hello2种的参数,/代表其前面的参数为位置参数,不用传k了(卧槽,这好像和不放 /效果一样。。。)

def hello2(name, /, age):
    print(name, age)


hello2(12, 13)
hello2(12, age=13)
# hello2(name=12, age=13) ## 错误❌

标签:func,int,age,标识,str,typing,类型,def
From: https://www.cnblogs.com/honeyShi/p/17969860

相关文章

  • mysql基本数据类型范围与存储说明
    一、整型数据类型存储方式整型数据类型是Mysql中最常用的数据类型之一,其存储方式如下:(默认是有符号,即取值范围是正负范围;无符号,即取值范围就是正值范围)1.TINYINT:占用1个字节,范围为-128~127。2.SMALLINT:占用2个字节,范围为-32768~32767。3.MEDIUMINT:占用3个字节,范围为-8388608~8......
  • 字符串类型内置方法补充
    lstrip&rstrips='khffhksfksf'print(s.lstrip('kn'))print(s.rstrip('sf'))hffhksfksfkhffhksfklower&upperprint(s.upper())KHFFHKSFKSFstartswith&edndswithprint(s.startswith('1'))print(s.startswit......
  • 字符串类型内置方法
    按索引取值name='yryriw9999ndlaanl'print(name[0])print(name[-1])yl切片:步长为正数,从左到右切片print(name[0:7])print(name[0:8])print(name[0:7:2])print(name[0::2])print(name[-4::1])#将打印从倒数第四个字符到字符串末尾的所有字符print(name[-4:-1:1])#......
  • [Java]关于基本数据类型与引用类型赋值时的底层分析的小结(简述)
    【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)https://www.cnblogs.com/cnb-yuchen/p/17969159出自【进步*于辰的博客】目录1、关于赋值1.1基本数据类型赋值1.2String类型赋值2、关于String赋值2.1情形一2.2情形二3、关于String与char[]的比较4、不同类型引......
  • byte类型取值范围为啥是-128~127
    一个字节是8个比特位,int类型有4个字节,也就是有32个比特位。基本数据类型:1基本类型:byte二进制位数:8一个字节8个bit位2包装类:java.lang.Byte3最小值:Byte.MIN_VALUE=-1284最大值:Byte.MAX_VALUE=1271基本类型:short二进制位数:162包装类:java.lang.Short3最小值:Shor......
  • 字符串类型内置方法
    按索引取值name='yryriw9999ndlaanl'print(name[0])print(name[-1])切片:步长为正数,从左到右切片;如果步长为负数print(name[0:7])print(name[0:7:2])print(name[0::2])print(name[-4::1])print(name[-4......
  • FlaskSQLAlchemy中的Pagination类型对象
    FlaskSQLAlchemy中的Pagination类型对象。一个Query对象调用paginate方法就获得了Pagination对象。paginate方法传入了两个参数,一个是当前页,另一个是每一页最多显示多少博客。paginate的返回值为代表当前页的Pagination对象。一个Paginationi对象的常用属性有:items当前页面中的......
  • sql数据类型有哪些?
    1、二进制数据类型。二进制数据包括Binary、Varbinary和ImageBinary数据类型既可以是固定长度的(Binary),也可以是变长度的。Binary[(n)]是n位固定的二进制数据。其中,n的取值范围是从1到8000。其存储空间的大小是n+4个字节。Varbinary[(n)]是n位变长度的二进制数......
  • Elastic实战:彻底解决spring-data-elasticsearch日期、时间类型数据读取报错问题
    0.引言在使用spring-data-elasticsearch读取es中时间类型的数据时出现了日期转换报错,不少初学者会在这里困惑很久,所以今天我们专门来解读该问题的几种解决方案。1.问题分析该问题的报错形式一般是:Failedtoconvertfromtype[java.lang.String]totype[java.util.Date]f......
  • C++ 重载bool类型
    在C++中,可以通过重载operatorbool()来实现对自定义类型的bool类型重载。这样,您可以定义自定义类型的对象在条件语句中的行为,使其能够像内置类型一样进行条件判断。下面是一个示例,演示了如何在C++中重载bool类型:#include<iostream>#include<string>usingnamespacestd;cl......