Python3の新機能

__future__モジュール

Python 3.xでは、Python2に組み込まれている__future__モジュールを介してインポートできるPython2と互換性のないキーワードと機能がいくつか導入されました。コードのPython3.xサポートを計画している場合は、__ future__インポートを使用することをお勧めします。

たとえば、Python2でPython3.xの整数除算の動作が必要な場合は、次のimportステートメントを追加します。

from __future__ import division

印刷機能

Python 3で最も注目され、最も広く知られている変更は、 print関数が使用されます。印刷機能での括弧()の使用は必須になりました。Python2ではオプションでした。

print "Hello World" #is acceptable in Python 2
print ("Hello World") # in Python 3, print must be followed by ()

print()関数は、デフォルトで最後に改行を挿入します。Python 2では、末尾に「、」を付けることで抑制できます。Python 3では、「end = ''」は改行の代わりにスペースを追加します。

print x,           # Trailing comma suppresses newline in Python 2
print(x, end=" ")  # Appends a space instead of a newline in Python 3

キーボードからの入力の読み取り

Python 2には、2つのバージョンの入力関数があります。 input() そして raw_input()。input()関数は、受信したデータが引用符 ''または ""に含まれている場合は文字列として扱い、含まれていない場合はデータを数値として扱います。

Python 3では、raw_input()関数は非推奨になりました。また、受信したデータは常に文字列として扱われます。

In Python 2

>>> x = input('something:') 
something:10 #entered data is treated as number
>>> x
10

>>> x = input('something:')
something:'10' #entered data is treated as string
>>> x
'10'

>>> x = raw_input("something:")
something:10 #entered data is treated as string even without ''
>>> x
'10'

>>> x = raw_input("something:")
something:'10' #entered data treated as string including ''
>>> x
"'10'"

In Python 3

>>> x = input("something:")
something:10
>>> x
'10'

>>> x = input("something:")
something:'10' #entered data treated as string with or without ''
>>> x
"'10'"

>>> x = raw_input("something:") # will result NameError
Traceback (most recent call last):
   File "<pyshell#3>", line 1, in 
  <module>
   x = raw_input("something:")
NameError: name 'raw_input' is not defined

整数除算

Python 2では、2つの整数の除算の結果は、最も近い整数に丸められます。その結果、3/2は1を表示します。浮動小数点除算を取得するには、分子または分母を明示的に浮動小数点として使用する必要があります。したがって、3.0 / 2または3 / 2.0または3.0 / 2.0のいずれかは1.5になります

Python 3は、デフォルトで3/2を1.5と評価します。これは、新しいプログラマーにとってより直感的です。

Unicode表現

Python 2では、文字列をUnicodeとして保存する場合は、文字列をauでマークする必要があります。

Python 3は、デフォルトで文字列をUnicodeとして保存します。Unicode(utf-8)文字列と、バイト配列とバイト配列の2バイトクラスがあります。

xrange()関数が削除されました

Python 2では、range()はリストを返し、xrange()は必要な場合にのみ範囲内のアイテムを生成するオブジェクトを返し、メモリを節約します。

Python 3では、range()関数が削除され、xrange()の名前がrange()に変更されました。さらに、range()オブジェクトは、Python3.2以降でのスライスをサポートしています。

例外を発生させる

Python 2は、「古い」構文と「新しい」構文の両方の表記を受け入れます。例外引数を括弧で囲まないと、Python3でSyntaxErrorが発生します。

raise IOError, "file error" #This is accepted in Python 2
raise IOError("file error") #This is also accepted in Python 2
raise IOError, "file error" #syntax error is raised in Python 3
raise IOError("file error") #this is the recommended syntax in Python 3

例外の引数

Python 3では、例外の引数は「as」キーワードで宣言する必要があります。

except Myerror, err: # In Python2
except Myerror as err: #In Python 3

next()関数と.next()メソッド

Python 2では、ジェネレータオブジェクトのメソッドとしてnext()が許可されています。Python 2では、ジェネレータオブジェクトを反復処理するnext()関数も受け入れられます。ただし、Python 3では、ジェネレーターメソッドとしてのnext(0は廃止され、発生しますAttributeError

gen = (letter for letter in 'Hello World') # creates generator object
next(my_generator) #allowed in Python 2 and Python 3
my_generator.next() #allowed in Python 2. raises AttributeError in Python 3

2to3ユーティリティ

Python 3インタープリターとともに、2to3.pyスクリプトは通常tools / scriptsフォルダーにインストールされます。Python 2.xソースコードを読み取り、一連の修正プログラムを適用して、有効なPython3.xコードに変換します。

Here is a sample Python 2 code (area.py):

def area(x,y = 3.14): 
   a = y*x*x
   print a
   return a

a = area(10)
print "area",a

To convert into Python 3 version:

$2to3 -w area.py

Converted code :

def area(x,y = 3.14): # formal parameters
   a = y*x*x
   print (a)
   return a

a = area(10)
print("area",a)