ホームページ > バックエンド開発 > Python チュートリアル > Python の「functools.partial」とは何ですか?

Python の「functools.partial」とは何ですか?

Mary-Kate Olsen
リリース: 2024-12-02 02:37:11
オリジナル
504 人が閲覧しました

What is `functools.partial` in Python?

Global News One で記事全文を読む

functools.partial とは何ですか?

functools.partial は、既存の関数に引数を部分的に適用して新しい関数を作成します。これは、特定の引数が繰り返しまたは固定されているシナリオでの関数呼び出しを簡素化するのに役立ちます。

Python の functools.partial 関数を使用すると、関数の引数またはキーワードの一部を「フリーズ」し、より少ないパラメータで新しい関数を作成できます。これは、関数の特定のパラメーターを固定しながら、他のパラメーターを柔軟に保ちたい場合に特に便利です。

from functools import partial
ログイン後にコピー
ログイン後にコピー

基本構文

partial(func, *args, **kwargs)
ログイン後にコピー
ログイン後にコピー
  • func: 部分的に適用する関数。
  • *args: 修正する位置引数。
  • `kwargs`**: 修正するキーワード引数。

返されるオブジェクトは、固定引数が「固定」された新しい関数であり、新しい関数を呼び出すときに残りの引数を指定するだけで済みます。


1.引数を部分的に修正する

def power(base, exponent):
    return base ** exponent

# Create a square function by fixing exponent = 2
square = partial(power, exponent=2)

# Now, square() only needs the base
print(square(5))  # Output: 25
print(square(10))  # Output: 100
ログイン後にコピー
ログイン後にコピー

ここで、partial は常に exponent=2 を使用する新しい関数 square を作成します。


2.関数呼び出しの簡略化

複数の引数を持つ関数があり、それをいくつかの固定値で呼び出すことが多いとします。

def greet(greeting, name):
    return f"{greeting}, {name}!"

# Fix the greeting
say_hello = partial(greet, greeting="Hello")
say_goodbye = partial(greet, greeting="Goodbye")

print(say_hello("Alice"))   # Output: Hello, Alice!
print(say_goodbye("Alice")) # Output: Goodbye, Alice!
ログイン後にコピー
ログイン後にコピー

3.マッピングで使用するための部分

partial を使用して、関数をマップなどの操作に適応させることができます。

def multiply(x, y):
    return x * y

# Fix y = 10
multiply_by_10 = partial(multiply, y=10)

# Use in a map
numbers = [1, 2, 3, 4]
result = map(multiply_by_10, numbers)
print(list(result))  # Output: [10, 20, 30, 40]
ログイン後にコピー

4.デフォルトの引数を持つ関数を含む部分

Partial は、デフォルト引数がすでにある関数とシームレスに連携します。

def add(a, b=10):
    return a + b

# Fix b to 20
add_with_20 = partial(add, b=20)
print(add_with_20(5))  # Output: 25
ログイン後にコピー

5.他のライブラリ (Pandas や JSON など) との組み合わせ

Pandas などのライブラリで Partial を使用すると、繰り返しの操作を簡素化できます。

from functools import partial
ログイン後にコピー
ログイン後にコピー

functools.partial を使用する場合

  1. 再利用可能なロジック:
    • 固定引数を持つ関数の再利用可能なバージョンを作成したい場合。
  2. コールバックの簡素化:
    • コールバックに単純な署名が必要な場合が多い、tkinter、asyncio、スレッドなどのライブラリに役立ちます。
  3. 関数型プログラミング:
    • マップ、フィルター、または同様の操作とうまく連携します。
  4. 可読性の向上:
    • 冗長な引数を減らしてコードをすっきりさせます。

注意事項とベストプラクティス

  • 部分的な関数の検査: 部分関数の凍結された引数は、partial.func、partial.args、およびpartial.keywordsを使用して検査できます。
partial(func, *args, **kwargs)
ログイン後にコピー
ログイン後にコピー
  • 柔軟性: 部分関数を呼び出すときに、凍結された引数をオーバーライドできます。
def power(base, exponent):
    return base ** exponent

# Create a square function by fixing exponent = 2
square = partial(power, exponent=2)

# Now, square() only needs the base
print(square(5))  # Output: 25
print(square(10))  # Output: 100
ログイン後にコピー
ログイン後にコピー

高度な例: 高階関数に Partial を使用する

def greet(greeting, name):
    return f"{greeting}, {name}!"

# Fix the greeting
say_hello = partial(greet, greeting="Hello")
say_goodbye = partial(greet, greeting="Goodbye")

print(say_hello("Alice"))   # Output: Hello, Alice!
print(say_goodbye("Alice")) # Output: Goodbye, Alice!
ログイン後にコピー
ログイン後にコピー

functools.partial を使用すると、特に繰り返しの関数呼び出しや高階関数を扱う場合に、コードを簡素化してクリーンアップできます。さらに多くの例や高度な使用例が必要な場合はお知らせください!

以上がPython の「functools.partial」とは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート