operator

operator ライブラリーの概要 operator ライブラリーは、Pythonにおける基本的な演算子(加算、減算、乗算など)や、比較演算子、属性操作を関数として提供する標準ライブラリーです。これにより、演算子を関数として扱い、リストのソートやデータの操作をより簡潔に書くことができます。

operator の主要メソッドとその使い方

  1. operator.add 二つの値を加算します。

import operator

# 使用例
result = operator.add(10, 5)
print(result)  # 出力: 15√
  1. operator.mul 二つの値を乗算します。

import operator

# 使用例
result = operator.mul(10, 5)
print(result)  # 出力: 50

  1. operator.itemgetter 指定したインデックスの要素を取得する関数を生成します。リストやタプルのソートに便利です。

import operator

# 使用例
data = [('apple', 3), ('banana', 2), ('orange', 5)]
sorted_data = sorted(data, key=operator.itemgetter(1))
print(sorted_data)  # 出力: [('banana', 2), ('apple', 3), ('orange', 5)]
  1. operator.attrgetter 指定した属性の値を取得する関数を生成します。オブジェクトのソートに便利です。

import operator

# 使用例
class Fruit:
    def __init__(self, name, count):
        self.name = name
        self.count = count

fruits = [Fruit('apple', 3), Fruit('banana', 2), Fruit('orange', 5)]
sorted_fruits = sorted(fruits, key=operator.attrgetter('count'))
print([fruit.name for fruit in sorted_fruits])  # 出力: ['banana', 'apple', 'orange']
  1. operator.methodcaller 指定したメソッドを呼び出す関数を生成します。引数も渡すことができます。

import operator

# 使用例
class Greeting:
    def greet(self, name):
        return f'Hello, {name}!'

greet_caller = operator.methodcaller('greet', 'John')
g = Greeting()
result = greet_caller(g)
print(result)  # 出力: 'Hello, John!'

活用場面、活用方法

itemgetter や attrgetter は、リストやオブジェクトのソートに非常に便利です。特に複数の要素や属性に基づいてソートする場合に役立ちます。 演算子を関数として扱うことで、ラムダ関数やカスタム関数を使わずに簡潔なコードを書けます。 methodcaller を使うと、特定のメソッドを動的に呼び出す処理を簡単に実装できます。

このライブラリーを使えば、こんなことができる!

リストやオブジェクトを特定のキーに基づいて簡単にソート 基本的な演算を関数として扱い、より柔軟なコードの記述 オブジェクトの属性やメソッドを動的に操作

ライブラリーを使わずに書いたコード

例えば、リストを特定のキーでソートする場合:

data = [('apple', 3), ('banana', 2), ('orange', 5)]
sorted_data = sorted(data, key=lambda x: x[1])
print(sorted_data)  # 出力: [('banana', 2), ('apple', 3), ('orange', 5)]

ライブラリーを使って実装したコード

operator.itemgetter を使用すると、よりシンプルに書けます:

import operator

data = [('apple', 3), ('banana', 2), ('orange', 5)]
sorted_data = sorted(data, key=operator.itemgetter(1))
print(sorted_data)  # 出力: [('banana', 2), ('apple', 3), ('orange', 5)]

いいなと思ったら応援しよう!