acokikoy's notes

最近気になる=[NoCode, Shopify], I am..=[Python, ウクレレ, マニュアル車, CMS] LoveなWebディレクター

Python 3 エンジニア認定 基礎試験 成果

Python 3 エンジニア認定基礎試験 を受験して無事合格した。間違えたり理解不足だった箇所の振り返りと成果まとめ。

試験の概要

受験の目的・獲得目標

  • Pythonを勉強しだして10ヶ月くらい経つので、一度体系的におさらいして頭を整理するため。

結果

  • 925点

不完全だった箇所のフォロー

1): 位置引数の指定

4.7. 関数定義についてもう少し

def parrot(voltage, state='a stiff', action='voom', type='Norwegian Blue'):
    pass

この関数を呼び出す時に、

parrot(voltage=1000000, action='VOOOOOM')             # 2 keyword arguments

のように両方キーワード引数にするのはアリだけど、

parrot(voltage=5.0, 'dead')  # non-keyword argument after a keyword argument

のように、位置引数の前にキーワード引数が来るのはNG。

2): クラス多重継承 super([type[, object-or-type]])

  • クラスが継承関係にあるときに、親の方が スーパークラス、継承した方はサブクラスと呼ばれる。
    下の例なら Bがスーパークラス、Cがサブクラス。
  • サブクラスからスーパークラスのメソッドを使う時に super()関数を使う。
  • 引数は、super(C, self).method(arg) 第1引数にはサブクラスが入る。
class C(B):
    def method(self, arg):
        super().method(arg)    # This does the same thing as:
                               # super(C, self).method(arg)

組み込み関数 — Python 3.7.4rc1 ドキュメント 9.5.1. 多重継承 — Python 3.7.4rc1 ドキュメント

3): os, platformモジュール - オペレーティングシステム

os --- 雑多なオペレーティングシステムインタフェース — Python 3.7.4rc1 ドキュメント

osモジュールは、OS 依存の機能を利用するポータブルな方法を提供するもの。
機能がモリモリあって覚えきれないのでとりあえず気になる箇所だけ。

import されているオペレーティングシステムに依存するモジュールの名前です。 現在次の名前が登録されています: 'posix', 'nt', 'java'。 参考:
os.name が持つ情報はおおざっぱな括りであり、os.uname() はシステムに依存したバージョン情報になります。 platform モジュールはシステムの詳細な識別情報をチェックする機能を提供しています。

>>> import os
>>> os.name
'posix'

>>> os.uname()
posix.uname_result(
    sysname='Darwin', 
    nodename='mbp2018acokikoy.local', 
    release='18.6.0', 
    version='Darwin Kernel Version 18.6.0: Thu Apr 25 23:16:27 PDT 2019; root:xnu-4903.261.4~2/RELEASE_X86_64', 
    machine='x86_64')

platform --- 実行中プラットフォームの固有情報を参照する — Python 3.7.4rc1 ドキュメント

  • platform.system()は'Linux', 'Windows', 'Java' のような、システム/OS 名を返す。
  • platform.platform()は実行中プラットフォームを識別する文字列を返す。
>>> import platform
>>> platform.system()
'Darwin'
>>> platform.platform()
'Darwin-18.6.0-x86_64-i386-64bit'

成果

  • 6月はじめに受験を決めて約1ヶ月弱 勉強した。短期集中で、週ごとに章を決めて学習したのが良かった。
  • Pythonチュートリアル」を一冊読み込んだ。頭の整理になった。
  • パッケージの構造だの、標準モジュール、インタープリタ、入出力などPythonを多面的に識るきっかけになった。
  • bpython(インタープリタ)bpython) をこの本ではじめて知った。以来、気に入って使っている。
  • 同じ時期に Codewars をやりながらだったのがよかった。制御構造、データ構造、標準モジュール(の一部)は、毎日 codewars のチャレンジを解く中で使い慣れたので、確実に身についた。

Pythonチュートリアル」について

チュートリアルってあるけど、全くの入門者向きではない(と思う)。
Amazonの書評も今ひとつだし、私自身 買ってしばらく放り投げてあった。
正直、試験教材でなかったら、この本読み通せなかったな ^^;;

しかぁし、この本は噛めば噛むほど味があったですよ。

イチから10まで懇切丁寧に書いた本じゃないから、
自分で公式ドキュメントをあたって調べたり、
実際にコードを書いて動かして、本に書かれたコード以外にも いろいろなバリエーションを試し試し 読み進めないと 腑に落ちない。
逆にそうやって読み込むと何度でも楽しめる。 特に §9. Classes (^_^)。

試験勉強外で、読むなら 訳者の方による冒頭の案内が参考になると思う。
初心者はこことここだけ押さえてあとは流してヨシ、とか、
中級者として戻ってきたらここを読むとイイ、
などと一刀両断のガイドだ。

余談: ひょうひょうとした書きっぷりが妙に好き。一番好きなくだりは、Touple の説明のこの部分。 Guidoさんの原著もいいし本の和訳も力が抜けて良い感じ。

5. Data Structures ≫ 5.3. Tuples and Sequences — Python 3.7.4rc1 documentation

A special problem is the construction of tuples containing 0 or 1 items:
the syntax has some extra quirks to accommodate these.
Empty tuples are constructed by an empty pair of parentheses;
a tuple with one item is constructed by following a value with a
comma (it is not sufficient to enclose a single value in parentheses).
Ugly, but effective. ...

「汚いなあ。でも効果的。」

作った本人が言い切っちゃう、なんかキモチいいww

試験会場について

  • 試験会場は全国にある。会場によって試験実施日が異なるので、 試験会場を探す | Odyssey CBT | オデッセイ コミュニケーションズ から自分の条件にあったところを探して申し込む。
  • 私は、オデッセイ テスティング センター 有楽町店 で受験した。東京国際フォーラムの道を挟んでお隣のビルの地下。
  • 試験会場の待合室は広くないが、同じビル内に、スタバを始めカフェ、コンビニ(確かローソン)があり、周りにもいろいろあるので早く着いたらその辺で時間を潰せる。
  • ビル内全般に冷房が効いてるので、外が暑くても上着か羽織りものがあるといい。
  • 試験の最初に 受験者ID/passwdを入力する必要がある。 会場にスマホApple Watchも持ち込めないから、keypassや1passwordのお世話になるような 複雑なパスワードにしておくと慌てることになるので注意。私は試験直前に、一時的に簡易なパスワードに変更しておいた。