在Python 2.7中使用输入模块

时间:2017-01-27 12:26:37

标签: python python-2.7

输入模块是早期版本Python的后端口,用于推断输入和输出数据类型。我遇到了在Python 2.7中使用它的问题。

import typing
def greeting(name): # type: (str) -> str
    """documentations"""
    return ('Hello ' + name)
print(greeting.__annotations__) # fails because doesn't exist.

我也试过这个:

import typing
def greeting(name # type: str
             ):
    # type: (...) -> str
    """documentations"""
    return ('Hello ' + name)

而且:

import typing

def greeting(name):
    # type: (str) -> str
    """documentations"""
    return ('Hello ' + name)

这应该根据PEP484在类上创建一个__annotations__属性,但我根本没有看到这种情况。

我对backport代码做错了什么?

1 个答案:

答案 0 :(得分:3)

typing是Python 3.5中引入的模块。 PEP 484中的示例依赖于Python 3+,__annotations__是Python 3概念。 backport只允许使用typing模块中定义的函数类型,但它不会改变Python引擎以神奇地理解所有Python 3概念。

其他SO post的讨论表明,应该可以通过使用inspect.getsourcelines在函数声明之后立即研究第一行并以#type开头来访问注释。 pypi上存在typed-ast模块,应该能够解析Python 2.7样式注释。不幸的是,它仅在beta级别声明,并且只与Python 3兼容。