ホームページ >バックエンド開発 >Python チュートリアル >Python での深層学習のための特別なメソッドとマルチパラダイム

Python での深層学習のための特別なメソッドとマルチパラダイム

WBOY
WBOYオリジナル
2016-06-16 08:42:151152ブラウズ

Python のすべてはオブジェクトですが、同時に Python はマルチパラダイム言語 (マルチパラダイム) でもあり、オブジェクト指向でプログラムを作成できるだけでなく、同じ方法でプログラムを作成することもできます。プロセス指向の関数 (関数型、宣言型などもありますが、まだ詳しくは説明しません)。 Python のマルチパラダイムは、Python オブジェクトの特別なメソッドに依存しています。

特別なメソッド名の前後には 2 つのアンダースコアが続きます。次の例でわかるように、マジック メソッドとも呼ばれる特別なメソッドは、Python の構文と式の多くを定義します。特別なメソッドがオブジェクトに定義されている場合、Python はそれらのメソッドにも「特別な扱い」を与えます。たとえば、 __init__() メソッドを定義するクラスは、オブジェクトの作成時に __init__() メソッドの操作を自動的に実行します。

(dir() を使用すると、オブジェクトが所有する特別なメソッド (dir(1) など) を表示できます)

オペレーター

Python の演算子は、オブジェクトの特別なメソッドを呼び出すことによって実装されます。例:

コードをコピー コードは次のとおりです:

「ABC」 + 'XYZ'
以下の操作が実際に実行されました:

コードをコピー コードは次のとおりです:
'abc'.__add__('xyz')

したがって、Python では、2 つのオブジェクトを加算できるかどうかは、対応するオブジェクトに __add__() メソッドがあるかどうかによって決まります。対応するオブジェクトに __add__() メソッドがあれば、そのオブジェクトが数学的に加算的でない場合でも、加算の形式を使用して obj.__add__() で定義された演算を表現できます。 Python では、演算子は記述を簡素化するように機能しますが、演算子を実装するには特別なメソッドに依存します。
Python はユーザーにオブジェクト指向プログラミング手法の使用を強制しません。ユーザーは好みの使用方法を選択できます (+ 記号を使用するか、よりオブジェクト指向の __add__() メソッドを使用するかを選択するなど)。特別なメソッドを記述するのは常に困難です。

次の操作を試して効果を確認し、それに対応する演算子を考えてください


コードをコピー コードは次のとおりです:
(1.8).__mul__(2.0)
真。__または__(偽)



組み込み関数

演算子と同様に、多くの組み込み関数もオブジェクトを呼び出すための特別なメソッドです。たとえば


コードをコピー コードは次のとおりです:
len([1,2,3]) #テーブル内の要素の総数を返します

実際に行うことは

コードをコピー コードは次のとおりです:
[1,2,3].__len__()

__len__() と比較して、組み込み関数 len() も記述を簡素化する役割を果たします。
次の操作を試して、それに対応する組み込み関数を考えてください


コードをコピー コードは次のとおりです:
(-1).__abs__()
(2.3).__int__()



テーブル要素の参照

以下はテーブル要素を参照する一般的な方法です


コードをコピー コードは次のとおりです:
li = [1, 2, 3, 4, 5, 6]
print(li[3])

上記のプログラムが li[3] まで実行されると、Python は [] 記号を見つけて理解して、__getitem__() メソッドを呼び出します。

コードをコピー コードは次のとおりです:
li = [1, 2, 3, 4, 5, 6]
print(li.__getitem__(3))

以下の操作を見て対応を考えてみてください

コードをコピー コードは次のとおりです:
li.__setitem__(3, 0)
{'a':1, 'b':2}.__delitem__('a')


関数

Python では関数もオブジェクトの一種であるとすでに述べました。実際、 __call__() 特殊メソッドを持つオブジェクトはすべて関数として扱われます。たとえば、次の例:

コードをコピー コードは次のとおりです:
クラス SampleMore(オブジェクト):
Def __call__(self, a):
+ 5 を返します
add = SampleMore() # 関数オブジェクト

print(add(2)) map(add, [2, 4, 5]) # 関数オブジェクトを渡す


add は、SampleMore クラスのオブジェクトです。呼び出されると、add は 5 を加算する操作を実行します。 add は関数オブジェクトとして map() 関数に渡すこともできます。


もちろん、もっと「美しい」方法を使うこともできます、考えてみてください。

概要

組み込みオブジェクト (整数、テーブル、文字列など) については、それらに必要な特別なメソッドが Python で用意されています。ユーザー定義オブジェクトは、特別なメソッドを追加することでカスタム構文を実装することもできます。特別なメソッドは Python の最下層に比較的近く、多くの Python 関数の実装は特別なメソッドに依存しています。後でさらに例を見ていきます。

Python の構文の多くは、オブジェクト指向モデルのカプセル化に基づいています。オブジェクト モデルは Python のスケルトンであり、強力な火力を備えたフル機能のマルハナバチです。ただし、Python はより簡潔な構文も提供しており、さまざまなプログラミング形式を使用できるため、必要に応じてオブジェクト指向インターフェイスの一部を隠すことができます。これまで見てきたように、カマロ スポーツカーは、その堂々たる武器を隠し、人間が使いやすいドアとシートを備えています。

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