除了import
语句之外,Python的“from”关键字还有其他用途吗?
答案 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
允许您在Python 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__
中。