Python学習24日目|32時間勉強して見えてきた苦手分野をひとつずつ潰す

Python学習25日目の学習記録。ノートパソコンや参考書、ノートが並ぶ明るいデスクと亀のぬいぐるみ 資格試験

こんにちは、晶(あき)です。

8月15日からPythonの勉強を始めて、25日目になりました。

累計学習時間は約32時間。

昨日はまとまった時間が取れなかったので、模試を通して解く代わりに、これまで曖昧だったところを一つずつ復習しました。

Pythonエンジニア認定基礎試験に向けて問題演習を続けています。

Prime Studyの模試では、前回あと3問で合格ラインというところまで来ました。

あと少し。

……なのですが、問題を解けば解くほど、

「ここ、ちゃんと理解できてなかったな」

という部分が次々と出てきます。

今回は模試をもう一度通して解くのではなく、問題演習で見つかった弱点をひとつずつ掘り下げて復習しました。

エスケープシーケンス|バックスラッシュの数をちゃんと見る

まず引っかかったのが、エスケープシーケンス。

\nなら改行。

ここまでは覚えていました。

ところが、バックスラッシュそのものを文字として扱う場合が混ざると、一気に怪しくなります。

今回改めて分かったのは、見た目だけで

\nがあるから改行!」

と判断しないこと。

バックスラッシュが複数ある場合は、左から順番に「どのバックスラッシュが何をエスケープしているのか」を確認する必要があります。

なんとなく見た目で解いていたところだったので、要注意ポイントとして教材に書き込むことにしました。

二重のリスト内包表記|普通のfor文に戻せばいい

二重のリスト内包表記も、以前から苦手なところです。

一行にforがいくつも並ぶと、それだけで頭の中がごちゃごちゃしていました。

今回、かなり分かりやすかったのが、

「先頭の式をappendするものと考えて、forは左から順番に展開する」

という考え方。

複雑な内包表記を、そのまま頭の中だけで処理する必要はありません。

分からなければ普通のfor文に戻して考えればいい。

これだけで、かなり追いやすくなりました。

試験中に二重内包表記が出てきても、焦らず一度普通のfor文に変換して考えることにします。

ジェネレーター|「一つずつ渡す」でようやく分かった

今回、一番じっくり確認したのがジェネレーターです。

最初は、

「returnがなかったらジェネレーター?」

「appendもジェネレーター?」

と、かなり曖昧な状態でした。

リストとジェネレーターの違いを整理して、ようやく自分の中でしっくりきたのが、

リストは値を全部作って持っておく。
ジェネレーターは必要になったときに一つずつ値を渡す。

というイメージです。

空のリストを作り、appendで値を追加して、最後にreturnする。

これは値を全部リストにためてから完成品を返しているので、ジェネレーターではありません。

一方、yieldを使ったジェネレーター関数は、一つ値を渡したところでいったん処理を止め、次に必要になったところから続きを実行できます。

今までは「yieldが出てきたらジェネレーター」と暗記していましたが、仕組みが少し分かったことで覚えやすくなりました。

super()|親クラスの処理をもう一度書かなくていい

クラスの継承とsuper()も復習しました。

問題自体は追えても、

「そもそも、なんでこんな仕組みが必要なんだろう?」

というところが自分の中で曖昧でした。

親クラスにすでにある処理を子クラスでもう一度書くのではなく、super()を使って親クラスの処理を再利用する。

つまり、同じコードを何度も書かなくていい。

これが分かると、一気に納得できました。

Pythonを勉強していると、こういう「すでにあるものを再利用する」という考え方が何度も出てくる気がします。

nonlocal|「この変数、私のローカルじゃありません」

スコープ関連では、nonlocalをかなり掘り下げました。

内側の関数で変数に値を代入すると、通常はその関数のローカル変数になります。

ところがnonlocalを宣言すると、新しいローカル変数を作るのではなく、外側の関数にある変数を使うことができます。

さらに、内側の関数からその値を書き換えることもできます。

globalが一番外側の変数を対象にするのに対して、nonlocalは外側の関数にある変数を対象にする。

ここは混同しないようにしたいところです。

正規表現はまだ覚えられない

そして現在も苦戦しているのが正規表現。

\d\w\sなど、記号を見るたびに、

「あなた誰でしたっけ?」

となっています。

正規表現は一気に覚えようとせず、記号を一つずつ分解して読むことにしました。

数字なのか、文字なのか、繰り返しなのか。

暗号のような文字列を丸ごと覚えるのではなく、一つずつ日本語に翻訳していく。

ここはまだまだ復習が必要そうです。

参考書を「自分専用の弱点攻略本」にする

32時間勉強してきて、勉強方法も少し変えることにしました。

これまでは参考書をなるべくきれいに使っていました。

でも、試験までに何度も同じところを確認するなら、もう直接書き込んでしまおうと思います。

記号も決めました。

  • ✓:理解・確認済み
  • ★:覚えたい、試験前に確認
  • ⚠:何度も間違える
  • ?:まだ理解が怪しい

さらに、赤・黒・青のペンとマーカーを使って、自分が間違えたところや、自分なりの覚え方を書き込んでいきます。

試験当日は全部を読み返すのではなく、★や⚠を中心に確認する予定です。

参考書をきれいに保存するのではなく、自分が間違えるところを集めた攻略本に改造することにしました。

32時間勉強して、ようやく「Pythonの考え方」が少し見えてきた

32時間勉強しても、まだ分からないことはたくさんあります。

むしろ問題を解けば解くほど、

「ここも理解が浅かった」

というところが出てきます。

でも、勉強を始めた頃とは少し変わってきました。

以前はコードを見て、

「何をしているのか分からない」

で止まっていました。

今は、

「これは何をしている?」

「なぜこんな仕組みがある?」

「つまり、こういうこと?」

と、一段ずつ掘り下げられるようになってきました。

内包表記なら短く書く。

ジェネレーターなら必要なものを一つずつ渡す。

継承やsuper()なら、すでにある処理を再利用する。

少しずつですが、

同じことを何度も書かない。すでにあるものを使う。必要なものを必要なときに扱う。

そんなPythonの合理的な考え方が見えてきた気がします。

Prime Studyは、前回あと3問。

次の模試では、今回潰した弱点がどれくらい点数につながるのか確認してみます。

まだまだ勉強は続きます。

コメント

タイトルとURLをコピーしました