2018.07.29関数を使っていたら変なエラーが出てきました。‘x’」なるほど!「代入前(定義される前)にローカル変数’x’が参照されている」ってことね。グーグル翻訳さんありがとう。エラー発生のサンプルコード1どうやら、コード01では、3行目のprint(x)でまだ定義されていないローカル変数xが使われているということらしいのです。私はxについて、3行目までは、6行目でグローバル変数として定義されているx=2の値をとり、4行目以降x=5になるのだと思っていました。3行目のprint(x)の出力は2になると思っていました。test1()は関数内にx=5があるので、関数内では最初から変数xはローカル変数として扱われるようなのです。print(x)って言っても、xがまだ定義されてないよ。とエラーで教えてくれたのです。5を入れ替えてみました。5でxを定義するので大丈夫なはず。2test1()#出力025今度はうまくいきました。Pythonでは、関数の中で途中まではグローバル変数を参照し、途中からローカル変数に定義しなおすことはできません。グローバル変数ならグローバル変数のまま。ローカル変数ならローカル変数のままなのです。エラー発生のサンプルコード2しかし、分かっていたつもりなのに、また、やってしまいました。本当はもうちょっと長いコードだったんですが、シンプルに書き直したコード03を見てください。私は、xの値は最初は2で、2に5を加えるつもりだったのです。「えっ、また同じエラー?」・・・しばらく考える・・・「あ~、そうか。=」の形でxを定義しているので、xは関数内でローカル変数として扱われます。関数内ではxはグローバル変数2ではないのです。これが重要ポイントです。一度、考え直してみます。これは、右辺と左辺がイコールであるという命令文ではありません。そもそも、xとx+5が同じになるなんてありえません。プログラミングの代入は、「右辺の値」を計算し、「左辺の変数」に渡すという意味です。右辺が値で、左辺は値を渡す場所なのです。(参照だけ渡すとか、そういう話はちょっといったん、忘れてください。5は、まず「右辺の値」を求めます。5のxは、関数内で定義されたローカル変数なので、まだ、定義されておらず、値が決まっていません。assignment「代入前(定義される前)にローカル変数’x’が参照されている」ということなのです。なんか、気をつけないと、他でも間違いそうですね。グローバル変数はできるだけ使わず、関数の外の値を参照するときは、引数を使うなど、明示した方が、エラーの少ないプログラミングができるように思います。好みかもしれませんけど。引数で変数を渡したときとの比較を行います。コード04では引数でaを関数に渡しています。5)で定義する前にprint文で出力してもエラーは発生しません。5の前までは引数として参照渡しされた値(a=3)として参照することができます。5で、ローカル変数として変数の再定義を行った後は、aの値は5となります。この様に、引数を用いて関数内に変数を渡した場合は、グローバル変数を関数内で用いる場合とは異なり、途中で変数の再定義を行うことが可能です。その他の注意点としては、引数として「参照渡し」された変数aを、関数xxx()内の4行目で「再定義」した場合は、関数の外の変数aとは全く別の変数として定義されますので、関数の外と内ではお互い変更の影響を受けません。したがって、9行目の出力は3のままになっています。Pythonでは、関数の中で途中まではグローバル変数を参照し、途中からローカル変数に定義しなおすことはできません。ローカル変数として扱うときは、変数を使う前に変数を定義しましょう。グローバル変数の利用はできるだけひかえ、関数への入出力がわかりやすいプログラミングを心がけましょう。1のような、プログラミングの代入は「右辺の値」を計算し、「左辺の変数」に渡すという意味です。右辺が値で、左辺は値を渡す場所です。右辺の式を計算する前に、右辺で使用する変数を定義する必要があります。引数を用いて関数内に変数を渡した場合は、グローバル変数を関数内で用いる場合とは異なり、途中で変数の再定義を行うことが可能です。以下、私が実際に購入したPythonの教材をまとめてみました。Pythonを学習する上で、少しでもお役に立つことができればうれしいです。書式設定はPython2.6からformatメソッドが追加され、%演算子を使った古い文字列書式設定よりも、このformatメソッドを使った方がよいと思います。Pythonのチュートリアルで簡単に紹介されていますし、古いコード...PythonPython♪小数の繰り返し処理の落とし穴。range()、arange()、linspace()for文で多用されるPythonの組み込み関数range()では小数が扱えません。私はこの仕様は気に入っています。小数の使用は動作が不安定になる可能性があるからです。実はNumPyのarange()やlinspace()...PythonPython♪リストの内包表記が苦手な人は図で感覚をつかもう慣れないとリストの内包表記って頭が変になりませんか。そんな場合は、図で感覚をつかみましょう。リストの内包表記は、for文やif文を使ったリストの作成がたった1行で書けてしまう便利な表記です。うまう使いこなせばすっきりした見やすいコ...PythonPython♪基本:まず、最初はint型、float型、str型と算術演算子ですね。中1のゆうちゃん(偽名で~す)との勉強会の2回目です。データ型はあるけれど、最初に覚えなくちゃいけないのは、int()、float()、str()と算術演算子ですね。網羅的に覚えるのなら本を読めばよいわけで、ゆうちゃんには優先順...PythonPyrhon♪関数の引数の「=」「:」「*」「**」を整理して覚えるためのポイントディフォルト値、キーワード引数、アンパック、「=」「:」「*」「**」などなど、覚えてしまえば簡単なのだと思いますが、「関数の引数に関する用語や記号はごちゃごちゃしてとっつきにくい。」というあなたに、整理して覚えるためのポイントを説明します...PythonPython♪引数のディフォルト値が変化する場合と変化しない場合の違い引数のディフォルト値を設定し、関数内でその変数を変更すると、次に関数を呼び出すとき、ディフォルト値が変化する場合と変化しない場合があります。これは、理由を理解するとシンプルです。どんな場合にディフォルト値が変わってしまうのかがわか...Python♪関数に引数で渡された変数の変更が、関数の外側に与える影響。Studioが遅いときの対策2020.01.11Kotlin♪環境設定「HAXMがインストールされていません」2020.01.052020.01.08Python♪FEM:部材座標系の要素剛性マトリクス2020.01.04Kotlin♪スマホアプリの言語は、Kotlin、Java、C#、Dart?2020.01.012020.01.13スポンサーリンクスポンサーリンク。