2018.07.29グローバル変数は関数内からも参照することができます。関数内からグローバル変数を変更したときには、関数の外側にどの様な影響をあたえるのでしょうか。実はグローバル変数は、関数内へは「参照渡し」で渡されます。これは、関数の引数を用いて関数の外から関数に値を渡すのと全く同じ仕組みです。関数内部での変更が、関数の外側に与える影響は、「参照渡し」を理解していれば、全く同じなのです。この記事では、数値とリストの説明しかしていませんが、以下、参考記事(1)には、タプルやディクショナリなど、他の型の場合のことも説明しています。実際にコード01で試してみます。5で要素の変更を行うと、関数の外の値が変わっています。このように、グローバル変数は関数内側に「参照渡し」で渡されるため、関数内での要素の変更は、外側の関数にも影響を与えます。[5]これを説明すると下図のようになります。[3]と定義されます。これは、関数xxx()を定義した段階で、数内にも同名の変数xがあれば、グローバル変数aから「参照渡し」により、関数内に変数aを渡されます。「参照渡し」ですので、同じ場所に記憶された[3]を共有します。5により、関数内の変数aの要素を5に変更すると、関数の外でも連動して変更されます。次にグローバル変数の数値を関数内で変更した場合の関数外部への影響について確認します。5に注目してください。=」となっていますので、要素の変更ではなく、「変数の再定義」です。ローカル変数として「変数の再定義」を行っているのです。再定義を行った時点で、外側のグローバル変数とは独立した別の変数になっています。したがって、関数内での変更が外側の関数に影響を与えません。3これも、図で説明します。次に、グローバル変数aは、関数内の変数aに「参照渡し」で渡されます。このとき「参照渡し」ですので、同じアドレスi番地に保管したデータ3を共有します。=」となっており、これは「変数の再定義」です。変数の再定義では関数内の変数aは、それまでの記憶を放置し、全く新しいアドレスk番地に、ローカル変数aを再定義します。この時点で、関数の外のグローバル変数aと関数内の変数aは、なんの関わりもない、それぞれ独立した変数になります。関数内のローカル変数aの変更が、関数の外のグローバル変数aに影響を与えることはありません。余談となりますが、以下の参考記事も読んでみてください。グローバル変数を関数内へ受け渡す場合は、関数を定義した時点で、関数内の「変数の再定義」の有無が確認されていることがわかります。実際には下図中段の参照渡しする部分は省略され、いきなり、ローカル変数として「定義」されます。省略しているだけですので、「参照渡し」はすべて下図のような流れであると覚えておいた方が楽だと思います。ちなみに、引数による関数内へのデータの受け渡しの場合は下図中段は省略されません。[5]としている点です。=」となっていますので、要素の変更ではなく、「変数の再定義」です。ローカル変数として「変数の再定義」を行っているのです。再定義を行った時点で、外側のグローバル変数とは独立した別の変数になっています。したがって、関数内での変更が外側の関数に影響を与えません。[3]コード03は、関数内でリストを再定義しているので、流れはコード02の数値を再定義した場合と同じです。変数の再定義では関数内の変数aは、それまでの記憶を放置し、全く新しいアドレスk番地に、ローカル変数aを再定義します。この時点で、関数の外のグローバル変数aと関数内の変数aは、それぞれ独立した変数になります。関数内のローカル変数aの変更が、関数の外のグローバル変数aに影響を与えることはありません。コード02の数値の再定義の場合と同様に、グローバル変数の関数への引き渡しの場合は、実際には下図中段の参照渡しは省略されます。June関連記事PythonPython♪書籍を買うぐらいの感覚で購入できたUdemyの動画講座UdemyのPythonの講座を購入してみました。この一年間、Pythonの勉強を書籍だけで頑張ってきました。Udemyのサンプル動画を...PythonPython♪基本:簡単なfor文とrandom関数を使ってグラフを表示しようif文もfor文も配列も関数も知らない状況で、なにからPythonを説明するのがいいのでしょう。Wolrdの出力が面白いのは最初の1度きりです。プログラミングの家庭教師って、思ったよりも難しい...PythonPython♪コンピューターの変数の記憶には、参照先のアドレスが利用される。コンピューターの中で、Pythonの変数はどの様に記憶されているのでしょうか。Pythonでは、そんなことを意識しなくても使えますが、関数での引数の受け渡しや、「参照渡し」「浅いコピー」「深いコピー」等を理解するには、ちょっと、勉強をした...PythonPython♪小数の繰り返し処理の落とし穴。range()、arange()、linspace()for文で多用されるPythonの組み込み関数range()では小数が扱えません。私はこの仕様は気に入っています。小数の使用は動作が不安定になる可能性があるからです。実はNumPyのarange()やlinspace()...PythonPython♪基本:if文を使って「もしも~だったら」いよいよ、中学生のゆうちゃんとの勉強会もif文に突入しました。if文は状況によって命令の内容を変化させる命令文です。2つのデータを比較して、どちらが大きいかによって、その後の命令を変化させます。命令文の形はシンプルなので、「習うよ...PythonPython♪基本:まず、最初はint型、float型、str型と算術演算子ですね。中1のゆうちゃん(偽名で~す)との勉強会の2回目です。データ型はあるけれど、最初に覚えなくちゃいけないのは、int()、float()、str()と算術演算子ですね。Studioが遅いときの対策2020.01.11Kotlin♪環境設定「HAXMがインストールされていません」2020.01.052020.01.08Python♪FEM:部材座標系の要素剛性マトリクス2020.01.04Kotlin♪スマホアプリの言語は、Kotlin、Java、C#、Dart?2020.01.012020.01.13スポンサーリンクスポンサーリンク。