J'ai découvert que je ne peux pas utiliser l'argument flush
dans la nouvelle fonction d'impression si j'utilise Python 2.7.11. Je l'ai utilisé:Comment importer la version la plus récente de la fonction d'impression dans Python 2.7.x?
from __future__ import print_function
print('Hello', flush=True)
mais il se plaint avec l'erreur:
Traceback (most recent call last):
File "print_future.py", line 3, in <module>
print('Hello', flush=True)
TypeError: 'flush' is an invalid keyword argument for this function
Après avoir regardé the documentation for print
j'ai découvert que cela ne fonctionne pas, même si elle est un argument. Mon inférence est que cela ne fonctionne pas parce que flush
n'a été ajouté que dans la version 3.3, donc l'instruction spéciale from __future__ import
est probablement l'importation d'une ancienne version de la fonction. Les commentaires suggèrent qu'il utilise 2.7.11 mais je ne comprends pas pourquoi il le fait.
J'ai vu Need Python 3.4 version of print() from __future__, dont la réponse enveloppe simplement print
et ajoute manuellement le paramètre flush
. Même si cela fonctionne, il semble que ce soit plus un problème que de s'attaquer au vrai problème, que nous n'avons pas la version la plus récente de l'impression.
Existe-t-il un moyen d'importer des versions spécifiques de fonctions Python (je veux utiliser la fonction Python 3.5 print
, en particulier) pour mon script Python actuel? Si ce n'est pas possible, pourquoi pas? Il semble (étonnamment) qu'il n'est pas clair pour les gens comment ma question est différente même si je l'ai écrit. Je vais le dire différemment.
- Il semble que mon problème est d'importer la fonction python à laquelle je ne m'attendais pas (puisqu'elle ne trouve pas l'argument flush). Par conséquent, le plus naturel et la première chose que j'aimerais faire et savoir, c'est quelle fonction d'impression importe-t-elle. Les commentaires suggèrent son utilisation de 2.7.11 mais je ne comprends pas pourquoi c'est ce qu'il fait.
- Je comprends que l'instruction from from modifie le fonctionnement de mon compilateur. Il semble que j'ai supposé que puisque c'était une déclaration future, il a également apporté la fonction d'impression d'une future version. Il semble que cela ne change que le comportement de mon interprète. Si j'étais capable de voir quelle fonction d'impression utiliser, je saurais que ce n'est pas importer une fonction d'une future version, mais seulement agir comme un futur interpréteur python. C'est ce qu'il semble, mais je ne sais pas à coup sûr et je voudrais savoir à coup sûr ce qui se passe.
- Enfin et surtout, n'y a-t-il pas un moyen naturel d'importer les futures fonctions python dans mon script Python actuel? Je veux utiliser l'instruction d'impression python 3.5, n'est-il pas possible d'utiliser cette fonction en dehors du fait que le compilateur se comporte comme un futur interpréteur python mais se comporte également comme une future version de python? C'était (au moins pour moi) contre-intuitif que l'analyseur agisse comme un futur python mais agisse toujours comme un 2.7.11. La solution que je veux n'est pas un wrapper mais une importation du python récent. Si ce n'est pas possible, alors une réponse à ma question devrait expliquer pourquoi ce n'est pas possible.
Lorsque vous 'd'importation future print_function' vous obtenez la version 2.7.11 de la fonction d'impression. Il ne lit aucun code python3; il n'obtient pas une version de n'importe quel python 3. Vous ne pouvez pas importer le print python3 intégré dans python2. La seule solution correcte, si vous avez besoin de "flush" est d'utiliser wrapper: d'où le doublon. –
Vous avez encore posé la même question, le fait que vous l'ayez lié ne fait pas beaucoup de différence. Si c'est la réponse, c'est la réponse; Si vous ne comprenez pas pourquoi, considérez un commentaire, et si vous en avez besoin d'un autre, considérez une prime. – jonrsharpe
@jonrsharpe Je n'ai pas posé la même question. J'ai même écrit quelle est la différence. D'abord j'ai déjà dit qu'une solution avec un wrapper n'est pas une solution à ma question. Ma question est d'importer essentiellement l'instruction print de python 3.4 ou plus. Je comprends que la déclaration future change juste comment mon python analyse mon fichier au moment de la compilation, mais est-il impossible de l'utiliser pour utiliser la fonction d'impression que je demande? J'ai aussi demandé comment vérifier la version de la fonction d'impression, je voudrais savoir et vérifier cela. Si la réponse est que vous ne pouvez pas le faire avec un wrapper même si vous utilisez le futur, je le ferais .. –