Použil som nasledujúci import:
from __future__ import *
ale dostal som túto chybu:
SyntaxError: future feature * is not defined (<pyshell#0>, line 1)
Čo znamená táto chyba?
odpovede:
9 pre odpoveď č. 1Pri importovaní *
z budúceho modulu je pravdepodobne nebezpečný aby sa malo vyhnúť z dôvodov, ktoré zmienil John Zwinck, bolo zaujímavé zistiť, prečo to nefunguje. Pracuje to inak ako bežná syntax importu jazyka Python, ktorá vám umožní získať všetko od modulu pomocou *
.
Môžete vidieť, čo sa deje otvorením Lib/compiler/future.py
vo vašom adresári inštalácie Pythonu: všetky dovozné vyhlásenia, ktoré importujú __future__
sú spustené pomocou špeciálneho analyzátora, ktorý vám umožní len vyskúšať a importovať jednu z preddefinovaných funkcií. Zo zdrojového kódu FutureParser
:
features = ("nested_scopes", "generators", "division",
"absolute_import", "with_statement", "print_function",
"unicode_literals")
Takže v podstate ste správne všimli, že dovoz z __future__
je špeciálny prípad, ktorý funguje trochu inak ako bežný proces importu programu Python, ale existujú dobré dôvody na to.
7 pre odpoveď č. 2
Dovoz "všetkého" z budúcnosti nie je ani žiaduci, ani rozumný. V skutočnosti by ste nemali dovážať väčšinu času *
vôbec, ale v prípade __future__
je to zvlášť zákerné: aké funkcie máte v úmysle získať? Bolo by veľmi ťažké napísať správny program, ktorý bude pracovať s budúcimi verziami Pythonu, ktorých vlastnosti ešte nie sú známe.