【python】書いてて気づいた2系と3系の違い
pythonの2系と3系間で記述の仕方や処理の挙動が異なる場所について、 自分が気になった場所を列挙しました。
随時更新していきます。(最終更新2017/3/15)
reduceが組み込みの関数ではなくなった
2系では組み込みの関数であったreduce
はfunctools
をimportして使用する形に変更されていました。
from functools import reduce print(reduce(lambda x, y : x + y, xrange(10))) #45
reduce
関数はそこそこ使っていただけに、少し面倒です。
目的は名前空間汚染の防止?
実引数アンパック時の制約が緩和
以前の記事で関数に渡す引数のアンパック機能について説明しましたが、2系ではアンパックした引数のあとに名前無し引数をとれませんでした。
import math def polar_coordinates(x, y, z): r = math.sqrt(x ** 2 + y ** 2) s = math.sqrt(r ** 2 + z ** 2) theta = math.atan(y / x) phi = math.atan(z / r) return r, s, theta, phi x = 4. y = 3. coordinates = (x, y) # coordinatesをアンパックして引数に取る print(polar_coordinates(*coordinates,1)) #(5.0, 5.0990195135927845, 0.6435011087932844, 0.19739555984988078)
3系ではそのような制約がなくなり、よりアンパックが使いやすくなりました。