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
で環境を復元