Python 3 エンジニア認定基礎試験とその学び
はじめに
こんにちは。株式会社ペライチのエンジニアの栗原です。
先日、Python 3 認定基礎試験を受験してきましたので、学習方法や僕が学んだPythonの書き方を記事にしたいと思います。
この記事がどなたかのお役に立てれば幸いです。
Python 3 エンジニア認定基礎試験とは?
まず、Python 3 エンジニア認定基礎試験とは何かというと、一般社団法人Pythonエンジニア育成推進協会が運営しているPythonの文法基礎を問われる資格試験になります。
テストセンターにて受験するCBT方式で出題形式は選択問題です。40問中28問(正答率70%)以上で合格となります。試験時間は60分間です。(申込方法などのさらに詳しい情報などはこちら)
その他にも、認定基礎試験よりも実践的な内容を問われる「Python 3 エンジニア認定実践試験」やデータ分析等に関する試験の「Python 3 エンジニア認定データ分析試験」もあります。
なんで受験しようと思ったのか
以前からPythonには興味があったのですが、業務で使用することになったのが大きな理由です。僕はこれまでRubyやPHPをメインで使っており、Pythonを使うにあたって調べながらなんとなく書けてはいた(?)のですが、ちゃんとPythonを勉強したいなという想いがありました。
どうやって勉強するか迷った結果、資格試験であれば手っ取り早く網羅的にPythonのことを学習できると考え、受験するに至りました。また、資格を取得するという目標があると勉強のモチベーションも保てるだろうというのも受験した理由の1つですね。
さらに、弊社では書籍購入制度や資格受験料補助制度もあるため、これも受験するための後押しとなってくれました。
学習方法
今回、僕は問題を解きつつ気になったところは自分で実行して理解を深めるという方針で学習しました。公式問題集の徹底攻略Python 3 エンジニア認定[基礎試験]問題集と、公式で紹介されている以下の模擬試験サイトで理解できるようになるまで繰り返し問題を解きました。(模擬試験サイトはどれも無料で利用できます)
また、GoogleがGoogle ColaboratoryというPythonの実行環境を提供してくれています。Googleのアカウントさえあればどなたでも利用することができ、自分で環境構築しなくてもよいので非常に便利です。
ただし、Pythonの書き方が何も分からないという方は、いきなり問題に手をつけるのではなく何かしらのチュートリアルを済ませておくほうが効率的かと思います。Python チュートリアルでの学習が一番理想的かもしれませんが、僕は以前にpaizaで学習しました。
受験してみて
結果として、40問中38問の正解で合格できたので、まずまずではないかと感じました。
試験の難易度はそんなに高くないと思います。試験時間も60分あるうちの30分くらいで解き終わってしまいました。Pythonを書いたことがなくても他のプログラミング言語を触っているエンジニアであれば、合格自体は学習期間が1週間もあれば十分かなと思います。
僕は、Ruby技術者認定試験も受験したことがあるのですが、Ruby Silverと同様の難易度かなという所感です。(弊社エンジニアが書いたRuby Silverの記事もぜひご覧ください)
受験して一番良かったなと感じたのは、当初想定していたとおり、業務では見かけたことのないメソッドであったり書き方というのを網羅的に学習することができた点です。あくまで基礎なので広く浅い知識にはなりますが、Pythonへの理解を深められたと思いますし、実際に業務に活きているなぁと感じることもあります。
Pythonの書き方
試験についていろいろと書きましたが、僕がPythonを学習してみて、書き方などでへぇっとなったことをいくつか紹介しようと思います。(Python熟練の方には当たり前のことばかりかもしれませんがお付き合いください…)
内包表記
Pythonは短く記述できることが特徴の1つであり、内包表記はその代表例かと思います。
リスト内包表記であれば以下のような書き方になります。
[(式) for (変数) in (範囲)]
具体的な例として、1~3の数値をそれぞれ2乗して[1, 3, 9]
のリストを作成する場合は以下のようになります。
lst = [i **2 for i in range(1, 4)]
ちなみに、これは以下と同じ意味です。
lst = []
for i in range(1, 4):
lst.append(i ** 2)
for文がネストしているときでも1行にまとめることができますが、個人的に複雑すぎると少々読みにくさを感じます…
内容表記を使うと短く記述できるだけでなく実行速度も速いらしく、Pythonのコードではよく見かけるので、ぜひともマスターしておきたい構文ですね。
for, while文にelseが使用できる
else
は一般的にif文に使用されると思いますが、Pythonではfor文やwhile文に使用できます。どのような動きをするとかというと、forやwhileの対象がすべて処理されたときにのみ実行させることができます。
実行例は以下のような感じです。
for i in range(3):
print(i)
else:
print('Done')
>>> 0
>>> 1
>>> 2
>>> Done
ただし、breakなどで途中で抜け出してしまう場合は、else
は実行されません。
for i in range(3):
print(i)
if i == 1:
break
else:
print('Done')
>>> 0
>>> 1
便利な機能である一方で、冒頭で述べたとおりelse
はif文の最初の条件に当てはまらなかった場合という意味で使用されることが多く、誤解を招く可能性があるためなるべく利用を避けた方がよいという意見もあるようです。
デフォルト値
こちらは結論から述べると、ミュータブルなオブジェクトをデフォルト値に使用するのは避けるべきということです。
具体例を挙げると、以下のような数値num
をリストlst
に追加するメソッドがあったとします。ここで引数のlst
のデフォルト値を[]
とします。
def hoge(num, lst = []):
lst.append(num)
print(lst)
そして、以下のように実行します。
hoge(3, [1, 2]) >>> [1, 2, 3]
hoge(4, [1, 2]) >>> [1, 2, 4]
hoge(1) >>> [1]
hoge(2) >>> [1, 2] # [2]とはならない!
すると、上の3つは問題ないかと思いますが、最後の処理は[2]
にはならず[1, 2]
となってしまいます。
Pythonの仕様として、デフォルト値のオブジェクトはメソッドが定義された時点で生成されます。そして、引数が省略されてデフォルト値を使用する場合はそのオブジェクトが使いまわされるため、上記のような挙動になっています。(3番目の処理の[1]
が引き継がれてしまっている)
解決策としては、以下のようにデフォルト値にNone
などのイミュータブルなオブジェクトを設定しておき、メソッドの中でミュータブルなオブジェクトにするというやり方が挙げられます。
def hoge(num, lst = None):
if lst is None: # もしくは lst = lst or []
lst = []
lst.append(num)
print(lst)
さいごに
いかがでしたでしょうか?
今回受験したのは基礎試験なので、次は「Python 3 エンジニア認定実践試験」も挑戦してみたいなと考えています。余談にはなりますが、実践試験で900点(正答率90%)以上で合格すると「Python Super Engineer」を名乗ることができるらしいです。(かっこいい!)
また、PythonだけでなくフレームワークであるDjangoの知見も深め、さらにレベルアップしていきたいです。まだまだ勉強することはたくさんですね。
読んでいただきありがとうございました!
採用情報
現在エンジニア募集しています!
▼ 採用ページ
▼ 選考をご希望の方はこちら(募集職種一覧)
▼ まずはカジュアル面談をご希望の方はこちら
募集中の職種についてご興味がある方は、お気軽にお申し込みください(CTO がお会いします)
Discussion