Python 3.2 で__future__
モジュールの奇妙な動作を観察しました。print_function
たとえば、次のコードを見てください。
from __future__ import print_function
import sys
print('Enter the base path of the images: ', end='')
path = sys.stdin.readline().strip().strip('"')
if len(path) == 0:
print("No path entered")
else:
print(root)
print("\n\nPress ENTER to exit")
exit = sys.stdin.readline()
スクリプトが実行されると、コンソールはユーザーが押すのを待ってからENTER最初のprint
ステートメントを表示するように見えます。
出力は次のようになります。
画像のベース パスを入力してください: パスが入力されていません ENTER を押して終了します
多くの人が白いテキストの黒いウィンドウ (コマンド プロンプト) を恐れているため、空のプロンプトをユーザーに表示すると、多くの混乱が生じることは言うまでもありません。
コードをこのように変更すると
from __future__ import print_function
import sys
print('\nEnter the base path of the images: ', end='') #line now starts with \n
path = sys.stdin.readline().strip().strip('"')
if len(path) == 0:
print("No path entered")
else:
print(path)
print("\n\nPress ENTER to exit")
exit = sys.stdin.readline()
次に、出力は期待どおりです (前の空の行を無視すると仮定します)。
イメージのベース パスを入力します: c:\ c:\ ENTER を押して終了します
ただし、コードが python 2.6 で実行されると、最初のコードは期待どおりに動作します (つまり、入力の受信を待つEnter the base path of the images:
前に表示されます)。
これにより、次のように質問するようになります: Python 2.6 で実行する場合は必要ないのに、Python 3.2 で表示される出力を取得するために関数
の前に a を付ける必要があるのはなぜですか? 2 つのバージョンで の実装が異なる可能性がありますか
?print
\n
\n
print_function