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

この記事では主に

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 までご連絡ください。
Python:ゲーム、GUIなどPython:ゲーム、GUIなどApr 13, 2025 am 12:14 AM

PythonはゲームとGUI開発に優れています。 1)ゲーム開発は、2Dゲームの作成に適した図面、オーディオ、その他の機能を提供し、Pygameを使用します。 2)GUI開発は、TKINTERまたはPYQTを選択できます。 TKINTERはシンプルで使いやすく、PYQTは豊富な機能を備えており、専門能力開発に適しています。

Python vs. C:比較されたアプリケーションとユースケースPython vs. C:比較されたアプリケーションとユースケースApr 12, 2025 am 12:01 AM

Pythonは、データサイエンス、Web開発、自動化タスクに適していますが、Cはシステムプログラミング、ゲーム開発、組み込みシステムに適しています。 Pythonは、そのシンプルさと強力なエコシステムで知られていますが、Cは高性能および基礎となる制御機能で知られています。

2時間のPython計画:現実的なアプローチ2時間のPython計画:現実的なアプローチApr 11, 2025 am 12:04 AM

2時間以内にPythonの基本的なプログラミングの概念とスキルを学ぶことができます。 1.変数とデータ型、2。マスターコントロールフロー(条件付きステートメントとループ)、3。機能の定義と使用を理解する4。

Python:主要なアプリケーションの調査Python:主要なアプリケーションの調査Apr 10, 2025 am 09:41 AM

Pythonは、Web開発、データサイエンス、機械学習、自動化、スクリプトの分野で広く使用されています。 1)Web開発では、DjangoおよびFlask Frameworksが開発プロセスを簡素化します。 2)データサイエンスと機械学習の分野では、Numpy、Pandas、Scikit-Learn、Tensorflowライブラリが強力なサポートを提供します。 3)自動化とスクリプトの観点から、Pythonは自動テストやシステム管理などのタスクに適しています。

2時間でどのくらいのPythonを学ぶことができますか?2時間でどのくらいのPythonを学ぶことができますか?Apr 09, 2025 pm 04:33 PM

2時間以内にPythonの基本を学ぶことができます。 1。変数とデータ型を学習します。2。ステートメントやループの場合などのマスター制御構造、3。関数の定義と使用を理解します。これらは、簡単なPythonプログラムの作成を開始するのに役立ちます。

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

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

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

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

Python 3.6にピクルスファイルをロードするときに「__Builtin__」モジュールが見つからない場合はどうすればよいですか?Python 3.6にピクルスファイルをロードするときに「__Builtin__」モジュールが見つからない場合はどうすればよいですか?Apr 02, 2025 am 07:12 AM

Python 3.6のピクルスファイルのロードレポートエラー:modulenotFounderror:nomodulenamed ...

See all articles

ホット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ヘンタイを無料で生成します。

ホットツール

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

メモ帳++7.3.1

メモ帳++7.3.1

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

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

SublimeText3 中国語版

SublimeText3 中国語版

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