一部の人が言うと、9012年いてもよく、また、Python2は、ヘクタール心配しないでください。
2020年のPython 2もはや公式にサポートされていますが、古いプロジェクトの多くの企業がまだあるさがのpython3を変更していないが、例えば、私たちは、ニュートンプロジェクトOpenStackのバージョンを使用します、再びさえのpython3火災場合は、Pythonの2.7で使用されています我々はのpython3を置き換えることはできません。
初心者のために、他の外部の理由として、のpython3の十分に直接尋ねるか、Python2のpython3を学び、しないでください。
私は私のような多くの人がまだあると信じてPython2私はまだ、使用されているので、ので、この記事では、依然として有用である可能性があります。
どこで見つけますか
あなたは見つけることができる検索エンジンは、これらの材料に満ちている使用していますが、我々はおよそ話しているいくつかの共通点を認識しています。またはほぼ同じの内容をコピーするためにコピーされます。
魚へのデリゲートとして、人に魚を与えます。
リストの前に、私はどのように人々によって処理された何の最初の手の情報が存在しないことを見つけるために皆を教えるために持っています。
もちろん、それは公式サイトは次のとおりです。https://www.python.org/downloads/
このアドレスは、歴史のすべてのPythonのバージョン(2.0+)があります。
、左側のバージョンに対応するリリースバージョンの列をクリックします。
示すように、対応する詳細ページを入力した後、見つかったwhat's new in Python xx
あなたは、このリリースの新機能を見ることができます。
Webページは英語であり、あなたはいくつかの英語の読解力を持っている必要があります。それについて感じて行きます。
次。そして、私たちは、一緒にPython2.x 3.xのを持っていたものと最終的にどのような違いだけでなく、あなたが考慮する必要があり、開発プロセスではなく、面接のプロセスと面接は頻繁に尋ねます。
01.印刷
Pythonの2.6より前、のみをサポート
print "hello"
Pythonの2.6と2.7では、3をサポートすることができます
print "hello"
print("hello")
print ("hello")
Python3.xでは、我々は、次の2つをサポートすることができます
print("hello")
print ("hello")
02.エンコーディング
Python2.x、デフォルトでASCII
エンコーディング。
だから、デフォルトでは、我々はプログラムで中国語を使用することはできません。中国を使用するには、ファイルヘッダ、あなたは「ユニコード」エンコーディングになければならない最初のターンを印刷したいときに使用して、それ以外の場合は文字化けしますと、「UTF-8」エンコーディング、トランスコーディングおよび有料の注意をusingステートメントでなければなりません。
2次のようにPythonの適切な使用であり、
# coding:utf-8
str1="中国"
print str1.decode("utf-8")
あるいは、それはまた、このように、可能u
Unicode文字の文字列を述べ、変換が不要になりました。
# coding:utf-8
str1=u"中国"
print str1
Python3.x、デフォルトでUnicode
UTF-8エンコーディングの。
我々はプログラムの中で、中国を(推奨されません)を使用して自由に感じることができるので、文句はありません。
03.部門
Pythonは整数間の分割は、(切り捨て)算術整数のみを保持するから2.x。
>>> 8/2
4
>>> 8/3
2
>>> -8/3
-3
>>> -8/3.0
-2.6666666666666665
Pythonの3.xの分割、小数点以下の全てに(偶数分割)。
>>> 8/2
4.0
>>> 8/3
2.6666666666666665
ここでの3.xで、説明するために、//
使用状況や2.xの使い方と同じです。この操作が呼び出されるfloor
操作、すなわち、切り捨て。
>>> 8//2
4
>>> 8//3
2
>>> -8//3.0
-3.0
04.例外トラップ
Pythonの3では、あなただけ使用することができますas
キーワードとして。頻繁に使用されるのPython 2にexcept Exception, e
異常のVAR複数のカテゴリとして(EXC1、EXC2)以外の構文を同時に捕捉することができます。
Pythonの2.6は、両方の構文をサポートしています。
- 2.xの時代では、唯一のBaseExceptionオブジェクトから継承された3.xの時代に直接スローすることができるオブジェクトのすべての種類は、スローすることができますされています。
- スローされたオブジェクトタイプとパラメータを分離する2.xのraise文の使用法のコンマは、3.xが直接コンストラクタは、オブジェクトをすることができスロー呼び出すこの素晴らしい作品の文言をキャンセル。
2.xの時代には、そのプログラムのエラーに加えて、コード内の異常はなく、多くの場合、共通の制御構造が何をすべきいくつかのことを行う、それは3.xの中で見ることができ、設計者は、例外が唯一のエラーで、より忠実になる、と作ります異常なキャプチャ声明に対処するための状況。
05.はxrange
まず、我々はxrangeのは唯一Python2.xで製品を発見され、それを理解しなければなりません。
xrangeで使用2.xおよび範囲で正確に同じことを言うことができます。内部のみ、範囲がリストオブジェクトを返し、生成されたオブジェクトはxrangeを返すので、大量のデータを処理する場合、パフォーマンスがより良いはxrangeであろう。
>>>xrange(1,5)
xrange(1, 5)
>>>list(xrange(1,5))
[1, 2, 3, 4]
3.xのは、2.xのはxrangeの範囲に実際にあるので、3.xでは、範囲のみの機能では、なぜ、XRANGEありません。あなたはこれを理解することができます。
>>> range(10)
range(0, 10)
06.ユーザー入力
2.xでは、二つの機能があります。raw_input()と入力()。
- raw_input():文字列型を返す、文字列としてすべての入力を処理します。
- 入力():唯一の「デジタル」の入力を受け取ることができます。
3.xでは、この2つの機能の統合は、一つだけを残してinput()
、ディジタル入力はまた、文字列型を返す、入力文字列とすることができます。
07.データ型
Pythonの3.xのはい、右の文字列とバイナリデータストリームの非常に重要な特徴は、明確な区別をしました。
テキストは常にUnicodeには、バイナリデータ型はバイトで表現STR型で表現しました。
Pythonの3はどのような方法暗黙のstrの中で混合し、バイト、あなたは、文字列とバイトストリームを連結することができますバイトストリーム内の文字列(およびその逆)を検索することができない、また、文字列を引数として渡すことができますことはありません機能バイトストリーム(またはその逆)。
します。https://www.cnblogs.com/chownjy/p/6625299.htmlより詳細な分析は、あなたがに行くことができます
もう一つのポイントは、長い型3.Xに加えて、それは整数(INT)置換されています。3.xの整数のサイズには制限はありません、使用のタイプが原因マシンのメモリに限り、実際にすることができ限定されている、我々は整数を使用できなく無限です。
08.関数型プログラミング
Pythonでは、私たちはしばしば、マップフィルタ、削減、2.xの中に使用および3.xも異なっています。
2.xでは、これら3品は、ビルトインされた機能。これは、リストを返します。
>>> map
<built-in function map>
>>> filter
<built-in function filter>
>>> map(lambda x:x *2, [1,2,3])
[2, 4, 6]
>>> filter(lambda x:x %2 ==0,range(10))
[0, 2, 4, 6, 8]
3.xのでは、2つの財の前で、それはクラスとなっています。戻り値は、反復可能な。
>>> map
<class 'map'>
>>> map(print,[1,2,3])
<map object at 0x10d8bd400>
>>> filter
<class 'filter'>
>>> filter(lambda x:x % 2 == 0, range(10))
<filter object at 0x10d8bd3c8>
軽減機能については、それが組み込まれていなかったのPython 3.xでは、モジュールはfunctoolsにそれらを移動させました。
09.コルーチンキーワード
Python3.3、協会の処理の後、2.xのではなく、新しいおよび非同期/のawaitキーワードからの収量、。
あなたは私の他の記事を見に行くことができ、歩留まりからの構文解析。
10のクラスタイプ
Python2.xデフォルトのクラシックは、唯一の新しいショー継承されたオブジェクトのクラスです。
Python3.xなしクラシック、ちょうど新しいのように、と3が書かれています
class Cls:
pass
class Cls():
pass
class Cls(object):
pass
1.2.11変数のスコープ
- ローカル変数は2.xではグローバル変数として宣言することはできません
- あなたはグローバル変数として宣言されたローカル変数に非ローカル構文3.xのを使用することができます。
def foo():
var=100
def bar():
nonlocal var
var=200
bar()
print(var)
foo()
# 2.x输出:100
# 3.x输出:200
12メタクラスの使用
2.xで
class Metaclass(type):
pass
class Person(list):
__metaclass__ = Metaclass
pass
3.xでは、
class MetaPerson(type):
pass
class Person(metaclass=MetaPerson):
pass
13.モジュールの変更
- 我々はいくつかのモジュールを削除しました。一般的に使用されていないので、ここに記載されていません。
- いくつかのモジュールを追加しました。たとえば、次のようにconcurrent.futures、asyncioなど
- いくつかのモジュールを修正しました。たとえば、次のキューにキュー。
それは情報がビューに公式サイトに行くだろうと、多くの微妙な違いがあるかもしれません、内容についてです。しかし、これらの私たちの普通の開発者にとって、それほど重要ではありません。私たちは、集中することができません。
実際には、ときに私は別のバージョンと基本的にシームレスな移行バージョン、精通しています。この記事は、より多くの科学のため。