mypy 支持静态类型编程的python变种

每种编程语言都发生相同多定位的用户,对于那些习惯用不同编程语言用成同样的发的人头吧,最是难以让。因为每种语言都有它们特有之统筹『哲学』和善于的应用领域。

PHP给大家的一定的印象都是动态弱类型语言,Python是动态强类型语言。

就算比如本人所以惯了PHP的标量类型声明-起至某些静态类型的觉得,让自家失去用Python的意动态,可能是免习惯的。而强类型在大型项目中,是着力品质的保管。

mypy出现了。正而Facebook出了Hack Lang –
PHP的静态类型版,mypy也是python的静态类型版;尽管双方的兑现原理有所不同。

Python编程语言的设计者Guido van
Rossum,在python-ideas邮件列表中提出了一个提议:在Python函数声明遭入类型注释。这个建议旨在以无转Python动态类型的真相和解释器行为的前提下,让Python获得静态类型系统所带来的便宜。

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

Guido所提出的上加类型注释的提议源自于Bob Ippolito和Jukka
Lehtosalo的想法。Bob
Ippolito主张将Haskell的部分特色PHP引入到Python和其他语言中。Jukka
Lehtosalo则是mypy的撰稿人,这是一个含试验性质的Python变种版本,旨在用动态类型及静态类型的便宜结合起来。

Mypy是Guido建议被之要紧内容。在建议中,Guido说到,可以以mypy看成一个用以Python的、类似lint的静态检查器。用于在编译期或是在mypy的Python解释器下运作时,检查程序中类型的没错。另一方面,程序于Python官方的解释器下实行时,能够不受品类注释的震慑。因此也未会见发生运行时路检查的支出。为了达成这或多或少,关键在于用于项目注释的语法必须符合Python
3的语法。这吗是mypy的一个风味。实际上,mypy于指定项目签名的时光使用了函数注释是Python
3的语法。该语法允许为函数添加任意元数据注释。

def f(t: Tuple[int, str]) -> None:
    t = 1, 'foo'    # OK
    t = 'foo', 1    # Type check error

def greeting(name: str) -> str:
    if name:
        return 'Hello, {}'.format(name)
    else:
        return 'Hello, stranger'

print(greeting('Python'))  # Okay!
print(greeting(None))      # Also okay!

class A:
    def __init__(self, x: int) -> None:
        self.x = x     # Attribute x of type int

a = A(1)
a.x = 2       # OK
a.y = 3       # Error: A has no attribute y

趁python3.6的揭示,python的诠释规范已经支持变量类型标注:

primes: List[int] = []

captain: str  # Note: no initial value!

class Starship:
    stats: ClassVar[Dict[str, int]] = {}

python3蒙,这些类别注解只会于运行品种检测时提醒,实际运行的当儿不会见生作用。

相关文章