首页 > 其他分享 >每天进步一点点-类型注解

每天进步一点点-类型注解

时间:2023-03-16 14:36:56浏览次数:30  
标签:进步 int 一点点 test str 类型 注解 def name

#!/usr/bin/env python
# -*- coding:utf-8 -*-
# author:SunXiuWen
# datetime:2021/12/27 0027
"""
常用类型提示
int,long,float: 整型,长整形,浮点型;
bool,str: 布尔型,字符串类型;
List, Tuple, Dict, Set:列表,元组,字典, 集合;
Iterable,Iterator:可迭代类型,迭代器类型;
Generator:生成器类型

待解决:*_ 是什么意思??????

博客:https://www.cnblogs.com/poloyy/p/15153883.html
"""
# TODO  变量声明
like: str = "happy"


# TODO 函数声明
def test(name: str, age: int = 20) -> str:
    return name + str(age)


# 自定义类型
class MyLog:
    def __init__(self, name):
        self.name = name


def logs(logger: MyLog) -> str:
    return logger.name


logs(MyLog("happy"))

# TODO  内置容器类型
from typing import List, Tuple, Dict, Set

a: List[int] = [1, 23]  # 指定容器里每个元素类型都为int,容器List和Set只能指定一个类型,不然报错
# a1:List[int,str,dict] = [1,"1",dict(name=1)]  #  TypeError: Too many parameters for typing.List; actual 3, expected 1
b: Tuple[str, ...] = ("a", "b")  # 对所有元素生效,加3个逗号
# b1: Tuple[int] = (1, 2)  # 声明和元素个数不统一,会警告,但不报错
b2: Tuple[int, str] = (2, "3")
b3: Tuple[int, str, str] = ("1", "2", "3", "4")
c: Dict[str, int] = {"key": 15000, "age": 30}  # 指定键是str,值为int
d: Set[int] = {1, 2}
# d1: Set[int,str] = {1,"2"} #  TypeError: Too many parameters for typing.List; actual 3, expected 1


# TODO  类型别名解决复杂的嵌套类型
# var: List[float] = [1.0, 1.2]
# 下面通过别名的方式等价写法
This = List[float]
var: This = [1.0, 1.2]

Conn = Dict[str, str]
Address = Tuple[str, int]
Server = Tuple[Conn, Address]


def web(flag: bool, server: Server) -> str:
    if flag:
        print(server)
        return str(server)
    return "fail"


# TODO  函数默认参数,可变参数
def python_function(flag: bool = True, *args: str, **kwargs: int) -> None:
    """要求可变参数都为字符串,默认参数默认为真,可变关键字参数的值为int"""
    pass


python_function(True, 1, "2", key=1, key1="2")

# TODO  泛型,即支持任意类型
from typing import TypeVar

A = TypeVar(name="A")  # 可以是任意类型

a0: A = 1
a1: A = "1"
a2: A = (1,)

B = TypeVar("B", int, str)  # 可以是整形,也可以是字符串,其他类型就报警
b0: B = 1
b1: B = "1"
b2: B = (1,)  # 不是指定的类型,警告


def b_test(m: B, n: B) -> None:
    pass


b_test(1, 1)
b_test("1", "1")
b_test(1, "1")  # 处于函数声明,多参数类型需一致,才不会警告

# TODO 联合类型Union,可以为指定的范围内的任意类型
from typing import Union

C = Union[int, str]
C_like = [int or str]
c0: C = (1,)
c1: C = 1
c2: C = "1"


def c_test(x: C, y: C) -> None:
    pass


c_test(1, 1)
c_test("1", "2")
c_test(1, "1")  # 处于函数声明,不要求多参数类型相同

# TODO 可选类型Optional,其实就是Union[x,None]的简写,即可以为x类型,也可以为None,只能指定一个类型
# 用这个来进行类型注解时主要解决函数参数传与不传时的情况
from typing import Optional

