ホームページ バックエンド開発 Python チュートリアル Python での functools モジュール関数分析について

Python での functools モジュール関数分析について

Mar 13, 2017 am 09:15 AM

この記事では主に

Pythonのfunctoolsモジュール関数の解析を紹介し、それぞれfunctools.cmp_to_key、functools.total_ordering、functools.reduce、functools.partial、functools.upについて説明します。 date_wrapper と functools.wraps の使用方法については、必要な友人が参照できます Python に付属の functools モジュールには、一般的に使用される高次関数がいくつか用意されています。これらは、

他の

関数を処理するために使用される特別な関数です。つまり、このモジュールを使用して呼び出し可能な オブジェクト を処理できます。

functoolsモジュール関数

概要

    functools.cmp_to_key(func)
  • functools.total_ordering(cls)
  • functools.reduce( function 、反復可能[、初期化子])
  • functools.partial(func[, args][, *keywords])
  • functools.update_wrapper(wrapper, Wrapper[, assigned][, updated])
  • functools.wraps(wrapped[, assigned][ 、更新されました])

functools.cmp_to_key()


構文:

functools.cmp_to_key(func)

functools.cmp_to_key(func) 

该函数用于将旧式的比较函数转换为关键字函数。

旧式的比较函数:接收两个参数,返回比较的结果。返回值小于零则前者小于后者,返回值大于零则相反,返回值等于零则两者相等。

关键字函数:接收一个参数,返回其对应的可比较对象。例如 sorted(), min(), max(), heapq.nlargest(), heapq.nsmallest(), itertools.groupby() 都可作为关键字函数。

在 Python 3 中,有很多地方都不再支持旧式的比较函数,此时可以使用 cmp_to_key() 进行转换。

示例:


sorted(iterable, key=cmp_to_key(cmp_func))
ログイン後にコピー

functools.total_ordering()

语法:

functools.total_ordering(cls)

这是一个类装饰器,用于自动实现类的比较运算。

我们只需要在类中实现 eq() 方法和以下方法中的任意一个 lt(), le(), gt(), ge(),那么 total_ordering() 就能自动帮我们实现余下的几种比较运算。

示例:


@total_ordering
class Student: 
  def eq(self, other):
    return ((self.lastname.lower(), self.firstname.lower()) ==
        (other.lastname.lower(), other.firstname.lower()))
  def lt(self, other):
    return ((self.lastname.lower(), self.firstname.lower()) <
        (other.lastname.lower(), other.firstname.lower()))
ログイン後にコピー

functools.reduce()

语法:

functools.reduce(function, iterable[, initializer])

该函数与 Python 内置的 reduce() 函数相同,主要用于编写兼容 Python 3 的代码。

functools.partial()

语法:

functools.partial(func[, *args][, **keywords]) この関数は、古い比較関数を次のように変換するために使用されます。キーワード機能。

古いスタイルの比較関数: 2 つのパラメータを受け取り、比較結果を返します。戻り値がゼロより小さい場合、前者は後者より小さく、戻り値がゼロより大きい場合はその逆が真で、戻り値がゼロに等しい場合、両者は等しい。

キーワード関数: パラメータを受け取り、対応する同等のオブジェクトを返します。例: sort

ed()、min()、max()、heapq.nlargest()、heapq nsmall

est()、itertools.groupby() はすべてキーワード関数として使用できます。


Python 3 では、多くの場所で古い比較関数がサポートされなくなりました。現時点では、変換に cmp_to_key() を使用できます。

例:

def partial(func, *args, **keywords): 
  def newfunc(*fargs, **fkeywords):
    newkeywords = keywords.copy()
    newkeywords.update(fkeywords)
    return func(*(args + fargs), **newkeywords)
  newfunc.func = func
  newfunc.args = args
  newfunc.keywords = keywords
  return newfunc
ログイン後にコピー

functools.total_ordering()


構文:

functools.total_ordering(cls)


これは自動実装用のクラスデコレータです。メントクラスの比較オペレーション。

eq() メソッドと、次のメソッド lt()、le()、gt()、ge() のいずれかをクラスに実装するだけで済みます。その後、 total_ordering() が残りのメソッドの実装を自動的に支援します。比較演算。 例:

