作業場にて。。
Aさん「このpython、バージョンは何で書いてるの?」
私「2.7です」
Aさん「3じゃないんだ。。。」
というわけで、そろそろpython3を視野に入れないといかんようだ。
python2.7をインストールすると、Tools\Scriptsの中に2to3.pyというスクリプトがある。
これがpython2をpython3に変換してくれるツールらしいので、試してみよう。
print 'Hello! I\'m Python2'
単純すぎで済まん。。。
私が思いつくpython2と3の違いは、printで括弧がいるかどうかなのだ。
これを「python2.py」というファイル名で保存して、2to3にかけてみる。
うちはWindowsで、python2.7はC:\Winappli\Python27というフォルダにインストールしている。
C:\Prog\python\py3test>python C:\Winappli\Python27\Tools\Scripts\2to3.py python2.py
RefactoringTool: Skipping optional fixer: buffer
RefactoringTool: Skipping optional fixer: idioms
RefactoringTool: Skipping optional fixer: set_literal
RefactoringTool: Skipping optional fixer: ws_comma
RefactoringTool: Refactored python2.py
--- python2.py (original)
+++ python2.py (refactored)
@@ -1 +1 @@
-print 'Hello! I\'m Python2'
+print('Hello! I\'m Python2')
RefactoringTool: Files that need to be modified:
RefactoringTool: python2.py
オプションを付けないと、差分だけ表示するが、-wを付けるとファイルに書き込んでくれる。
前のファイルは.bakを付けて残される。
print('Hello! I\'m Python2')
まあ、予想通りの結果だ。
python3で実行しても動く。
めでたしめでたし。
ではあるのだが、これをpython2で動かしても、ちゃんと動くのだ。
じゃあ、最初からprintも括弧を付けて書いておけばいいのに、なんでそういうサンプルになっていなかったのだろう?
軽く調べたところ、python2で括弧無しのprintは、passやbreakと同じ「print」というステートメントという扱いらしい。
6. 単純文 (simple statement) — Python 2.7.x ドキュメント
そして、2.7の方で動いたのは組み込み関数のprint()なのだが、これは2.6から追加されているようだ。
2. 組み込み関数 — Python 2.7.x ドキュメント
python2では当初print()関数がなかったから、ステートメントのprintで書いているため、それを見て覚えた人がまたステートメントのprintを使って。。。ということで、脈々と受け継がれたということだろう。
ああ、新参者の私には分からぬ事情であったことだよ。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。