ほぼすべてのPython 2プログラムは,Python 3環境で正常に動作するためにいくつかの変更が必要である.この変換プロセスを簡素化するために,Python 3は2to3と呼ばれるユーティリティスクリプトを搭載している.このスクリプトは,あなたのPython 2プログラムのソースファイルをインプットとして取り,それを自動的にPython 3の形式に変換する.ケーススタディ:chardetをPython 3に移植する.このスクリプトを実行する方法を説明し,その後,自動的に修復できない状況を示します.この付録は,自動的に修復できる内容を説明します.
Python 2では,print は文である.あなたが出力したいものは何でも,print のキーワードの後ろにそれらを置くだけでよい.Python 3では,print は関数である.他の関数と同様に,print はあなたが出力したいものを参数として渡す必要がある.
注記 | パイソン 2 | パイソン 3 |
---|---|---|
① | 印刷する | 印刷する |
② | プリント 1 | プリントする (1) |
③ | 1,2 プリント | print (印刷する) |
④ | 1,2,3を印刷する | print ((1,2,end= |
⑤ | print >>sys.stderr,1,2,3 をクリックする | print ((1,2,3,ファイル=sys.stderr) |
1、空白行を出力するには,参数なしのprintを呼び出す必要がある.
2, 単一の値を出力するには,この値をprint () の参数として使うことができます.
3、出力には1つのスペースで区切られた2つの値を使用し,二つの参数でprint (() を呼び出すこともできます。
この例にはいくつかのヒントがあります. Python 2では,print 文の終わりに,) を使えば,結果が空間で分離され,後に続く空間に (trailing space) 留まり,キャリッジリターンを出さない. Python 3では,end=
Python 2には2つの文字列タイプがあります.Unicode 文字列そして文字列は Unicode でありません◎ Python 3 のタイプは1つしかありません.Unicode文字列 (Unicode文字列)。
注記 | パイソン 2 | パイソン 3 |
---|---|---|
① | パパヤウィップ | |
② | パパヤ・ウィップ\foo |
パパヤ・ウィップ\foo |
Python 2 の Unicode 文字列は Python 3 での通常の文字列である. Python 3 の文字列は常に Unicode 形式である. Unicode 原始文字列 (rw string) (この文字列を使用すると,Python は自動的に反斜線を変換しない") も,Python 3 ですべての原始文字列が Unicode で暗号化されているため,通常の文字列に置き換えられます.
Python 2には,オブジェクトを文字列に強制的に変換できる2つのグローバル関数があります:unicode ((() はオブジェクトをUnicode文字列に変換し,str ((() はオブジェクトを非Unicode文字列に変換します.Python 3には単一の文字列タイプ,Unicode文字列がありますので,str ((() はすべての機能を完了します.Unicode (() は Python 3 で存在しない.)
注記 | パイソン 2 | パイソン 3 |
---|---|---|
① | ユニコード (何でも) | 何でも |
Python 2には,浮点数でない int と long タイプが用意されている.int タイプの最大値は sys.maxint を超えない.この最大値はプラットフォーム関連である.数字の最後に L を付加することで長整体を定義できる.明らかに,int 型が表現する数字の範囲が大きい.Python 3 では int 型が1つだけあり,ほとんどの場合,Python 2 の長整体のようなものです.もう2種類の整数が存在しないため,それらを区別するために特別な文法を使う必要はありません.
さらに読む:PEP237:整体型と整体型を統一する.
注記 | パイソン 2 | パイソン 3 |
---|---|---|
① | x = 1000000000000L | x = 1000000000000 |
② | x = 0xFFFFFFFFFFFFFFL | x = 0xFFFFFFFFFFFF |
③ | 長い (x) | int (x) |
④ | type ((x) は長い | type ((x) は int |
⑤ | isinstance ((x,long) について) | isinstance ((x,int) は,x,int を表示する |
Python 2 の 10 進法整数式は Python 3 の 10 進法整数式で置き換えられる. Python 2 の 16 進法整数は Python 3 の 16 進法整数と置き換えられる. Python 3では,長整形は存在しないので,自然の原始のlong ((() 関数も存在しない. 変数を整数に強制変換するには,int (((関数を使用することができます.│ │ 変数が整数であるかどうかをチェックし,そのデータ型を得て,int型 (非long) と比較する. また,インスタンス (() 関数でデータ型を確認することもできます.また,インスタンス (() 関数でインスタンス (() 関数でインスタンス (() 関数でインスタンス (() 関数でインスタンス (() 関数でインスタンス (() 関数でインスタンス (()) 関数でインスタンス (()) 関数でインスタンス (()) 関数 ((()) 関数 (()) 関数 (()) 関数 (()) 関数 ((()) 関数 (()) 関数 ()) 関数 (()) 関数 (()) 関数 (()) 関数 ()) 関数 (()) 関数 ()) 関数 (()) 関数 (()) 関数 ()) 関数 ()) 関数 (()) 関数 (()) 関数 ()) 関数 (()) 関数 ()) 関数 (()) 関数 ()) 関数 (()) 関数 (()) 関数 ()) 関数 (()) 関数 ()) 関数 (()) 関数 ()) 関数 ()) を使います.
Python 2 は<> を!= の同義語としてサポートしている.
注記 | パイソン 2 | パイソン 3 |
---|---|---|
① | x <> y: | x!= y とすると, |
② | x <> y<> zの場合 | x!= y!= z: |
1、単純に比較する。 2、比較的複雑な3つの値の比較、
Python 2では,辞書オブジェクトのhas_key (※) メソッドは,辞書に特定のキー (※) が含まれているかどうかをテストするために使用されます.このメソッドはPython 3ではサポートされていません.中演算子、
注記 | パイソン 2 | パイソン 3 |
---|---|---|
① | 辞書には鍵がある | |
② | a_dictionary.has_key ((x) または a_dictionary.has_key ((y) | x は a_dictionary で,y は a_dictionary で |
③ | a_dictionary.has_key ((xまたはy) | (x または y) a_dictionary |
④ | a_dictionary.has_key ((x + y) について | (x + y) は a_dictionary で |
⑤ | x + a_dictionary.has_key ((y) は,このリストの1つです. | x + (a_dictionaryでy) |
1、最も簡単な形式である.
2、or の優先度は in の優先度より低いので,括弧を追加する必要はありません.
3,一方,同じ理由で,
Python 2では,多くの辞書式メソッドの返却値はリストである.最も一般的なメソッドにはキー,アイテム,およびvaluesが含まれている.Python 3では,上記のすべてのメソッドの返却値はダイナミックビューに変更されている.いくつかの文脈環境では,この変更は影響を受けない.これらのメソッドの返却値は,別の関数に即座に転送され,その関数は一連の全体にわたって移動する場合は,上記のメソッドの返却値はリストまたはビューであり,何も変化しない.他の場合では,Python 3 の関数は大きく変化している.
注記 | パイソン 2 | パイソン 3 |
---|---|---|
① | a_dictionary.keys (辞書.キー) | リスト (a_dictionary.keys) |
② | a_dictionary.items (辞書.アイテム) | リスト (a_dictionary.items) |
③ | a_dictionary.iterkeys (辞書) | iter ((a_dictionary.keys()) について |
④ | [i for iin a_dictionary.iterkeys (英語) ] | [i for iin a_dictionary.keys() ] [i for iin a_dictionary.keys() ] [i for iin a_dictionary.keys() ] [i for iin a_dictionary.keys() ] [i for iin a_dictionary.keys (辞書.キー) ] [i for iin a_dictionary.keys (辞書.キー) ] |
⑤ | キーを入力してください. | 変更なし |
1, list を使って () は,keys を静止リストに変換します.安全上の理由から,2to3 はエラーを返します. このようなコードは有効ですが,ビューを使用するには効率が低いです. 変換されたコードをチェックして,必ずリストが必要かどうかを確認してください. おそらくビューも同じ作業を行うでしょう. 2、これは別の見方である. 2〜3対値の方法がリストへの変換である. 3, Python 3 ではiterkeysは支持されなくなった. 必要に応じて,iter (イター) を使って,keys (イター) の返却値をイデーターに変換する. 4、2to3 はリスト解析で使用されているiterkeys (※) 方法を識別し,それをPython 3 のkeys (※) 方法 (※) に変換する.これは,ビューがイレラティブであるため実行可能である. 5、2to3はまた,keys() 方法の返した値がすぐに他の関数に転送されるので,keys() の返した値がリストに変換する必要はありません.逆に,min() は喜んで視野を回します.このプロセスはmin (min),max (max),sum (sum),tuple (tuple),setlist (sorted),any (any) とall (all) にも同様に有効です.
Python 2からPython 3までの標準庫のモジュールは,いくつかの名前を変えた.また,いくつかの相互に関連したモジュールは,より論理的な関連化のために,組み立てまたは再編成された.
注記 | パイソン 2 | パイソン 3 |
---|---|---|
① | httplib をインポートする | http.client をインポートする |
② | 輸入するクッキー | http.cookies をインポートする |
③ | クッキーリブを輸入する | http.cookiejar をインポートする |
④ | BaseHTTPServer をインポート SimpleHTTPServer をインポート CGIHttpServer をインポート |
http.server をインポートする |
http.client モジュールは,HTTP リソースをリクエストし,HTTP 応答を解析するために使用できる底層のリバリーを実装します. http.cookies モジュールは,HTTPヘッダー (HTTP header) を介して送信される Set-Cookie のクッキーを取得するための,ピトニックのようなインターフェースを提供します. 一般的なブラウザでは,クッキーをファイルとしてディスクに保存し,http.cookiejarモジュールはこれらのファイルを操作します. http.server モジュールは基本的なHTTPサーバーを実装する
注記 | パイソン 2 | パイソン 3 |
---|---|---|
① | 輸入 urllib | urllib.request urllib.parse,urllib.error をインポートする |
② | 輸入 urllib2 | urllib.request urllib.error をインポートする |
③ | 輸入 URL パース | urllib.parse をインポートする |
④ | ロボットパーサーをインポートする | urllib.robotparserをインポートする |
⑤ | urllib からの輸入 FancyURLopener urllib からの輸入 urlencode |
urllib.requestからインポート FancyURLopener urllib.parseからインポート urlencode |
⑥ | urllib2からの輸入 要求 urllib2からの輸入 HTTPError |
urllib.requestから輸入 request urllib.errorから輸入 HTTPError |
以前は,Python 2 のurllib モジュールは,データを取得するためのurlopen (※) を含む様々な機能を持っていたが,URLをその構成要素であるsplittype (※),splithost (※) とsplituser (※) に分割するのに有用だった.新しいurllib パッケージでは,これらの機能はより論理的に組織されている. Python 3では,以前の urllib2 モジュールが urllib パッケージに組み込まれている.また,urllib2では,様々なあなたのお気に入りのものが,Python 3 の urllib モジュールに必ず現れる.例えば,build_opener (),Request (),HTTPBasicAuthHandler (),そしてfriends (). Python 3 の urllib.parse モジュールは,オリジナルの Python 2 の urlparse モジュールのすべての解析関数を含んでいます. urllib.robotparse モジュールは,robots.txt ファイルを解析する. HTTP リダイレクトと他の状態コードを処理するFancyURLopener クラスは,Python 3 の urllib.request モジュールで有効である.urllib.parse に移動されている. Request オブジェクトは urllib.request でまだ有効ですが,HTTPError のような常数は urllib.error に移動されています. 2to3は,あなたの関数呼び出しも書き換えると言及しましたか? たとえば,Python 2 コードに urllib モジュールをインポートして,urllib.urlopen () 関数を呼び出してデータを取得した場合,2to3は,インポート文と関数呼び出しを同時に修正します.
注記 | パイソン 2 | パイソン 3 |
---|---|---|
① | 輸入 urllib プリント urllib.urlopen"http://diveintopython3.org/’) 読みました | 輸入 urllib.request, urllib.parse, urllib.error print ((urllib.request.urlopen (() "http://diveintopython3.org/’) 読みました. |
注記 | パイソン 2 | パイソン 3 |
---|---|---|
① | インポート dbm | dbm.ndbmを輸入する |
② | 輸入 gdbm | 輸入dbm.gnu |
③ | dbhashをインポートする | dbm.bsdをインポートする |
④ | インポート dumbdbm | dbm.dumbをインポートする |
⑤ | 輸入する |
インポート dbm |
注記 | パイソン 2 | パイソン 3 |
---|---|---|
① | xmlrpclib をインポートする | xmlrpc.clientをインポートする |
② | DocXMLRPCServer をインポートする SimpleXMLRPCServer をインポートする |
xmlrpc.serverをインポートする |
注記 | パイソン 2 | パイソン 3 |
---|---|---|
① | try: cStringIO をStringIO としてインポート except ImportError: import StringIO |
輸入する |
② | try: import c pickle as pickle except ImportError: import pickle import pickle import pickle import pickle import pickle import pickle import pickle import pickle import pickle import pickle import pickle import pickle import pickle import pickle import pickle import pickle import pickle |
輸入ピクルス |
③ | 輸入する建築物 | 輸入 建築物 |
④ | コピー_レグをインポートする | 輸入コピーレグ |
⑤ | 輸入キュー | 輸入キュー |
⑥ | SocketServer をインポートする | インポートソケットサーバー |
⑦ | ConfigParser をインポートする | コンフィグパーサーをインポートする |
⑧ | 輸入 repr | 輸入 reprlib |
⑨ | インポートコマンド | 輸入サブプロセス |
1, Python 2 で通常行うことは,まずcStringIO をStringIO の代替として輸入しようとし,失敗した場合,StringIO を再輸入することです. Python 3 ではそうしないでください. io モジュールは,この問題を処理します. 2, Python 2 で,最速の pickle 実装を輸入することは上記のような有効な方法でもあります. Python 3 では, pickle モジュールが自動的に処理されますので,これ以上しないでください. 3.builtins モジュールは,Python 言語全体で使用されるグローバル関数,クラス,常数を含んでいます. Builtins モジュールのある関数を再定義することは,このグローバル関数をあらゆる場所で再定義することを意味します. これは強力に聞こえますが,同時に恐ろしいことです. 4,copyregモジュールは,C言語で定義されたユーザーカスタム型にピクルスモジュールのサポートを追加した. 5,queueモジュールは,生産者消費者のキュー ("multi-producer, multi-consumer queue") を実現する. 6. socketserver モジュールは,様々なソケットサーバを実装するための一般的な基礎クラスを提供します. 7. configparser モジュールは,INI-style プロフィール解析に使用される. 8. reprlib モジュールは,内蔵関数repr (,) を再実装し,文字列表示が切断される前の長さの制御を追加した. 9, subprocess モジュールは,子プロセスを作成し,それらのパイプに接続し,それらの返し値を取得することを可能にします.
パッケージは関連モジュールの集合からなる単一の実体である. Python 2では,同じパッケージ内のモジュールの相互引用を実現するために, import foo または from foo import Bar を使用します.2解释器会先在当前目录里搜索foo.pyPython 3では,このプロセスは少し異なります. Python 3は,まず現在のパスで検索するのではなく,Python の検索パスで直接検索します. パッケージ内のモジュールが他のパケットにインポートされたい場合は,二つのモジュールの相対的な経路を明示的に提供する必要があります.
複数のファイルが同じディレクトリにある場合,
カーデット 素晴らしいです ±-init.py 素晴らしいです+--常数.py | +--mbcharsetprober.py 試聴する | +--ユニバーサル検出器.py
ユニバーサルデテクター.py は,コンスタンツ.py をすべてインポートする必要があります.,另外还需要导入mbcharsetprober.py的一个类。你会怎样做?
注記 | パイソン 2 | パイソン 3 |
---|---|---|
① | 輸入定数 | .import の常数から |
② | mbcharsetproberからインポート MultiByteCharSetProberから | .mbcharsetproberからインポート MultiByteCharsetProber |
1、パッケージの他の場所からモジュール全体をインポートする必要がある場合,新しいfrom. import 文法を使用します.ここでの句号は,現在のファイルを表示します.universaldetector.pyファイルを輸入したい場合は,constants.py) の間の相対経路である.この例では,両方のファイルが同じディレクトリにあるため,単一の句号を使用している.また,父ディレクトリ ((from... import anothermodule) からまたは子ディレクトリから輸入することもできます. 2,特定のクラスまたは関数を他のモジュールから直接あなたのモジュールの名前空間にインポートするには,インポートしたいモジュールの前に相対的なパスを追加し,最後の斜めを削除します.この例では,mbcharsetprober.pyとuniversaldetector.pyは同じディレクトリにありますので,相対的なパス名は句号です.また,父ディレクトリ ((from... import anothermodule) または子ディレクトリからインポートすることもできます.
Python 2では,イデーターには次列の次を返す next ((() メソッドがあります. Python 3では同じことが行われますが,新しいグローバル関数 next ((() が登場し,イデーターを参数として使用します.
注記 | パイソン 2 | パイソン 3 |
---|---|---|
① | anIterator.next ((() について | 次の (aniterator) |
② | a_function_that_returns_an_iterator (().next (() について | next ((a_function_that_returns_an_iterator()) この関数で |
③ | クラスA: def next ((self): パス |
クラスA: def _次は(自己): パスする |
④ | クラスA: def next ((self, x, y): 合格 |
変更なし |
⑤ | next = 42 a_sequence_of_iteratorsの_iteratorについて: an_iterator.next ((() |
next = 42 a_sequence_of_iteratorsの_iteratorについて: an_iterator._次は() |
1番,最も簡単な例では,あなたは nextの方法を呼び出すのをやめて,現在,アイデーター自身を global function nextに参数として渡している. 2、もしあなたが返した値がイデレータの関数である場合,この関数を呼び出し,結果をnextの参数として渡す. Python3では,特殊な方法の定義によって, 特殊な方法の定義をすることができます.次は(中略) 実現する. 4、もし定義されたクラスに偶然nextが存在する場合,それは2〜3を実行するときに動かない.このクラスは,nextの方法が参数を持つため,イレーターとして使用できません. 5 これは少し複雑です. Python3では,nextというローカル変数が存在する場合,その優先度は,グローバル関数nextよりも高いでしょう.次は2to3はあなたのためにそれをしません. 2to3はあなたのためにそれをしません. 2to3はあなたのためにそれをしません.
Python 2では,filter ((() メソッドがリストを返します. このリストは,True または False の値が返される関数で,配列の各項を検知します.
注記 | パイソン 2 | パイソン 3 |
---|---|---|
① | フィルタ (a_関数,a_配列) | list (フィルター) a (関数) a (順序) |
② | list (フィルター) a (関数) a (順序) | 変更なし |
③ | フィルター (a_sequence) | [i は iin a_sequence で,i は |
④ | フィルター (a_sequence) の i に対して: | 変更なし |
⑤ | [iはインフィルター (a_function, a_sequence) ] | 変更なし |
1,最も単純な場合,2to3は filter を list () 関数で包み込み,list () 関数はその参数を通過してリストを返します. 2、しかし,もし filter ((() の呼び出しが list ((() に包まれた場合,2to3は処理をしない.この場合, filter ((() の返した値がイデターであるかどうかは重要ではない. 3、 filter (None,...) のような特殊な文法処理のために,2to3は,この呼び出しを文法的に等価にリスト解析に変換します. 4. for ループは,順序全体を通るので,これ以上修正する必要はありません. 5、上記と同じで,リスト解析が序列全体にわたって行われ,フィルタがイデーターに戻っても,以前のフィルタがリストに戻ったように正常に動作するので,変更する必要はありません.
フィルター (==) の変更と同じで,map (==) は現在イデター (==) を返します.
注記 | パイソン 2 | パイソン 3 |
---|---|---|
① | マップ (a_function, |
リスト (マップ) 機能 (パパヤウィップ) |
② | マップ (誰もいない, |
リスト (( |
③ | map ((lambda x: x+1,range ((42)) | [x+1は範囲内のxに対して (x=42) ] |
④ | i のために map ((a_function, a_sequence): | 変更なし |
⑤ | [i はインマップ (a_function,a_sequence) ] | 変更なし |
1, filter (==) に類似した処理で,最も単純な場合,2to3はmap (==) を呼び出すためにlist (==) 関数で包み込む. 2、特殊なmap ((None,...) の文法では,filter ((None,...) に類似して,2to3はそれをlist (リスト) の等価呼び出しに変換します. 3、mapの最初の参数がlambda関数である場合,2to3はこれを等価にリスト解析に変換します. 4、 for ループは,序列全体を横切るので,変更する必要はありません. 5. また,リスト解析が順序全体にわたって行われ,map ((() の返した値がリストではなくイデーターである場合でも正常に動作するので,ここでは変更する必要はありません.
Python 3では,reduce () 関数はグローバルネームスペースから削除され,現在fucntools モジュールに置かれている.
注記 | パイソン 2 | パイソン 3 |
---|---|---|
① | 減少 (a,b,c) | functoolsから輸入を減らすa,b,c |
Python 2には apply ((() と呼ばれるグローバル関数があり,関数 f と列表 [a, b, c] を参数として使用し,f ((a, b, c) と返します.この関数に直接呼び出し,列表の前に星号 (*) を添付して参数として渡すことで同じことをすることができます.Python 3 では,apply ((() は存在しないので,星号表示法を使用する必要があります.
注記 | パイソン 2 | パイソン 3 |
---|---|---|
① | apply (a_function, a_list_of_args) を適用する | a_function ((*a_list_of_args) について |
② | apply (a_function, a_list_of_args, a_dictionary_of_named_args) について | a_function ((*a_list_of_args,**a_dictionary_of_named_args) (a_function (a_list_of_args,**a_dictionary_of_named_args) について説明する) |
③ | apply (a_function, a_list_of_args+z) を適用する | a_function ((*a_list_of_args+z) について |
④ | 適用する (aModule.a_function, a_list_of_args) | aModule.a_function ((*a_list_of_args) について |
1,最も簡単な形式では,パラグラムリスト ((a, b, c のように) の前に星号を加えることで関数を呼び出すことができます. これはPython 2 のapply ((() 関数と等価です. 2、Python 2では,apply 函数には実際に 3 つの参数があります:関数,参数リスト,辞書名付け参数.),辞書名付け参数の前に2つの星号 ((**) を追加することで同じ効果が得られる. 3 操作符+ はここに接続リストの関数として使用され,その優先度は操作符より高い., a_list_of_args + z の周りに追加括弧を追加する必要はありません. 4、2〜3のスクリプトは,モジュール内の関数をインポートする呼び出しを含む,複雑なapply () 呼び出しを変換するのに十分なスマートである.
Python 2では,intern () 関数を文字列に限定して,パフォーマンスの最適化を実現できます. Python 3では,intern () 関数はsysモジュールに移行されています.
注記 | パイソン 2 | パイソン 3 |
---|---|---|
① | インターン (aString) | sys.intern ((aString) について |
プリント文がPython 3で関数になるように,exec文もそうである。exec() 関数は任意のPythonコードを含む文字列を参数として使用し,実行文や表現のように実行します。exec() はeval (eval) と似ているが,exec (eval) はより強力で巧妙である。(eval (exec) は単一の表現のみを実行できるが,exec (exec) は複数の表現を実行できる。(輸入 (import),関数宣言 (function declaration)
注記 | パイソン 2 | パイソン 3 |
---|---|---|
① | execコード 文字列 | exec (コード) 文字列 |
② | exec code a_global_namespace の文字列 | exec ((code) 文字列,a_global_namespace) |
③ | execコード a_global_namespace, a_local_namespace の文字列 | exec ((code) 文字列,a_global_namespace,a_local_namespace) |
1、最も単純な形式では,exec (() が文ではなく関数であるため,2to3はこの文字列形式のコードを括弧で囲みます. 2, Python 2 の exec 文は名前のスペースを指定し,このグローバルオブジェクトからなるプライベートスペースでコードを実行します. Python 3 では同様の機能があります.この名前のスペースを exec ()) 函数に2番目のパラグラムとして渡すだけです. 3、さらに奇妙なことに,Python 2 のexec 文は,ローカルな名前空間 (例えば関数で宣言される変数) を指定することもできます.
前回のexec文と同様に,Python 2のexecfile文は,Python のコードを実行するように文字列を使用できます. exec が文字列を使用し,execfile がファイルを使用するとは異なります. Python 3では,execfile文は削除されています.
注記 | パイソン 2 | パイソン 3 |
---|---|---|
① | execfile (( |
exec (コンパイル) (オープン) (ファイル名) (読み) (ファイル名) (実行) |
Python 2では,任意のオブジェクトの文字列を表示するために,オブジェクトを反引数で包む方法があります.x
) の特殊語法である.この機能はPython 3ではまだ存在していますが,反引数を使って文字列を表示することはできません.グローバル関数repr() を使います.
注記 | パイソン 2 | パイソン 3 |
---|---|---|
① | `x` | 返信する |
② | ` |
パパヤウィップ+プレ (2) |
1, x は何でもあり得る. クラス,関数,モジュール,基本的なデータ型,など........................................................................................................................................................................................................................................ 2、Python 2では,反引数は嵌入可能で,この解読が難しい (しかし有効な) 表象を導きます. 2to3は,この嵌入式呼び出しをrepr () 函数に変換するほどスマートです.
Python 2からPython 3までの間,異常を捕捉する語法が少し変わることがある.
注記 | パイソン 2 | パイソン 3 |
---|---|---|
① | try: import mymodule except ImportError, e をパスする |
try: import mymodule except ImportError as e: pass を入力する |
② | try: import mymodule except (RuntimeError, ImportError), e をパスする |
try: import mymodule except (RuntimeError, ImportError) を e: に渡すように |
③ | try: import mymodule except ImportError: pass を入力する |
変更なし |
④ | try: import mymodule except: pass を入力する |
変更なし |
1, Python 2 で異例型の後ろにコマを加えるのと比べて, Python 3 では新しいキーワード, as を使用します. 2, as は複数の種類の異常を同時に捕捉する場合でも使用できます. Python 2とPython 3の語法が同じです. Python 2とPython 3の語法では,Python 2とPython 3の語法では,Python 2とPython 3の語法では同じです. 4, 同様に,すべての異常をキャプチャするために, fallback を使用すると, Python 2 と Python 3 の語法が同じになります. 5. モジュール (または他のほとんどの場合) をインポートするときに,この方法 (上のフォールバックを参照してください) を絶対使用すべきではありません. そうでなければ,プログラムは,キーボード中断 (ユーザがCtrl-Cでプログラムを中断した場合) などの異常を捕獲し,デビューをさらに困難にします.
Python 3では,カスタム異常を投げ出す文法に微妙な変化があります.
注記 | パイソン 2 | パイソン 3 |
---|---|---|
① | MyException を上げます | 変更なし |
② | MyException を表示する, |
MyException をアップする (エラー メッセージ) |
③ | MyException, |
MyExceptionをアップする (エラーメッセージ).with_traceback (a_traceback) |
④ | サポートされていない |
1、ユーザがカスタマイズした誤った情報を伴わない異常を投げ出す,この最も単純な形態では,文法が変化しない. 2. ユーザが設定したエラーメッセージを含む異常を投げたいとき,変更は明らかである. 2. Python 2 は異常類とエラーメッセージをコマで区切る. Python 3 は異常類にエラーメッセージをパラメータとして渡す. 3. Python 2 は,ユーザーにカスタムされたバック (stack trace,スタック追跡) を伴う異常を投げ出すため,より複雑な語法をサポートします. Python 3 では,同じことをできますが,語法が全く異なります. Python 2 では,異常類のない異常を投げ出すことができますが,異常メッセージのみです. Python 3 では,この形式はサポートされていません. 2to3 は,この文法を自動的に修正できないことを警告します.
Python 2では,ジェネレータには throw (throw) 方法がある. a_generator.throw (throw) を呼び出すと,ジェネレータが停止しているときに異常を投げ,ジェネレータ関数によって取得された次の値に戻す. Python 3では,この機能はまだ利用可能ですが,文法的には少し異なります.
注記 | パイソン 2 | パイソン 3 |
---|---|---|
① | a_generator.throw (マイエクセプション) | 変更なし |
② | a_generator.throw ((MyException, |
a_generator.throw ((MyException (( |
③ | a_generator.throw (エラーメッセージ) | サポートされていない |
1,最もシンプルな形態では,生成者がユーザーにカスタマイズされたエラーメッセージが伴わない異常を投げ出す.この場合,Python 2 から Python 3 に代わる文法的には変化しません. 2、生成者がユーザーにカスタマイズされたエラーメッセージの異常を投げ出した場合,このエラーメッセージ文字列を異常クラスに伝達してインスタンスする必要があります. 3. Python 2 は,異常メッセージのみの異常を投げ出すこともサポートしています. Python 3 は,この構文をサポートしていません. 2to3 は,このコードを手動で修正する必要があることを警告するメッセージを表示します.
Python 2では,特定の範囲の数字を得るには2つの方法があります:range (),リストを返し,range (),イデーターを返します.
注記 | パイソン 2 | パイソン 3 |
---|---|---|
① | xrange ((10) について | 範囲 ((10) |
② | a_list = range (範囲) | a_list = リスト (範囲) |
③ | [i 範囲内について (i) ] | [i 範囲について (i) 10) ] |
④ | i の範囲で"0: | 変更なし |
⑤ | 合計 (範囲) | 変更なし |
1,最も簡単な場合,2to3は単にxrange (range) をrange (range) に変換します. 2、あなたのPython 2コードが range を使っている場合,2to3 はリストが必要なのか,またはイデーターが動作しているのかわからない.注意のために,2to3 はエラーを返信し,list を使って range の返却値をリスト型に強制変換する. 3. リスト解析に xrange (xrange) が存在する場合,リスト解析がイデレーターに対して同様に有効であるため,リストに変換する必要はありません. 4、同様に,forループはイレータにも作用するので,ここでも何も変わっていない. 5, sum () はイデレーターで動作するので,2to3 はここでも変更されません. リストの辞書式方法ではなく,view () を返したような方法では,min (min),max (max),sum (sum),list (list),tuple (tuple),set (set),sorted (sorted),any (any),all (all) なども同じです.
Python 2には,コマンドラインでユーザ入力を要求する2つのグローバル関数がある.最初の関数はinput (入力) と呼ばれ,ユーザがPythonの表現を入力して結果を返すのを待つ.第2関数はraw_input (raw_input) と呼ばれ,ユーザが入力したものが返ってくる.これは初心者にとって非常に混乱し,これは広くPython言語のワート (wart) と見なされている.Python 3は,このワート (wart) をinput (入力) と改名することで切除した.したがって,現在のinput (入力) は,誰もが最初期待していたように動作する.
注記 | パイソン 2 | パイソン 3 |
---|---|---|
① | raw_input (() について | インプット |
② | raw_input (( |
入力 (→ 速報) |
③ | インプット | 評価 (入力) |
1,最も簡単な形式では,raw_input ((() はinput ((() に置き換えられます. 2, Python 2 では,raw_input ((() 関数は,提示符を参数として指定できます. Python 3 では,この関数を保持しています. 3、ユーザにPython式を入力するよう要求したい場合,結果を計算する場合は,input ((() 関数を呼び出し,eval ((() に返した値を渡すことができます.
Python 2では,関数のコードが関数の特有の属性にアクセスできる. Python 3では,一貫性のために,これらの特有の属性が改名されている.
注記 | パイソン 2 | パイソン 3 |
---|---|---|
① | a_function.func_name について | a_関数_名前 |
② | a_function.func_doc について | a_関数_医者は |
③ | a_function.func_defaults について | a_関数_デフォルト_ |
④ | a_function.func_dict について | a_関数_ディクト_ |
⑤ | a_function.func_closure について | a_関数_閉じる |
⑥ | a_function.func_globals を表示する | a_関数_グローバル_ |
⑦ | a_function.func_code について | a_関数_コード_ |
1、__name__属性 (原func_name) は,関数の名前を含んでいます. 2,__doc__属性 (原funcdoc) は,関数のソースコードで定義したドキュメント文字列 (docstring) を含む 3,__defaults__属性 (原func_defaults) は,参数のデフォルト値を保存する要素群である. 4,__dict__属性 (原 function_dict) は任意の関数属性をサポートする名前空間である. 5,__closure__属性 (原func_closure) は,セルオブジェクトからなる要素群であり,自由変数に対する関数の結合を含んでいる. 6,__globals__属性 (原func_globals) は,モジュールのグローバルネームスペースへの参照であり,そのネームスペースで定義される機能である. 7,__code__属性 (原func_code) は,コンパイルされた関数体を表すコードオブジェクトである.
Python 2では,ファイルオブジェクトにはxreadlines ((() メソッドがあり,それはアイテラーを返し,一度に1行ずつファイルを読みます.これは特にforループで便利です.実際,Python 2 の後編版ではファイルオブジェクト自体にこのような機能を追加しました.
Python 3では,xreadlines (xreadlines) 方法が利用できなくなった. 2to3は簡単な問題を解決できるが,いくつかのエッジケースには人工的な介入が必要である.
注記 | パイソン 2 | パイソン 3 |
---|---|---|
① | a_file.xreadlines (a_file.xreadlines) の行について: | a_file の行について: |
② | a_file.xreadlines (a_file.xreadlines)) の行について: | 変更なし (破損) |
1、前回,参数のないxreadlinesを呼び出す場合, 2to3はそれをファイルオブジェクトに変換します. Python 3では,この変換後のコードは,前と同じ作業を行うことができます. ファイルの一行を一度読み,その後forループのループを実行します.
2、2to3がPython 2からPython 3への変換を完了できない場合,あなたのコードは以下のように失敗します: AttributeError:
Python 2では,匿名のlambda関数を定義し,参数として要素数を指定することで,この関数は実際に複数の参数を受け取りることができる. 実際,Python 2のインタープリタは,この要素を名前の参数として解読します.そして,それらを名前のlambda関数で引用することができます. Python 3では,あなたはまだ単元群をlambda関数の参数として転送することができますが,Python インタープリタはそれを名前の参数として解読しません.あなたは位置インデックス (positional index) によって各参数を参照する必要があります.
注記 | パイソン 2 | パイソン 3 |
---|---|---|
① | ラムダ (x,): x+ f (x) | ラムダ x1: x1[0]+f(x1[0]) |
② | ラムダ (x,y): x+f(y | lambda x_y: x_y[0]+f(x_y[1]) |
③ | ラムダ (x,(y,z)): x+y+z | lambda x_y_z: x_y_z[0]+x_y_z[1][0]+ x_y_z[1][1] |
④ | ラムダ x,y,z: x+y + z | 変更なし |
1,もしあなたがlambda関数を定義している場合,それは要素を含む元组を参数として使用します. Python 3では,それはx1[0]への参照を含むlambda関数に変換されます. x1は2to3スクリプトで,元の元组内の命名参数に基づいて自動的に生成されます. 2、2つの要素を含む元组 ((x, y) を参数として使用したラムダ関数は,x_yに変換され,その位置参数がx_y[0]とx_y[2]である. 3、2to3スクリプトは,ネスト名付け参数を使用した要素群を参数としてラムダ関数として処理することもできます. 結果コードは少し読み難いですが,Python 3ではオリジナルのコードとPython 2では同じ効果があります. 4. 複数の参数を使用したラムダ関数を定義できます. 参数に括弧がない場合,Python 2 はそれを複数の参数を含むラムダ関数として扱います. このラムダ関数体では,他のタイプの関数と同様に,参数に名前で言及します. この文法がPython 3 で有効です.
Python 2では,クラスメソッドは,それらを定義するクラスオブジェクト (class object) にアクセスし,方法オブジェクト (method object) にアクセスすることができる.im_selfはクラスのインスタンスオブジェクト,im_funcは関数オブジェクト,im_classはクラス自身である.
注記 | パイソン 2 | パイソン 3 |
---|---|---|
① | aClassInstance.aClassMethod.im_func について | aClassInstance.aClassMethod._ クラスインスタンス,クラスメソッド._機能_ |
② | aClassInstance.aClassMethod.im_self について | aClassInstance.aClassMethod._ クラスインスタンス,クラスメソッド._自分で |
③ | aClassInstance.aClassMethod.im_class について | aClassInstance.aClassMethod._ クラスインスタンス,クラスメソッド._自分で._クラス_ |
Python 2では,自分のクラスを作成し,それを boolean context で使うことができます.例えば,このクラスをインスタンシズして,このインスタンスのオブジェクトをif文で使うことができます.この目的のために,あなたは特殊な_を定義します.ゼロではないこの方法が呼び出されるのは,例のオブジェクトがブル上の文脈にあるときです. Python 3では,同じ機能を実行できますが,この特殊な方法の名前は変わります.ボール_()。
注記 | パイソン 2 | パイソン 3 |
---|---|---|
① | クラスA: def _ゼロではない(自己): 合格 |
クラスA: def _ボール_(自己): 合格 |
② | クラスA: def _ゼロではない(自己,x,y): パス |
変更なし |
ブル文脈でクラスオブジェクトを使用すると,Python 3 は_ を呼び出します.ボール_微分数でゼロではない(゚∀゚) 2 は 2 になります.ゼロではない() メソッドは,2to3 スクリプトは,あなたが定義したメソッドが他の用途があると仮定し,コードに変更を加えない.
Python 2 と Python 3 の間では,八進法 (オクトール) の数値を定義する語法がわずかに変化している.
注記 | パイソン 2 | パイソン 3 |
---|---|---|
① | x = 0755 | x = 0o755 |
長整形と整形が統合されたため,sys.maxintの定数は正確にはならない.しかし,この値は特定のプラットフォームを検知する能力のために有用であるため,Python 3によって保留され,sys.maxsizeに改名された.
注記 | パイソン 2 | パイソン 3 |
---|---|---|
① | sys importmaxintから | sys からのインポートmaxsize |
② | a_function (sys.maxint) | a_function ((sys.maxsize) について |
1,maxint は maxsize に変更されました. 2,すべてのsys.maxintはsys.maxsizeに変更される.
Python 2では,グローバル関数callable (c) を使ってオブジェクトが呼び取れるかどうかをチェックできます. Python 3では,このグローバル関数はキャンセルされています.オブジェクトが呼び取れるかどうかをチェックするには,特別な方法を確認できます.呼んで存在が証明されている.
注記 | パイソン 2 | パイソン 3 |
---|---|---|
① | 呼び出せる (何でも) | 何にもならない呼んで’) |
Python 2では,全局関数zip ((() は任意の複数の配列を参数として使用し,要素からなるリストを返します.最初の配列は各配列の最初の要素を含みます.第二配列は各配列の第二要素を含みます.順番に押し下げます.Python 3では,zip ((() はリストではなく,イデーターを返します.
注記 | パイソン 2 | パイソン 3 |
---|---|---|
① | zip ((a,b,c) | リスト (a,b,c) |
② | d.join ((zip ((a,b,c)) | 変更なし |
最も簡単な形態では,zip (リスト) の前の関数を呼び出し,zip (リスト) の返還値をリスト (リスト) に呼び戻すことができます.リスト (リスト) は,zip (リスト) を返したイデターを通り,結果のリスト表示を返します. シリアルのすべての要素を既に横行している文脈環境 (例えば,ここではjoin (join) の方法の呼び出し) において,zip (zip) を返したイデーターは正常に動作します. 2to3スクリプトはこれらの状況を検知し,あなたのコードに変更を加えません.
Python 2では,StandardErrorは,StopIteration,GeneratorExit,KeyboardInterrupt,SystemExit以外のすべての内置異常基類である.
注記 | パイソン 2 | パイソン 3 |
---|---|---|
① | x =StandardError (標準エラー) | x = 例外 |
② | x =StandardError ((a,b,c) について | x =例外 (a,b,c) |
types モジュールは,あるオブジェクトの型を決定するのに役立つ様々な定数を持っています. Python 2 では,すべての基本的なデータ型を代表する定数を含みます.
注記 | パイソン 2 | パイソン 3 |
---|---|---|
types.UnicodeType | ストラ | |
types.StringType | バイト | |
types.DictType | ディクト | |
types.IntType | int | |
types.LongType | int | |
types.ListType | リスト | |
types.NoneType | タイプ (ない) | |
types.BooleanType | ボール | |
types.BufferType | メモリービュー | |
types.ClassType | タイプ | |
types.ComplexType | 複雑 | |
types.EllipsisType | 型 ( |
|
types.FloatType | 浮遊機 | |
types.ObjectType | オブジェクト | |
types.NotImplementedType | type ((実行されていない) | |
types.SliceType | スライス | |
types.TupleType | トゥップル | |
types.TypeType | タイプ | |
types.XRangeType | 範囲 |
types.StringTypeは,Python 2 の
isinstance () は,あるオブジェクトが特定のクラス (class) またはタイプ (type) のインスタンスであるかどうかをチェックする. Python 2 では,Type (types) の構成要素をインスタンス (isinstance) に転送することができます.
注記 | パイソン 2 | パイソン 3 |
---|---|---|
このインスタンス (x,int,float,int) | このインスタンスは (x,int,float) |
Python 2には2つの文字列タイプがあります. Unicode でコードされた文字列と,非 Unicode でコードされた文字列.しかし,実際には別のタイプ,つまりbasestring があります.これは抽象的なデータタイプで,str と unicode の超クラスです.直接呼び出したりインスタンスしたりすることはできません.しかし,オブジェクトがUnicode 文字列か非Unicode 文字列であるかどうかを検知するためのインスタンスのパラグラムとして使用できます.Python 3 では,文字列の種類が1つしかありませんので,basestring は必要ありません.
注記 | パイソン 2 | パイソン 3 |
---|---|---|
isinstance ((x,ベースストリング) | isinstance ((x,str) について |
Python 2.3では,itertools モジュールを導入し,グローバル機能zip (),map (),filter (),およびこれらの変数の返却型はリストではなくイレーターである (variant) を定義した.Python 3では,これらのグローバル機能の返却型がイレーターであるため,これらのitertools内の変数関数は取り除かれた.
注記 | パイソン 2 | パイソン 3 |
---|---|---|
① | itertools.izip (a,b) について | zip (a,b) |
② | itertools.imap (a,b) について | 地図 (a,b) |
③ | itertools.ifilter ((a,b) について | フィルター (a,b) |
④ | イターツールからIMAP,IZIP,FOOをインポートする | itertoolsからインポート foo |
1、itertools.izipの代わりに全局的なzipの関数を使用します. 2、iitertools.imapの代わりにmapを使用します. 3、itertools.ifilter() はフィルターになりました. 4,itertools モジュールは,Python 3 でまだ存在している.それは単に,グローバルネームスペースに移動した関数を含まないだけです. 2to3 スクリプトは,他のインポート文の完全性を保持しながら,もはや役に立たないインポート文を削除するのに十分な知性を持っています.
異例処理時に,sys モジュールの内には,sys.exc_type,sys.exc_value,sys.exc_traceback をアクセスできる3つの変数があります. (実際,これらの変数はPython 1 の時代には存在していました.
注記 | パイソン 2 | パイソン 3 |
---|---|---|
sys.exc_type について | sys.exc_info (()) [0] | |
sys.exc_value について | sys.exc_info (() [1] | |
sys.exc_traceback について | sys.exc_info (() [2] |
Python 2では,元组を横断するリスト解析を書きたい場合は,元组値の周りに括弧を加える必要はありません.
注記 | パイソン 2 | パイソン 3 |
---|---|---|
[i は 1,2] | [i は iin (i) 1,2) ] |
Python 2には os.getcwd ((() という関数があり,現在の作業目録を (非ユニコードコード) 文字列として返します.現代のファイルシステムが何文字もコードできるディレクトリ名を処理できるので,Python 2.3 ではos.getcwdu ((() 関数が導入されました.os.getcwdu ((() 関数は,現在の作業目録をユニコードコード文字列で返します.Python 3 では,単一の文字列があるため,os.getcwd ((() が必要です.
注記 | パイソン 2 | パイソン 3 |
---|---|---|
os.getcwdu ((() について | os.getcwd ((() について |
Python 2では,クラス宣言の中でメタクラスの参数を定義したり,特別なクラスレベルの
注記 | パイソン 2 | パイソン 3 |
---|---|---|
① | クラスC (メタクラス=パパヤメタ): 合格 |
変更なし |
② | クラスウィップ:メタクラス_= パパヤメタ | クラスウィップ (metaclass=PapayaMeta): パス |
③ | クラスC (鞭打者,打者):メタクラス_= パパヤメタ | クラスC ((ウィッパー,ビッター,メタクラス=パパヤメタ): 合格 |
1, クラスを宣言するときにメタクラスの参数を宣言する.これはPython 2とPython 3の両方で有効であり,それらは同じである. 2, クラス定義の中で__metaclass__属性がPython 2で有効であると宣言するが,Python 3では有効ではない. 3, 2to3 は,複数の親類から受け継がれても,有効なクラス宣言を構築できます.
以下に記載されている修正は,本質的には本当の修正ではない.つまり,それらはコードのスタイルに関するものであって,コードの本質に関わっていない.しかし,Pythonの開発者はコードのスタイルをできるだけ一致させることに非常に興味を持っている.このために,Pythonのコードスタイルを記述する公式ガイドブックに専念している.
Python 2 の都市では,文字値集合 (literal set) を定義する唯一の方法は,set (a_sequence) を呼び出すことです. Python 3 では,これはまだ有効ですが,新しい文字記号 (literal notation) を使用すると,より明確な方法です.この方法は空集合以外にも有効です.辞書も大括弧で表示されているため,{} は空集合ではなく空の辞書を表します.
2to3スクリプトはデフォルトでset() の文字値を修復しない.この機能を有効にするには,コマンドラインで2to3を呼び出すときに-f set_literal参数を指定します.
注記 | 前のこと | その後に |
---|---|---|
セット (([1,2,3]) | {1,2,3} | |
セット (((1,2,3)) | {1,2,3} | |
set (([i for iin a_sequence]) について | {i for iin a_sequence} {i for iin a_sequence} {i for iin a_sequence} {i for iin a_sequence} {i for iin a_sequence} {i for iin a_sequence} {i for iin a_sequence} {i for iin a_sequence} {i for iin a_sequence} {i for iin a_sequence} {i for iin a_sequence} |
Cで実装されたPythonオブジェクトは,他のPythonコードがメモリを直接読み書きできるようにするバッファーインターフェースを輸出することができます. これは非常に強力に聞こえますが,同様に恐ろしいです. Python 3では,バッファーはメモリビューに改名されました. 実際の変更はより複雑ですが,これらの違いをほとんど無視することができます.
2to3スクリプトでは,デフォルトではbuffer ((() 関数を修復しない.この関数を有効にするには,コマンドラインで2to3を呼び出すときに -f buffer参数を指定する.
注記 | 前のこと | その後に |
---|---|---|
x =バッファ (y) | x =メモリビュー (y) |
Pythonはインデントとアウトデント用のスペースを厳格に要求しているが,他の側面ではスペースを自由に使用できる.リスト,元素,集合,辞書では,スペースがコンマの前または後に表示されても悪影響はない.しかし,Pythonのコードスタイルガイドでは,コンマの前にスペースが置かれず,コンマの後ろにスペースが置かれると述べています.これは純粋に"美学的な考察コード"であるものの,Python 2とPython 3では正常に動作することができますが,2to3スクリプトは,マニュアルの基準に基づいて,この修正をあなたのために行うことができます.
2to3スクリプトは,デフォルトではコマの周りのスペースを修復しない.この機能を有効にするには,コマンドラインで2to3を呼び出すときに -f wscomma参数を指定する.
注記 | 前のこと | その後に |
---|---|---|
a,b について | a,b | |
{a:b} | {a: b} |
Python コミュニティ内で多くの慣習が確立されている. 例えば,Python 1 に遡る while 1:loop などがある. (Python はPython 2.3 まで,本当の意味でのブル型を持っていなかったので,開発者は以前,1 と 0 の代替を使用していた.
2to3スクリプトは,これらの慣例をデフォルトで修正しない.この機能を有効にするには,コマンドラインで2to3を呼び出すときに -f idioms参数を指定する.
注記 | 前のこと | その後に |
---|---|---|
while 1: do_stuff (do_stuff) |
while True: do_stuff ((() |
|
タイプ (x) == T | この例 (x,T) | |
タイプ (x) は T | この例 (x,T) | |
a_list = list (a_sequence) リスト (a_sequence) リスト (a_sequence) | a_list = sortered (a_sequence) a_list = a_list (a_list) = a_list (a_list) = a_list (a_list) = a_list (a_list)) | |
a_list.sort (a_list.sort) | do_stuff (リスト) | |
do_stuff (リスト) |
翻訳されたCSDNブログ
Python 2.x のコードをPython 3.x のコードに変換する方法について. Python 2.x のコードを Python 3.x のコードに変換する方法
これは,print など,ごく僅かな関数に関わると言う必要はありません.
変えてみれば,自分でコードを変えることもできます.
Python 2.x バージョンは,私がインストールした Python 2.7.2 のようなもので,Windows をダウンロードしてインストールした後,いくつかの有用なツールが付いています.
其中一个叫做2to3.pyPython 2.x のコードを Python 3.x のコードに変換します.
Pythonのインストールルートディレクトリ\Python27\Tools\Scripts\2to3.py にあります.
【如何利用2to3.pyPython 2.x のコードを,Python 3.x のコードバッグに変換する. 例えば,私はPython 2.xの Python スクリプトを持っています.
D:\tmp\tmp_dev_root\python\python2_to_python3\34563264_site.pyからのデータ
Python 3.x のコードに変換したいです.
cmd を開いて,変換するスクリプトに位置付け,実行します.
D:\tmp\WordPress\DevRoot\Python27\Tools\Scripts\2to3.py -w 34563264_data_from_site.py サイトからデータ
変換が成功すると,実行結果は:
D:\tmp\tmp_dev_root\python\python2_to_python3>D:\tmp\WordPress\DevRoot\Python27\Tools\Scripts\2to3.py -w 34563264_data_from_site.py
RefactoringTool: Skipping implicit fixer: buffer
RefactoringTool: Skipping implicit fixer: idioms
RefactoringTool: Skipping implicit fixer: set_literal
RefactoringTool: Skipping implicit fixer: ws_comma
RefactoringTool: Refactored 34563264_data_from_site.py
--- 34563264_data_from_site.py (original)
+++ 34563264_data_from_site.py (refactored)
@@ -18,7 +18,7 @@
import time;
import codecs;
import logging;
-import urllib;
+import urllib.request, urllib.parse, urllib.error;
from datetime import datetime,timedelta;
from optparse import OptionParser;
from string import Template,replace;
@@ -90,7 +90,7 @@
foundPhone = eachItemSoup.find(attrs={"class":"phone"});
logging.debug("foundPhone=%s", foundPhone);
if(foundPhone):
- foundPhoneUni = unicode(foundPhone);
+ foundPhoneUni = str(foundPhone);
logging.debug("foundPhoneUni=%s", foundPhoneUni);
# case 1:
#<p class="phone"><strong>phone:</strong> 800.206.7886<br />
@@ -122,7 +122,7 @@
foundWeb = eachItemSoup.find(attrs={"class":"web"});
logging.debug("foundWeb=%s", foundWeb);
if(foundWeb):
- foundWebUni = unicode(foundWeb);
+ foundWebUni = str(foundWeb);
logging.debug("foundWebUni=%s", foundWebUni);
# <p class="web"><strong>e-mail:</strong> <a href="#">sales@cinesysinc.com</a><br />
@@ -151,7 +151,7 @@
foundAddr = eachItemSoup.find(attrs={"class":"addr"});
logging.debug("foundAddr=%s", foundAddr);
if(foundAddr):
- foundAddrUni = unicode(foundAddr);
+ foundAddrUni = str(foundAddr);
# <p class="addr">
# <strong>address:</strong> 740 SW 21st Ave, Suite #310<br />
RefactoringTool: Files that were modified:
RefactoringTool: 34563264_data_from_site.py
この時点で,元の34563264_data_from_site.pyがPython 3.xのバージョンになっていることがわかります.
ファングベイこの2つの言語は,
発明者 量化 - 微かな夢BotVSの復習サーバーはPython 2.7版を使用しており,BotVSプラットフォームではPython2とPython3がサポートされています.