この記事では、Python の functools モジュールの共通関数の分析を主に紹介し、functools.cmp_to_key、functools.total_ordering、functools.reduce、functools.partial、functools.update_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])
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(cls)
これは、クラスの比較演算を自動的に実装するためのクラスデコレータです。 eq() メソッドと、次のメソッド lt()、le()、gt()、ge() のいずれかをクラスに実装するだけで済みます。その後、 total_ordering() が残りのメソッドの実装を自動的に支援します。比較演算。 例:
>>> from functools import partial >>> basetwo = partial(int, base=2) >>> basetwo.doc = 'Convert base 2 string to an int.' >>> basetwo('10010') 18
functools.reduce()
構文:
functools.reduce(function, iterable[,Initializer])
この関数はPythonの関数と同じです組み込みのreduce()関数は同じで、主にPython 3と互換性のあるコードを書くために使用されます。
functools.partial()
構文:
functools.partial(func[, *args][, **keywords])
>>> from functools import wraps >>> def my_decorator(f): ... @wraps(f) ... def wrapper(*args, **kwds): ... print 'Calling decorated function' ... return f(*args, **kwds) ... return wrapper >>> @my_decorator ... def example(): ... """Docstring""" ... print 'Called example function' >>> example() Calling decorated function Called example function >>> example.name 'example' >>> example.doc 'Docstring'
3. Python meets データ収集のビデオチュートリアル
以上が分析関数ツールモジュール関数の例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。