python学习-类型标注

在Python中,类型标注(Type Hints)是一种语法,用于标注变量、函数参数和返回值的预期类型。这些注解不会影响Python代码的运行,因为Python是一种动态类型语言,但它们对于代码的维护、理解和IDE(如PyCharm)的智能提示非常有帮助。类型标注从Python 3.5开始引入,并随着版本更新不断增强。

image-20231114223042334

类型标注的主要优势包括:

  1. 代码可读性增强:通过显示声明类型,其他开发者(或未来的你)可以更容易理解每个变量或函数应该如何使用。
  2. IDE支持:具有类型信息的代码可以让IDE提供更好的代码补全、错误检测和重构支持。
  3. 错误检测:虽然Python在运行时不强制类型检查,但可以使用如mypy这样的工具静态分析代码,发现潜在的类型相关错误。

下面是一些基本的类型标注示例:

# 基本类型标注
number: int = 5
text: str = "Hello"

# 函数参数和返回值的类型标注
def greet(name: str) -> str:
    return "Hello " + name

# 列表、字典等容器的类型标注
from typing import List, Dict

numbers: List[int] = [1, 2, 3]
translations: Dict[str, str] = {"hello": "hola", "bye": "adiós"}

# 可以用于自定义类
class Point:
    def __init__(self, x: int, y: int) -> None:
        self.x = x
        self.y = y
        
#类型别名
type Vector = list[float]

def scale(scalar: float, vector: Vector) -> Vector:
    return [scalar * num for num in vector]

# passes type checking; a list of floats qualifies as a Vector.
new_vector = scale(2.0, [1.0, -4.2, 5.4])

# 可以用来简化复杂的类型签名
from collections.abc import Sequence

type ConnectionOptions = dict[str, str]
type Address = tuple[str, int]
type Server = tuple[Address, ConnectionOptions]

def broadcast_message(message: str, servers: Sequence[Server]) -> None:
    ...

# The static type checker will treat the previous type signature as
# being exactly equivalent to this one.
def broadcast_message(
        message: str,
        servers: Sequence[tuple[tuple[str, int], dict[str, str]]]) -> None:

当然,typehint还能用于创建与原类型不同的类型

from typing import NewType

UserId = NewType('UserId', int)
some_id = UserId(524313)

类型标注在某些场合尤其有用,比如处理复杂的数据结构或大型项目时。虽然它增加了一些编写代码的工作量,但长远来看,它带来的清晰度和安全性是值得的。

结合前面提到的dataclasses模块,类型标注可以使得代码更加清晰,同时dataclasses提供的便捷功能(如自动生成__init____repr__等方法,以及asdict等实用函数)使得处理数据更加高效。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值