ぐるんぐるん

おもむくままに書いてます。

Python3の機能をPython2.*で使えるようにできるらしい。

実は使えるようにできたという衝撃

たまたま目に入った赤い蛇の本
みんなのPython 第3版
をぱらぱらとめくってみると、

また、__future__という文を使うことで、Python2.7などでPythoon3の一部機能を使えるようになります。

って書いててびっくりした。なお、Pythoon3はこういう風に本に書いてたからそのまま引用。

とりあえず、二つだけ紹介されてた。

future文で紹介されてたのは、

  • from __future__ import print_function
  • from __future__ import unicode_literals

の2種類。
一つ目は、print文をprint関数にするというもの。
二つ目は、文字列(str)型のリテラルユニコード文字列型として扱うようにするもの。
ふ、二つ目、超おいしくない?

とりあえず遊んでみた。

t = "ぐるんぐるん"
tu = u"ぐるんぐるん"
print u"str:", type(t), len(t)
print u"unicode:", type(tu), len(tu)

これを実行するともちろんこうなるわけで。

str: <type 'str'> 12
unicode: <type 'unicode'> 6

で、上の続きで

from __future__ import unicode_literals
t = "ぐるんぐるん"
tu = u"ぐるんぐるん"
print u"str:", type(t), len(t)
print u"unicode:", type(tu), len(tu)

をやってみると、

str: <type 'unicode'> 6
unicode: <type 'unicode'> 6

いやったぁぁぁぁぁぁー。ちなみに、今までの文字型には、b""的な感じで書けばいいらしいです。

けどよくよく考えてみると

ユニコード文字列型に統一された」ってことはとてもうれしいことだけど、uの一文字が省略されただk…。いや、入力忘れがあるから、これはかなり嬉しいよ(震