lxj*_*jhk 8 python python-internals
我使用了以下导入:
from __future__ import *
Run Code Online (Sandbox Code Playgroud)
但得到了这个错误:
SyntaxError: future feature * is not defined (<pyshell#0>, line 1)
Run Code Online (Sandbox Code Playgroud)
这个错误是什么意思?
虽然*
从未来模块导入可能是危险的,并且应该避免由于John Zwinck提到的原因,但有趣的是找出为什么这不起作用.它与通常的Python导入语法的工作方式不同,它允许您从模块中获取所有内容*
.
您可以通过Lib/compiler/future.py
在Python安装目录中打开来查看正在发生的事情:从中导入的所有import语句__future__
都通过特殊的解析器运行,该解析器仅允许您尝试导入其中一个预定义的功能.来源代码FutureParser
:
features = ("nested_scopes", "generators", "division",
"absolute_import", "with_statement", "print_function",
"unicode_literals")
Run Code Online (Sandbox Code Playgroud)
所以基本上,你是正确的注意到导入__future__
是一个特殊情况,与通常的Python导入过程有点不同,但有很好的理由.
从未来进口"一切"既不可取也不明智.事实上,大多数时候你根本不应该进口*
,但在__future__
它特别阴险的情况下:你打算得到什么功能?编写一个正确的程序将非常困难,该程序将适用于其功能尚不清楚的未来Python版本.
归档时间: |
|
查看次数: |
994 次 |
最近记录: |