こんにちわ!この記事はPythonの初学者のための内容となっております。
前回から少し時間が空きましたが、以前に学習したのはユーザ定義型関数でした。
前回の記事
今回もユーザ定義型の関数を学んでいきますが、前回よりもより詳しい内容となっていますので是非みてみてください!それでは頑張っていきましょう!
コンテンツ
プログラミングスクールに関しては下の記事で詳しく記述しています。
こちらで紹介しているスクールは、すべて無料期間がある優良なスクールのみで、特徴を明確にし、読者のニーズに絞って丁寧に解説しました。初めての一歩として、無料説明会に参加してみてください。
Let’s practice a little!!
関数の復習
関数を利用するメリット
- 処理を分解できて、コードが見やすくなる
- 同じ処理を何度も記述する必要がなくなる
- 関数名で何をする処理なのかが明確になる
この部分は前回の記事にも書いてあります。関数を利用するメリットがこんなにもあるということを覚えておくことで、学習するモチベーションにもつながるのではないでしょうか。
関数の書き方などをもう一度復習していきましょう!
1 2 3 4 5 |
def Print_a(): print("a") Print_a() #a |
関数を定義する際には、「def」と記述し、次に関数名を決定してあげます。
その中で、インデントを下げ、実際の命令を記述していくのが基本となります。
スコープとは
スコープとは、変数の利用可能な範囲みたいなものです。
例えば、関数の中で変数を定義したのなら、関数の中のみで利用可能です。
また、「while」文の中でならば「while」文の中でのみ利用可能といった感じです。
具体例を見てみましょう。
1 2 3 4 5 6 7 8 9 |
def Print(): a = 10 print(a) Print() #10 print(a) #NameError |
関数の中で定義した変数「a」は、関数の外で変数を出力しようとしてもエラーが出てしまいます。これがスコープの範囲と呼ばれるものです。
スコープという概念があることでプログラマーにとって様々なメリットがあります。
- 仮に同じ変数を利用しても、範囲内の値を利用できる
- 不必要な変数をメモリに保存しておかなくてもよくなる
- 一時的に必要な変数を定義しやすい
といったことが挙げられます。もう少しスコープの例を見てみましょう!
グローバル変数について
グローバル変数とは、
1 2 3 4 5 6 7 8 9 10 11 12 |
a = 10 def add(x): a = 5 return a + x print(add(10)) #15 print(a) #10 |
最初の変数「a」はグローバル変数と呼ばれるもので、関数の中でも外でも参照することが出来ます。次に「add」関数の中の変数「a」は関数の中でのみ利用可能なものとなっています。そのため、最後の出力では、関数の中の「a」ではなく、グローバル変数として値が格納されているものが出力されています。
関数のみではなく、ループ文でのスコープも学んでいきましょう。
1 2 3 4 5 6 7 8 9 10 11 12 |
i = 0 while True: if i >= 10: break i += 1 a = i print(a) #10 |
Pythonでは、「if」文や「while」文ではスコープを作りません。そのため、「while」文の中で、変数「a」を新たに定義下にも関わらず、最後の「print」関数では、問題なく「10」と出力することが出来ました。
変数に範囲があるということを確認しておこう!
なんだか少し難しいけどなんとなく理解できた。。。
Let’s practice more!!
グローバル変数への代入
ここからは、グローバル変数に値を代入する方法をみていこう!
実際には、グローバル変数に値を代入したり、変更することは推奨されていません。
しかし、今回のテーマであるスコープを勉強するにあたって知っておきたいことではあります。頑張っていきましょう!
おりゃぁぁぁぁ~!
まずはエラーが出てしまう例を見ていきます。
1 2 3 4 5 6 7 8 |
a = 10 def a_add(x): a += x a_add(20) print(a) #UnboundLocalError |
これを実行すると、エラーが出てしまいます。考え方としては、関数の中に「a」という変数は定義されていないのに、引数で渡された値を足すという命令が書かれているためです。考えてみれば当然なのですが、どのようにすれば、グローバル変数に引数の値を足すことが出来るのでしょうか?
解答としては、変数「a」はグローバル変数を参照しますよということを記述してあげればいいのです。実際のコードを見てみましょう。
1 2 3 4 5 6 7 8 9 |
a = 10 def a_add(x): global a a += x a_add(20) print(a) #30 |
これで、グローバル変数に値を代入することができました。めでたしめでたしですね!
それでは、今日の振り返りをしていきましょう!
Today’s final practice!!
まとめ
最後まで読んでいただきありがとうございます!
今回の記事では、変数の有効範囲である、スコープについての記述でした。スコープという概念を知っていると、たくさんの変数を扱う場合にも困惑することなくコードが記述できますのでぜひともマスターしたい内容となっています。
次回は、例外処理についての内容です。少し難しくなってきますが頑張っていきましょう!
本日の理解度調査
今日の最後に理解度調査をします!!
どうすれば正しくなるのか考えてみてね!!
Q. 配列「a」の値をそれぞれ10倍せよ。
1 2 3 4 5 6 7 8 9 10 |
a = [2, 5, 1, 8, 6] def ten_times(): ??? #ここに入れる式はなにかな? a = [???] #ここに入れる式はなにかな? ten_times() print(a) #[20, 50, 10, 80, 60] |
正解は。。。
1 2 3 4 |
def ten_times(): global a a = [i * 10 for i in a] |
わかったかな??正解出来たら今回の項目は完璧だね!!