首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python 3和静态类型

Python 3和静态类型
EN

Stack Overflow用户
提问于 2009-08-14 01:47:27
回答 4查看 32.3K关注 0票数 61

我并没有像我希望的那样关注Python3的开发,只是注意到了一些有趣的新语法变化。特别是在this SO answer函数参数注释中:

def digits(x:'nonnegative number') -> "yields number's digits":
    # ...

我对此一无所知,我想它也许可以用来在Python中实现静态类型!

经过一些搜索之后,似乎有很多关于Python中的静态类型(完全可选)的讨论,比如PEP 3107"Adding Optional Static Typing to Python" (以及part 2)中提到的那些。

..but,我不清楚事情进展到什么程度。有没有使用参数注释的静态类型的实现?有没有参数化类型的想法进入Python3?

EN

回答 4

Stack Overflow用户

发布于 2009-08-14 01:53:24

正如在PEP中提到的,静态类型检查是函数注释可以用于的可能应用程序之一,但他们将如何做的决定留给了第三方库。也就是说,在核心python中不会有正式的实现。

就第三方实现而言,有一些代码片段(如http://code.activestate.com/recipes/572161/)似乎可以很好地完成这项工作。

编辑:

需要注意的是,检查行为比检查类型更可取,因此我认为静态类型检查并不是一个好主意。我上面的回答是为了回答这个问题,而不是因为我会用这种方式检查自己的类型。

票数 15
EN

Stack Overflow用户

发布于 2009-08-14 05:01:33

Python中的“静态类型”只能在运行时进行类型检查,这意味着它会降低应用程序的运行速度。因此,您不希望将其作为一般情况。相反,您需要一些方法来检查它的输入。这可以通过简单的断言很容易完成,或者使用装饰器,如果你(错误地)认为你很需要它。

除了静态类型检查,还有一种替代方案,那就是使用像Zope组件架构这样的面向方面的组件架构。而不是检查类型,而是调整它。因此,不是:

assert isinstance(theobject, myclass)

您可以执行以下操作:

theobject = IMyClass(theobject)

如果对象已经实现了IMyClass,则不会发生任何事情。如果不是,则会查找一个将对象包装为IMyClass的适配器,并使用该适配器代替该对象。如果找不到适配器,则会出现错误。

这结合了Python的动态性和以特定方式拥有特定类型的愿望。

票数 14
EN

Stack Overflow用户

发布于 2013-02-11 23:05:33

这不是对问题的直接回答,但我发现了一个Python fork,它添加了静态类型:mypy-lang.org,当然不能依赖它,因为它仍然很小,但很有趣。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1275646

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档