Python可选的类型声明

在Python 3.6以上的版本中,Python已经获得了非常全面的类型声明的支持:

函数注解:

def add_int(a: int, b: 'b should be int', c: int=0) -> int:

    return a + b + c

函数注解将被存储在__annotations__ 中,类似于enforce 模块可以对有注释的变量进行强制检查。如例子中所展现的,形参的注解可以是任意形式的,->将表明函数的返回类型。

变量声明:

primes: List[int] = []

x = 'HelloWorld'  # type: str

当用户在声明一个变量的时候,可以同时声明它的结构。在Go语言中,只有全局变量需要被如此声明。个人觉得这是个不错的规范,因为全局变量将在很多地方被使用,它们的结构可能是至关重要的,而局部变量通常仅在内部使用,不声明结构完全可以接受,不过值得注意的是,当局部变量在一个嵌套较深的代码段的顶部,以及局部变量将进入闭包中的时候,这个局部变量如果声明一下结构可能会有些益处。

Python的类型声明大体上是非常自由的,当你尝试编写它的时候,会发现这家伙很容易脱缰,导致失控。在这一点上Python官方提供了一种解决方案。

目前在Python标准库中,有一个暂不稳定的库:typing。typing提供了最基本的声明类型,用户可以像引入普通库一样将其中的类型引入文档中使用,同时提供了NewType()函数让用户能够很方便地创建自定义类型。此模块的完整规范记录在PEP484中。

目前typing已经在很多的官方库中使用了,当你读到看起来像是TypeScript的代码的时候,不用怀疑,那就是应用了typing的代码。

typing文档:https://docs.python.org/zh-cn/3/library/typing.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 包(lib)、模块(module) 在Python中,存在包和模块两个常见概念。 模块:编写Python代码的py...
    清清子衿木子水心阅读 3,846评论 0 27
  • 这是16年5月份编辑的一份比较杂乱适合自己观看的学习记录文档,今天18年5月份再次想写文章,发现简书还为我保存起的...
    Jenaral阅读 2,894评论 2 9
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young阅读 3,926评论 1 10
  • iOS中计时器工具类如何设计呢? 1.需求 开启/关闭计时器。 设置计时器周期。 设置计时器是否周期触发。 回调计...
    ksnowlv阅读 1,290评论 0 0
  • 5.00起床,睁开眼房间里清新的花香扑面而来,我走到窗边拉开窗帘,天已经微亮。 喝了一杯温开水,在柔软的垫子盘腿而...
    王小虾哟阅读 476评论 2 3