トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS   ログイン


#ref(http://www.python.org/images/python-logo.gif)
[[Python Programing Langage>http://python.org/]]

このページの参照数 &counter; 回

#contents

*[[Python 3.0 Download here!>http://www.python.org/ftp/python/3.0/]] [#bda31c5b]

*Python3000リリース [#v7b3b7e6]
-2008.12.03:final&color(yellow,blue){(出たぁっ!)};

*Python3000とは? [#y107fdb9]

**Python2以来の大改革 [#o4495456]

 Pythonは2000年に、安定版であるver.1.5.2の概念を大幅に変更したver.1.6を発表、後にこれが、ver.2.xシリーズ(Python2)の基本となりました。~
 Python3000は、このPython2シリーズ以降の大改革です。~
 基本は「&color(red){現行バージョンのPython実装とのコンパーチブルを犠牲にして};も『Pythonはかくあるべき』という姿を求めた」もの、ということになっています。~
 Pythonは今まで、言語のマイナーアップデートを繰り返し、特にPython1.6(Python2)の前後から、急速に言語環境に整えてきました。~
 しかし、本来あった予約語(例えば、どう考えても関数扱いにすべきなprintなど)を廃止したり、単純な割り算のルール(1 / 2 ⇒ 0でなく、1 / 2 ⇒ 0.5など)を変更するなどはあまりに影響が大きすぎて、今までできませんでした。~
 Python 3000では、これら歴史的な文法や表記(過去の遺物?)などにもざっくりとメスを入れ、Python2で見せた以上の大変革を行うのです。

※Python2という表現は正式なものではなく、Python ver.1.6~2.x系を便宜上こう呼んでいます。

**発端 [#g3a95d1f]

 私が考えていたよりかなり昔からこの名称はあるようで、最初にこの名称が登場したのは1.6を開発している頃に「次のバージョンは西暦3000年になる」とかいう冗談から出たそうな。~
 この頃はPython2相当のPython 1.6やそれ以降のPython 2.xを想定していたようですが、次第に今のような話に変貌していったようです。~
 しかし、Guidoの冗談がきっかけで、とうとう、Python 2.xと並行したプロジェクトとして、Python 3.x(Python3000)の開発が始まったわけです。

**Python 3000(Python 3.x)へ移行するための緊急チェックポイント! [#k605f973]

 新機能より、まず「使えなくなった書式」をチェックすべきです。現在出版されている2.xベースの書籍が全て使えなくなってしまうわけではありませんが、そのままで使えなくなるコードはかなり出てくるでしょう(書き直しが不可能なコードは、ほとんど無いでしょうが)。入門書であれば、print文をprint関数に書き換えるだけでも、けっこうイケます。あと、ユニコード文字(日本語全角文字など)は、u"string"という書式が廃しされましたので注意してください。

*組み込み型に関する変更 [#w59b7b9c]

**タプルの展開による代入の「あまり」を入れる [#s49ecf5a]

タプルの展開による代入は、Pythonの便利な書式の一つでした。

> >>> a, b, c = 1, 2, 3
> >>> print(a, b, c)
> 1 2 3

 しかし、シーケンスの項目と同じ数だけ変数を用意しなければなりませんでした。
 それ以外はスライスを使う、ということなのですが、スライスは慣れないとなかなか使うのが難しいですし、あまり直感的でもありません。
 今回の文法の改定では、関数の引数リストのような書式で「引数のあまり」を指定できるようになりました。

> >>> a, *b, c, d = 1, 2, 3, 4, 5, 6
> >>> print(a, b, c)
> 1 [2, 3, 4] 5 6

 使い出すとこれは意外に便利です。

**集合型リテラル [#f09310b0]

set関数を使って定義していた集合型を、ブレース{}に要素を列挙する({1,2,3}など)ことによって、表記する、集合型リテラルが追加されます。また、リストやジェネレータと同様に、内包表記も可能。ただし、空集合は辞書の表記と区別するため、set()で作るそうな。

**辞書に関する変更 [#db21f431]
-has_keyメソッドの廃止。key in dictで統一。
-keys,itemsがリストではなくイテレータオブジェクトを返します

**二進法リテラルの追加と八進法リテラルの変更 [#j0c2f219]

0b10101というような二進法表記で整数が書けるようになりました。整数を論理演算に使用する際にはとっても便利です。なお、八進法はこれまで0157とか書いてましたが、0o157とかの書き方に改められました。16進法は従来の通り0xD51とかです。

なおbin(int)によって、整数値を二進法表記の文字列に変換できます(ちょっと便利)

**整数型の統合(long型とlong型リテラルの廃止) [#a6c45224]

大きな数値(long整数)の後ろについたLの文字が無くなり、多倍長整数は完全に整数型内で内部処理されるようになります。ロング整数とかいう言葉も、無くなり、単に「Pythonはメモリの許す限りでっかい整数が扱えるんだ」ということになります。

**文字列の変更と拡張(1)文字列型(str型) [#t6130dcc]

従来のUNICODE文字列が廃止され、文字列は全てUNICODE処理されます。u"string"といった書式はすでにありませんので、注意してください。

**文字列の変更と拡張(2)従来のPython文字列(bytes型) [#hed6446f]

従来のPython文字列と同様のイミュータブル(不変)バイト列は、bytes型となります

**文字列の変更と拡張(3)変更可能なバイト列(bytearray型) [#r4f79f36]

Python3000では、よく使うバイト配列型が追加されました

**文字列の変更と拡張(4)テンプレート機能 [#bc57841d]

%演算子によるフォーマットに加え、formatメソッドによるテンプレート指定が可能となりました

> >>> '{0} you {1} is {2}'.format('All','need','Python')
> 'All you need is Python'
> >>> '{1} you {2} is {0}'.format('All','need','Python')
> 'need you Python is All'
> >>> '{a} you {c} is {b}'.format(a = 'All', c = 'need', b = 'Python')
> 'All you need is Python'

*演算子、関数の変更と追加 [#s982bfaa]

**「整数/整数」の結果が違う [#k348fbd3]

 除算記号(/ スラッシュ)の使い方が変更されました。2.xまでは、整数/整数の結果は(割り切れなくとも)整数になりましたが、3.x以降の整数/整数の結果は(割り切れても)浮動小数点数型となります。なお、2.xで既に導入されているダブルスラッシュ//は3.xでも当然除算の結果を整数として受け取ることができます

 なお、その関係で、operatorモジュールのdiv関数が削除されました。そのかわりに、切り捨てを強要するfloordivと、答えが必ず浮動小数点数となるtruedivのみとなります。

**旧raw_input ⇒ 新input、旧input ⇒ 削除 [#h1028d0a]

「生で挿入(raw input)」という下品なネタが使えなくなりました……という冗談はさておき、入力された文字列を式として評価していたinputが廃止され、そのまま文字列として換えるraw_inputが名前を変えてinput関数となりました。従来のinputの効果を得るには

>eval(input('prompt'))

としましょう

**イテレータ/ジェネレータの呼び出しが微妙に変化 [#x589d7d2]

>itr.next()

でアイテムを呼び出していたイテレータ/ジェネレータが、なぜか

>next(itr)

で呼び出すことに(メソッドで呼び出すなら、itr.__next__())

Pythonを「オブジェクト指向プログラミング言語」と紹介している方の神経を逆撫でするような行為ですが、実はPythonは関数がオブジェクト扱いなので、メソッドよりいろいろな面で融通が利くのです。

まぁ、普通ジェネレータ/イテレータは「回してなんぼ」ですので、forループなどの書式が変化しない限り気づかないと思いますが、アイテムを一コマ一コマ取り出したい場合にはご用心

*文法、記法の変更 [#yf408b5b]

**print文、exec文の廃止 ⇒ print関数、exec関数の導入 [#p6ae3970]

print文とexec文が無くなり、そのままの機能で関数扱いになります。文と式がきっちりと分かれていて、扱いが違うPythonでは、余分な文法は無いほうが好ましいので、当然と言えば当然でしょう。なお、execが文から関数になった関係で、色々な悪戯が出来るようになったのは秘密です(笑)

**バッククォート評価(``)や≠の(<>)表記の削除 [#qaad3b14]

バッククォート評価は使った事ありませんでしたが、<>はPascalライクで好きだったんですけどねぇ(ため息)

バッククォート評価とは……~
>`1+2` ⇒ '3'~
というようなモノで、同じ機能は~
>repr(1+2) ⇒ '3'~
となります。

**リストの内包記法内の変数がローカルに [#xbbaa250]

2.xでもジェネレータはこの扱いでしたが、Python3000では、リストでも、forループに使用した変数がローカル変数となり、グローバル空間には影響を及ぼさなくなります。これは、地味ではありますが、確実に便利な変更です

*λ(lambda)とその一族 [#h5c50f70]

**lambda文は健在 [#f8ae442f]

変更点ではないのですが、色々と噂されていたlambda文は健在です(やった!)。ただし、勿論濫用すればコードが醜くなるのはご承知の通りなので、スマートに使いましょう。

**map,filterは、イテレートオブジェクトを返す [#ibf4b853]

 内包記法で用済みかと思われたmapやfilterは、イテレータのようなオブジェクトを返す形となって残りました。理由は、mapやfilterは、内包表記よりシンプルで見やすい場合があるので、だそうです。ただし「lambdaと併用しなければ」ということで、lambdaを使うような場合は素直に内包表記を使いましょう

**applyは廃止、reduceはモジュールに [#w373b36d]
 applyに関しては、func(*arg)文法が使えるので、不要ということで廃止。reduceは、組み込みモジュール(組み込まれているのだけど、名前空間は別個なのでimportによる呼び出しが必要)に変更されました

*その他、廃止/変更された関数 [#e5c7f9f8]

**廃止された関数(追跡調査中のものも含む) [#bdcdb992]

callable(), coerce(), execfile(), file(), reload()

**変更された関数 [#obcfed13]

zip():イテレータオブジェクトを返します

**変更されたモジュール [#o5819214]

&color(red){GUIを使う人は要注意っ!};~
Tkinter ⇒ tkinter

*Python3000の履歴 [#o5c34ef3]

-2007.08.31:Python 3.0 a1
-2007.12.07:Python 3.0 a2
-2008.03.01:Python 3.0 a3
-2008.04.02:Python 3.0 a4
-2008.05.08:Python 3.0 a5
-2008.06.18:Python 3.0 b1
-2008.07.17:Python 3.0 b2
-2008.08.20:Python 3.0 b3
-2008.09.17:Python 3.0 rc1
-2008.11.06:Python 3.0 rc2
-2008.11.21:Python 3.0 rc3
-2008.12.03:Python 3.0 final

*Python3000についての資料 [#q75fc8a6]

-正式勧告文書 [[PEP3000:http://web.archive.org/web/20060618034645/http://www.python.org/dev/peps/pep-3000/]]
-「みんPy」の柴田さんの説明「[[もっと知りたいPython3000:http://gihyo.jp/dev/feature/01/python3000]]」
-Hatena::Diary[[2007-06-07プログラミング日記:http://d.hatena.ne.jp/morchin/20070627]]
-上記の元ネタ[[「Python 3000 Status Update(Long!)」:http://www.artima.com/weblogs/viewpost.jsp?thread=208549]]
-Guido師の説明[[What's New in Python 3.0:http://docs.python.org/dev/3.0/whatsnew/3.0.html]]
-Python3000によるプログラミング入門講座「やnでレPython」([[TSNETスクリプト通信第3号:http://text.world.coocan.jp/TSNET/?TSNET%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E9%80%9A%E4%BF%A1%E7%AC%AC3%E5%8F%B7]])

*関連ページ [#vf2a75a0]
-[[Python一般について>Python]]
-[[ここがヘンだよPythonista]]
*コメント [#bdc90f5f]

#comment