パラメータを渡すPythonメソッド

pythonのパラメーター受け渡しがどのように実行されるかを分析する前に、python変数と割り当ての基本原則を理解する必要があります。これは、パラメーター受け渡しをよりよく理解するのに役立ちます。

Python変数と割り当て

数行のコードから始めます

In [1]: a =1
In [2]: b = a
In [3]: a = a +1

最初に1をaに割り当てます。つまり、ポイントはオブジェクト1を指し、すべてがpythonのオブジェクトです。次に、b = aです。これは、bもオブジェクト1を指すことを意味します。pythonでは、オブジェクトは複数の参照によって指すことができます。最後に実行されたa = a + 1では、ここで1つのポイントに注意する必要があります.int、str、その他の不変タイプなどのpythonのデータタイプでは、a = a + 1を実行しても、aが指すオブジェクトの値は1増加しません。代わりに、新しいオブジェクト2を作成し、オブジェクト2を指すようにします。元のオブジェクトはまだメモリに存在します。それからここの言葉はまだ指摘されています、それぞれaとbの値を見てみましょう:

In [4]: a
Out[4]:2

In [5]: b
Out[5]:1

この例を通して、ここでaとbは、最初に同じオブジェクトを指す2つの変数であることがわかります。または、同じオブジェクトの2つの名前として想像することもできます。 b = aの単純な割り当ては、新しいオブジェクトが再作成されることを意味するのではなく、同じオブジェクトが複数の変数によってポイントまたは参照されることを意味します。同時に、同じオブジェクトを指すことは、2つの変数が一緒にバインドされることを意味しません。変数の1つを再割り当てしても、他の変数の値には影響しません。

リストの例もあります。もう一度見てみましょう。

In [6]: l1 =[3,4,5,6]
In [7]: l2 = l1
In [10]: l1.append(7)
In [11]: l1
Out[11]:[3,4,5,6,7]
In [12]: l2
Out[12]:[3,4,5,6,7]

コードでは、2つの変数l1とl2がオブジェクト[3,4,5,6]を指すようにします。リストは変数データ構造であることがわかっているため、追加操作では新しいオブジェクトは生成されません。最後に要素を追加するだけで[3、4、5、6、7]になります。l1とl2は同時にこのリストを指すため、リストの変更は変数l1とl2の両方に同時に反映されます。 、l1とl2の値は同時に[3、4、5、6、7]になります。

pythonの変数は削除できますが、オブジェクトは削除できません

In [22]: a =[1,4,5]
In [23]: del a

delステートメントが変数aを削除すると、aを介して[1,4,5]にアクセスすることはできませんが、このオブジェクトはまだ存在しており、Pythonのガベージコレクションメカニズムは参照が0であることを検出し、再利用されます。

  1. 変数の割り当ては、変数がオブジェクトを指すことを意味するだけであり、オブジェクトが変数にコピーされることを意味するわけではありません。オブジェクトは、複数の変数によって指すことができます。
  2. 可変オブジェクト(リスト、辞書、コレクションなど)への変更は、オブジェクトを指すすべての変数に影響します
  3. 不変のオブジェクト(文字列、整数、タプルなど)の場合、オブジェクトを指すすべての変数の値は常に同じであり、変更されません。ただし、不変オブジェクトの値が特定の操作(+ =など)によって更新されると、新しいオブジェクトが返されます

変数は削除できますが、オブジェクトは削除できません

python関数はどのようにパラメーターを渡しますか

Pythonのパラメータ転送は、割り当て転送または参照転送です。Pythonのすべてがオブジェクトであるため、パラメータを渡すときは、新しい変数と元の変数が同じオブジェクトを指すようにします。例を見てみましょう。

In [28]: def func(b):...:   b =2
In [29]: a =1
In [30]:func(a)
In [31]: a
Out[31]:1

ここで渡すパラメーターは、変数aとbが同時にオブジェクト1を指すようにします。しかし、b = 2で実行すると、システムは値2の新しいオブジェクトを再作成し、bがそれを指すようにし、それでもオブジェクト1を指します。したがって、aの値は変更されず、1のままになります。

