Pythonエンジニア認定試験の資格取得
試験の種類
- 基礎試験
- データ分析試験
誰が開催している?
どこで受けられる?
いくらで受けられる?
- 基礎試験: 11000円
- データ分析試験: 11000円
いつ受けられる?
- 大体2週間以内
何割で合格?
- 基礎試験: 7割
- データ分析試験: 7割
結果
基礎試験
合格
データ分析試験
合格
勉強方法
基礎試験
ノー勉での80%程度を取得することができる
問題が誤っているのか、Pythonインタプリタで動作させても動かない構文が出題されるなど、あまり問題の品質は高くないようである。
認定テキストとして、Pythonチュートリアル 第3版が紹介されているが、これはオンライン上のPython チュートリアルと等しいらしく、オンライン上の資料は無料でもあり、こちらを精読して挑むと良い。
基礎試験内容
インタプリタ・対話モード
pythonと入力するpython -c commandで起動するpython -m module [arg]でモジュールを指定して起動する
引数の受け渡し
sys.argvに格納されている
ソースコードと文字コード
- デフォルトではUTF8
- 特別な文字コードを使うには
# -*- coding: cp1252 -*-などとする
電卓として使う
- インタプリタを起動して入力する
変数_
- 最後に計算された値が
_に代入される
リテラルの結合
- “Python” == “Py” “thon”
- 変数に代入して結合するなどはできない
スライス
- word[0:2]のとき, index(2)は含まれないことに注意
範囲外アクセス
- word[4:42]など42などが存在しないとき、うまく対処してくれる
strへの代入
- サポートされない
浅いコピー
sequence[:]など:でアクセスする
listは代入可能
sequence[4]=4はOK
:でリストを初期化
sequence[:]=[]
range
range(0, 10, 3)->0, 3, 6, 9
pass
- 何もしないこと
関数のデフォルト引数は記憶する
def f(a, L=[]):
L.append(a)
return L
print(f(1))
print(f(2))
print(f(3))
の出力結果は
[1]
[1, 2]
[1, 2, 3]
キーワード引数の制限
- キーワード引数がない、ある、あるの呼び出しは合法である
- キーワード引数がある、ないなどの呼び出しは違法
def foo(*arguments)
- 引数に入れて呼び出したとき、リストとして受け取るものになる
def foo(**keyword)
- 引数に入れて呼び出したとき、
dictとして受け取るものになる
def foo(arg, /)
- 引数に
/を入れると必ずpositionで呼び出すことになる - つまり、
foo(0)は合法だが、foo(arg=0)は違法
def foo(arg, *)
- 引数に
*を入れると必ずkeyword付きで呼び出す必要がある - つまり、
foo(0)は違法だが、foo(arg=0)は合法
関数の引数の一般化
def f(pos1, pos2, /, pos_or_kwd, *, kwd1, kwd2)
任意引数リスト def concat(*args, sep="/")
concat("earth", "mars", "venus")-> “earth/mars/venus”concat("earth", "mars", "venus", sep=".")-> “earth.mars.venus”
呼び出すときに**dictで値を渡す
def foo(bar, hoge)のような関数があったときに、def foo(**{"bar":1, "hoge":2})のように呼び出せる
関数が持つ__doc__というドキュメンテーション文字列
def foo():
"""This is doc of foo
"""
pass
print(foo.__doc__)
>> "This is doc of foo"
関数のアノテーション
def f(ham: str, egg: str) -> str:
print(f.__annotations__)
return ham + "and" + egg
f("spam", "egg")
>> {'ham': <class 'str'>, 'return': <class 'str'>}
標準関数でリストを転置する
matrix = [
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
]
list(zip(*matrix))
>> [(1, 5, 9), (2, 6, 10), (3, 7, 11), (4, 8, 12)]
del list[:]
- あるリストの値をまとめて消すとき
tupleの初期化
t = 123, "hello"->(123, "hello")- 代入は違法
集合型
a-b: bに含まれなく、aのみの要素a|b: aまたはbに含まれる要素a&b: aかつbに含まれる要素a^b: aまたはbに含まれるが、同時に含まれない要素
float("NaN")
- Not a number
math.isnan(value)でチェックできる
モジュール名を取得する__name__
np.__name__->"numpy"
モジュールの検索パス
- 優先順位があり、
スクリプトのパス,PYTHONPATHで定義された場所,インストールされたデフォルトの順番
dir関数
- モジュールがどんなメソッド・プロパティを持つか、listで表示する
- 引数無しで実行すると現在のスクリプトについて表示する
builtinsモジュール
- 何もしないでも読まれるもの
import builtins; dir(builtins)で見れる- 標準的な例外や型など
パッケージ
- ディレクトリをパッケージとして扱わせるには、
__init__.pyが必要 __init__.pyにパッケージの初期化コードを書くことができる__all__変数は、パッケージに含まれるpythonファイルのモジュール名を列挙することで、from foo import *のようにglobしたときにすべてimportできる
パッケージ内参照
from . import foo同じディレクトリのfooをimportfrom .. import bar上のディレクトリのbarをimportfrom ..spam import egg上のディレクトリにあるspamフォルダ内のeggをimport
f-string
- print(f”{name:10} ==> {phone:10d}”) -> これで幅を指定できる
finally節
- tryの成功失敗に関わらず、実行される
例外のelse節
- どのexceptにもマッチしないとき、実行される
nonlocal
- 関数内部からメンバ変数にアクセスできる
global
- globalスコープにアクセスできる(メンバ変数の粒度には影響しない)
generator
- 関数内部で
yeildして値を逐次取り出すようにしたもの - 丸括弧でlist内包表記したものは
generatorとして扱われる
reprlib
- 出力が短くなりprintデバッグよりマシな感じになる
pprint
- indentを追加するなど構造的に出力する
文字列テンプレート
from string import Template
t = Template('${village}folk send $$10 to $cause.')
t.substitute(village='Nottingham', cause='the ditch fund')
'Nottinghamfolk send $10 to the ditch fund.'
array
- より省メモリな特定の型しか許容しないarray
Hとは2バイト符号なしという意味
from array import array
a[1:3]
array('H', [10, 700])
venv
- 仮想環境を作成する
venv内では最初に参照するライブラリが独自のものになる
pip
pip freez今のライブラリを標準出力pip install -r requirements.txtで環境を復元