使用Python的“from”关键字?

时间:2011-08-28 04:42:24

标签: python import python-3.x keyword python-2.x

除了import语句之外,Python的“from”关键字还有其他用途吗?

6 个答案:

答案 0 :(得分:26)

不,是的。

根据official Python 2.7.2 grammar,单词from中唯一出现的字词import_from,所以没有。

Python 3.1.3 grammar新条款中

raise_stmt: 'raise' [test ['from' test]]

出现,是的。

答案 1 :(得分:15)

在Python 2.x中,from的唯一用途是from x import y语句。但是,对于Python 3.x,它可以与raise语句结合使用,例如:

try:
    raise Exception("test")
except Exception as e:
    raise Exception("another exception") from e

答案 2 :(得分:13)

Python 3.3中有一个使用from关键字的新syntax for delegating to a subgenerator

答案 3 :(得分:2)

以下用途

from __future__ import some_feature

在语法上与import语句完全相同,但它不是导入模块,而是以某种方式更改解释器的行为,具体取决于some_feature的值。

例如,from __future__ import with_statement允许您在Py​​thon 2.5中使用Python的with语句,即使在Python 2.6之前没有将with语句添加到该语言中。因为它会更改源文件的解析,所以任何__future__导入都必须出现在源文件的开头。

有关详细信息,请参阅__future__ statement documentation

请参阅__future__ module documentation以获取可能的__future__导入列表及其可用的Python版本。

答案 4 :(得分:2)

由于自发布问题之日起,python已有大量更新,因此这是python3中 from 关键字的新用例 将通过示例向您展示用法

def flatten(l):
    for element in l:
        if type(element) == type(list()):
            yield from flatten(element)
        else:
            yield element

def flatten2(l):
    for element in l:
        if type(element) == type(list()):
            yield flatten2(element)
        else:
            yield element


unflatted_list = [1,2,3,4,[5,6,[7,8],9],10]
flatted_list = list(flatten(unflatted_list))
flatted_list2 = list(flatten2(unflatted_list))
print(flatted_list) # [1,2,3,4,5,6,7,8,9,10]
print(flatted_list2) # [1, 2, 3, 4, <generator object flatten2 at 0x000001F1B4F9B468>, 10]

答案 5 :(得分:1)

随着PEP 3134的完成,由于在from块中捕获到异常,因此在生成异常(raise)时可以使用try-except关键字

try:
    <some code>
except <exception type> as e:
    raise <exception> from e

关键字from允许在新的说明中跟踪捕获的异常e。异常e将存储在新异常的属性__cause__中。