の値を変更するにはどうすればよいですか?

関数でbを返すことができます

def func(b):
 b =2return b
a =1
a =func(a)
a
2

上記の例では、int型であるため、リストの例を見てみましょう。

def func(l2):
 l2.append(77)

l1 =[12,3,6]func(l1)
l1
[12,3,6,77]

ここで、l1とl2は、最初に値[1、2、3]のリストを同時に指します。ただし、リストは可変であるため、append()関数が実行され、新しい要素4が最後に追加されると、変数l1とl2の値も変更されます。

次に、誰もが次の例を見て、結果はどうなりますか?

def func(l2):
 l2 = l2 +[4]

l1 =[12,3,6]func(l1)
l1
[12,3,6]

ご覧のとおり、l1 + [4]の操作は、要素4が最後に追加された新しいリストが作成され、l2がこの新しいオブジェクトを指し、l1が元のオブジェクトを指すため、l1は変更されていません。

総括する

今日は、Python変数の基本原則とその割り当てについて説明し、Pythonでパラメーターがどのように渡されるかを説明しました。他の言語とは異なり、Pythonで渡されるパラメーターは、値や参照ではなく、割り当てによって、または参照によってオブジェクトと呼ばれます。ここでの割り当てまたはオブジェクト参照の転送は、特定のメモリアドレスではなく、特定のオブジェクトを指していることに注意してください。

上記は、pythonのパラメータ受け渡し方法の詳細な内容です。pythonのパラメータ受け渡し方法の詳細については、ZaLou.Cnの他の関連記事に注意してください。

Recommended Posts

パラメータを渡すPythonメソッド
Pythonの対数法の要約
pythonを実行するメソッドを終了します
Python3.9の7つの機能
pythonにdjangoモジュールをインストールする方法
pythonインスタンス化オブジェクトの特定のメソッド
pythonからsqlを読み取る方法の例
pythonコマンドの-uパラメーターの詳細な説明
pythonインポートライブラリの特定の方法
C言語プログラムを呼び出すPythonのメソッド分析
Python super()メソッドの原理の詳細な説明
Pythonマジックメソッドのトピック
Pythonオブジェクト指向の魔法の方法
Python3.7デバッグサンプルメソッド
Pythonの基礎知識(1)
Pythonエラー処理方法
09.Python3の共通モジュール
Python関数パラメータ分類の原理の詳細な説明
Pythonは関数メソッドを定義します
Pythonの基盤を統合する(4)
Python(7)の基盤を統合する
PythonTCPパケットインジェクション方式
pythonリスト(LIST)の深い理解
Pythonのタプルの添え字
Python(6)の基盤を統合する
情報メソッドを除くPython追跡
PythonクローラーのJSの分析
Python(5)の基盤を統合する
gomokuプログラムのPython実装
Pythonサンドボックスエスケープの分析
Python3.10のいくつかの新機能
Pythonマルチスレッドの深い理解
Pythonオブジェクト指向プログラミングの分析
Pythonは勾配降下法を実装しています
OpenCVインストールのPythonバージョン
Pythonの9つの機能エンジニアリング手法
Pythonの右揃えの例の方法
python描画モジュールのmatplotlib
Pythonの基盤を統合する(3)
Python共通モジュールのコレクション
Python算術シーケンス計算方法
pythonでのwheelの使用法
pythonフォントを増やす方法の手順
Python開発でのパンダの使用
Pythonプラグインメカニズムの詳細な実装
Pythonとjsのインタラクティブな呼び出しメソッド
pythonシーケンスタイプの詳細な説明
pythonリストの逆トラバーサルの実装
IOU計算ケースのPython実装
魔法の方法とPythonの使用
Python変数スコープの詳細な理解
word2vec操作のPython予備実装
Pythonは中国語の4つの車輪を処理します
情報エントロピーの例のPython計算
Python関数の定義とパラメーターの説明
pythonselenium操作cookieの実装
Python開発でのnumpyの使用
地主取引のPythonシミュレーション
Pythonの用途は何ですか
Pythonクローラーのスクレイピーシミュレーションログイン
Python条件付き制御ステートメントの分析