设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客
LUPA开源社区 首页 业界资讯 开源资讯 查看内容

Guido van Rossum想要在Python中加入类型注释

2014-8-21 11:48| 发布者: joejoe0332| 查看: 2342| 评论: 0|原作者: 潘瑾瑜|来自: InfoQ

摘要: Python编程语言的设计者Guido van Rossum,最近在python-ideas邮件列表中提出了一个建议:在Python函数声明中加入类型注释。这个建议旨在在不改变Python动态类型的本质和解释器行为的前提下,让Python获得静态类型系 ...

  Python编程语言的设计者Guido van Rossum,最近在python-ideas邮件列表中提出了一个建议:在Python函数声明中加入类型注释。这个建议旨在在不改变Python动态类型的本质和解释器行为的前提下,让Python获得静态类型系统所带来的好处。


其目标是,在不改变程序执行逻辑的情况下,通过(未修改的)Python 3.5解释器运行时,能够对第三方模块(甚至是stdlib)添加类型检查注释。


  Guido所提出的添加类型注释的建议源自于Bob Ippolito和Jukka Lehtosalo的想法。Bob Ippolito主张将Haskell的一些特性引入到Python和其他语言中。Jukka Lehtosalo则是mypy的作者,这是一个带有试验性质的Python变种版本,旨在将动态类型和静态类型的好处结合起来。


  Mypy是Guido建议中的主要内容。在建议中,Guido说到,可以将mypy看成一个用于Python的、类似lint的 静态检查器。用于在编译期或是在mypy的Python解释器下运行时,检查程序中类型的正确性。另一方面,程序在Python官方的解释器下执行时,能 够不受类型注释的影响。因此也不会有运行时类型检查的开销。为了达到这一点,关键在于用于类型注释的语法必须符合Python 3的语法。这也是mypy的一个特性。实际上,mypy在指定类型签名的时候使用了函数注释这个Python 3的语法。该语法允许为函数添加任意元数据注释。


  作为一个mypy基本语义的例子,以下的Python定义:


def fib(n):
    a, b = 0, 1
    while a < n:
        print(a)
        a, b = b, a+b


  在mypy中可以稍加修改以指定一个类型签名


def fib(n: int) -> None:
    a, b = 0, 1
    while a < n:
        print(a)
        a, b = b, a+b


  万一没有合适的Python语法能够指定某个类型,那mypy可以使用注解的方式。Guido van Rossum在他的建议里提供了一个这样的例子:

def word_count(input: List[str]) -> Dict[str, int]:
      result = {}  #type: Dict[str, int]
      for line in input:
          for word in line.split():
              result[word] = result.get(word, 0) + 1
      return result


  鉴于所有这一切,Guido建议可以及时地为Python 3.5编写,采用和实施一份PEP。这需要完成两项工作:


  • 重新考虑函数注释的定义,将它的使用限制于类型注释。

  • 为需要加入Python 3.5的内容制定一个规范。Guido建议添加的东西应越少越好。

实际的类型检 查器不会被集成进Python解释器,也不会被签入CPython代码库中。唯一需要做的是在stdlib中加入一份mypy的typing.py模块的 拷贝。这个模块定义了许多新的类(还有一些装饰器和辅助函数)。这些类可以用于表示参数的类型。如果你想要对代码进行类型检查,你需要下载和安装 mypy,并单独地运行它。


  Guido的建议在Python-ideas邮件列表和reddit上都引起了一些人的兴趣。除了有一些代码贡献者在讨论中表示出积极的反应外。将函数注释限制用于类型签名的指定和使用注解表达类型定义引起了一些人的担心。


查看英文原文:Guido van Rossum Wants to Bring Type Annotations to Python

转自 http://www.infoq.com/cn/news/2014/08/python-type-annotation-proposal?utm_campaign=infoq_content&utm_source=infoq&utm_medium=feed&utm_term=global


酷毙

雷人

鲜花

鸡蛋

漂亮
  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部