D = Optional[float]  # 表示可以为浮点型,也可以为空
d0: D = 2.2
d1: D = "1"


def d_test(z: D = None) -> None:
    print(z)


d_test()
d_test("1")  # 如果传参就需要是float或int

# TODO 任意类型Any,任何没有指定类型和返回值的函数,都隐式的指定了类型Any,默认Any类型与每种类型兼容
from typing import Any


def e_t(q): pass


def e_tt(q: Any) -> Any: pass


# TODO 可调用对象 Callable[[x],y], x为可调用函数的参数类型
from typing import Callable


def exec_func(i: str, m: int) -> str:
    print(i, m)
    return i


def fn(f: Callable[[str, int], str], name: str, args=15000) -> str:
    return f(name, args)


fn(exec_func, "china")

#
from typing import NewType

n = NewType("n", int)
s = n(3)
print(s)
print(n("ha"))

# TODO dataclass 数据类,对类进行装饰,给类添加魔法方法,如__init__,repr等

from dataclasses import dataclass, field
from dataclasses import field


class User(object):
    id: int
    name: str
    friends: List[int] = field(default_factory=list)


#
#
data = {'id': 123, 'name': 'china'}
user = User(**data)
print(user.id, user.name, user.friends)

标签:进步,int,一点点,test,str,类型,注解,def,name
From: https://www.cnblogs.com/sunxiuwen/p/17222416.html

相关文章

  • 【2023.03.15】是否要经过彻底的清算才能得到科技进步
    对国内的一些科研领域一直不报有太强的信心,昨晚在听马督公在讲征兵制引用《曹刿论战》的时候我终于豁然开朗,视频的链接放在这里。https://www.bilibili.com/video/BV18k4y1......
  • Lombok 中的 @Slf4j 注解
    Lombok是一种Java库,它可以通过注解来消除Java类中的样板代码,例如getter和setter方法、构造函数和equals/hashCode实现等。Lombok可以帮助Java开发人员编写更简洁、更干净的......
  • @Transaction注解的失效场景
    作者:京东物流孔祥东背景事情是这样,最近在实现一个需求的时候,有一个定时异步任务会捞取主表的数据并置为处理中(为了防止任务执行时间过长,下次任务执行把本次数据重复捞取),然......
  • 注解
    注解1.内置注解@Override:重写@Deprecated:用于修辞方法,属性,类,表示不鼓励程序员使用这样的元素@SuppressWarnings:需添加参数:@SuppressWarnings("all")用来抑制编译时的警告......
  • 反射和注解及二者综合案例
    一、反射1、反射概述在java.lang.reflect包是这么描述的:提供类和接口,以获得关于类和对象的反射信息。在安全限制内,反射允许编程访问关于加载类的字段、方法和构造方法......
  • mybatis源码-注解sql
    Mybatis-注解sqlDemo主启动类publicclassMybatisHelloWorld{publicstaticvoidmain(String[]args)throwsException{Stringresource="org/myb......
  • TypeScript实例_手动编译与自动编译、类型注解、接口和类的详解
    一.认识TypeScriptTypeScript是一种由微软开发的开源、跨平台的编程语言。它是JavaScript的超集,最终会被编译为JavaScript代码。2012年10月,微软发布了首个公开版......
  • 注解
    注解元注解元注解是用来给注解进行解释的,也就是注解的注解@Target这个是为我们自定义的注解进行权限说明的,也就是谁可以用这个注解@Retention这个注解是让被注解的元......
  • java中的注解、自定义注解
    注解注解概述​ 注解类似于一个商品标签,给当前程序的开发者提供信息和标记,给java编译程序员或者jvm提供数据支持和标记,有着代码量少,易读性更高的好处,本质还是一个特殊的......
  • Lombok注解
    一、简介:Lombok能以简单的注解形式来简化java代码,提高开发人员的开发效率二、Lombok使用:使用Lombok需要的开发环境Java+Maven+IntelliJIDEA或者Eclipse(安装Lo......