>>> from functools import partial
>>> basetwo = partial(int, base=2)
>>> basetwo.doc = &#39;Convert base 2 string to an int.&#39;
>>> basetwo(&#39;10010&#39;)
18
ログイン後にコピー
functools.reduce()

🎜🎜🎜構文:🎜🎜functools.reduce(function, iterable[,Initializer]) 🎜🎜🎜この関数はPython と同じ 組み込みのreduce()関数は同じで、主にPython 3と互換性のあるコードを書くために使用されます。 🎜🎜🎜functools.partial()🎜🎜🎜🎜構文: 🎜🎜functools.partial(func[, *args][, **keywords]) 🎜🎜🎜この関数は部分オブジェクトを返します。このオブジェクトを呼び出すことの効果は、関数 func を呼び出して、位置パラメータ args およびキーワード パラメータキーワードを渡すことと同じです。オブジェクトが位置引数を使用して呼び出された場合、これらの引数は args に追加されます。キーワード引数が渡された場合、それらはキーワードに追加されます。 🎜🎜partial() 関数の同等の実装は、おおよそ次のとおりです: 🎜🎜🎜🎜
>>> from functools import wraps
>>> def my_decorator(f):
...   @wraps(f)
...   def wrapper(*args, **kwds):
...     print &#39;Calling decorated function&#39;
...     return f(*args, **kwds)
...   return wrapper

>>> @my_decorator
... def example():
...   """Docstring"""
...   print &#39;Called example function&#39;

>>> example()
Calling decorated function 
Called example function 
>>> example.name
&#39;example&#39; 
>>> example.doc
&#39;Docstring&#39;
ログイン後にコピー
ログイン後にコピー
🎜partial() 関数は主に、関数の一部のパラメーターを「フリーズ」し、パラメーターが少なく、より簡単に使用できる関数オブジェクトを返すために使用されます。 🎜🎜例:🎜🎜🎜🎜rrreee🎜🎜functools.update_wrapper()🎜🎜🎜🎜構文:🎜🎜functools.update_wrapper(wrapper, Wrapped[, assigned][, updated]) 🎜🎜🎜この関数は使用されます🎜アップデート🎜関数をラップして、元の関数のように見せます。オプションのパラメーターはタプルで、割り当てられたタプルは元の関数の値に直接置き換えられる🎜属性🎜を指定し、更新されたタプルは元の関数に対して更新される属性を指定します。これら 2 つのパラメータのデフォルト値は、それぞれ WRAPPER_ASSIGNMENTS と WRAPPER_UPDATES というモジュール レベルの定数です。前者はラッパー関数の名前、🎜module🎜、doc 属性の直接割り当てを指定し、後者はラッパー関数の dict 属性の更新を指定します。 🎜

该函数主要用于装饰器函数的定义中,置于包装函数之前。如果没有对包装函数进行更新,那么被装饰后的函数所具有的元信息就会变为包装函数的元信息,而不是原函数的元信息。

functools.wraps()

语法:

functools.wraps(wrapped[, assigned][, updated])

wraps() 简化了 update_wrapper() 函数的调用。它等价于 partial(update_wrapper, wrapped=wrapped, assigned, updated=updated)。

示例:


>>> from functools import wraps
>>> def my_decorator(f):
...   @wraps(f)
...   def wrapper(*args, **kwds):
...     print &#39;Calling decorated function&#39;
...     return f(*args, **kwds)
...   return wrapper

>>> @my_decorator
... def example():
...   """Docstring"""
...   print &#39;Called example function&#39;

>>> example()
Calling decorated function 
Called example function 
>>> example.name
&#39;example&#39; 
>>> example.doc
&#39;Docstring&#39;
ログイン後にコピー
ログイン後にコピー

如果不使用这个函数,示例中的函数名就会变成 wrapper ,并且原函数 example() 的说明文档(docstring)就会丢失。

以上がPython での functools モジュール関数分析についての詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

LinuxターミナルでPythonバージョンを表示するときに発生する権限の問題を解決する方法は? LinuxターミナルでPythonバージョンを表示するときに発生する権限の問題を解決する方法は? Apr 01, 2025 pm 05:09 PM

LinuxターミナルでPythonバージョンを表示する際の許可の問題の解決策PythonターミナルでPythonバージョンを表示しようとするとき、Pythonを入力してください...

あるデータフレームの列全体を、Python内の異なる構造を持つ別のデータフレームに効率的にコピーする方法は? あるデータフレームの列全体を、Python内の異なる構造を持つ別のデータフレームに効率的にコピーする方法は? Apr 01, 2025 pm 11:15 PM

PythonのPandasライブラリを使用する場合、異なる構造を持つ2つのデータフレーム間で列全体をコピーする方法は一般的な問題です。 2つのデータがあるとします...

プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は? プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は? Apr 02, 2025 am 07:18 AM

10時間以内にコンピューター初心者プログラミングの基本を教える方法は?コンピューター初心者にプログラミングの知識を教えるのに10時間しかない場合、何を教えることを選びますか...

uvicornは、serving_forever()なしでhttpリクエストをどのように継続的に聞いていますか? uvicornは、serving_forever()なしでhttpリクエストをどのように継続的に聞いていますか? Apr 01, 2025 pm 10:51 PM

UvicornはどのようにしてHTTPリクエストを継続的に聞きますか? Uvicornは、ASGIに基づく軽量のWebサーバーです。そのコア機能の1つは、HTTPリクエストを聞いて続行することです...

文字列を介してオブジェクトを動的に作成し、Pythonでメソッドを呼び出す方法は? 文字列を介してオブジェクトを動的に作成し、Pythonでメソッドを呼び出す方法は? Apr 01, 2025 pm 11:18 PM

Pythonでは、文字列を介してオブジェクトを動的に作成し、そのメソッドを呼び出す方法は?これは一般的なプログラミング要件です。特に構成または実行する必要がある場合は...

人気のあるPythonライブラリとその用途は何ですか? 人気のあるPythonライブラリとその用途は何ですか? Mar 21, 2025 pm 06:46 PM

この記事では、numpy、pandas、matplotlib、scikit-learn、tensorflow、django、flask、and requestsなどの人気のあるPythonライブラリについて説明し、科学的コンピューティング、データ分析、視覚化、機械学習、Web開発、Hの使用について説明します。

中間の読書にどこでもfiddlerを使用するときにブラウザによって検出されないようにするにはどうすればよいですか? 中間の読書にどこでもfiddlerを使用するときにブラウザによって検出されないようにするにはどうすればよいですか? Apr 02, 2025 am 07:15 AM

fiddlereveryversings for the-middleの測定値を使用するときに検出されないようにする方法

See all articles