Works by

Ren's blog

@rennnosuke_rk 技術ブログです

【python】書いてて気づいた2系と3系の違い

pythonの2系と3系間で記述の仕方や処理の挙動が異なる場所について、 自分が気になった場所を列挙しました。

随時更新していきます。(最終更新2017/3/15)

reduceが組み込みの関数ではなくなった

2系では組み込みの関数であったreducefunctoolsを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系ではそのような制約がなくなり、よりアンパックが使いやすくなりました。