Python3エンジニア認定実践試験の勉強をするよ その1
はじめに
資格取得に向けた勉強会をすることになったため、
どうせやるなら、各項目の自分の理解を棚卸しておこうかなと。
主教材の内容に沿って、「試験合格に必要な情報」と「実務を見据えた情報」の2本立てで、
整理します。
- 試験対策
- 各章の「覚えておくこと」を参照
- 本の内容をほぼ並べるだけって時は省略します(意味がないので)
- 実務に向けた情報
- 各章の「役に立つこと」を参照
使用する主教材/実行環境
主教材
-
Python実践レシピ
Pythonエンジニア認定実践試験の公式サイトに記載されている書籍 -
ExamApp
問題演習サイト(無料)
実行環境
- Python3.12.2
試験概要
項目 | 内容 |
---|---|
問題数 | 40問 |
合格ライン | 正答率70% (700点) |
試験時間 | 75分 |
受験料金 | 12,000 |
1: Pythonの環境
章 | タイトル | 問題数 | 問題割合 | 備考 |
---|---|---|---|---|
1 | Pythonの環境 | 1 | 2.5% |
覚えておくこと
pip 基本操作
pip install {パッケージ名} # パッケージインストール
pip install {パッケージ名}==1.1.0 # パッケージインストール(バージョン指定)
pip install {パッケージ名}>=1.1.0, <2.0 # パッケージインストール(バージョン範囲指定)
pip install --upgrade {パッケージ名} # パッケージアップグレード(最新版へ)
pip install --upgrade {パッケージ名}==1.0.0 # パッケージダウングレード
pip list # インストールされているパッケージとバージョンの確認
pip show {パッケージ名} # 指定したパッケージの詳細情報
pip uninstall {パッケージ名} # パッケージのアンインストール
requirements.txtの利用
インストールするパッケージバージョンの統一が可能。
(開発/評価/本番環境でのPythonパッケージバージョンを揃えるなど)
pip freezeで書き出す場合は、依存関係でインストールしたものを含むすべてのパッケージが
書き出される。
pip freeze > requirements.txt # インストールされているパッケージ/バージョンの書き出し
pip install -r requirements.txt # 記載されているパッケージ/バージョンのインストール
# 特定パッケージのインストール可能バージョンに制限をかける
pip install -r requirements.txt -c constraints.txt
freezeで書き出さなくても、以下のように最低限パッケージ名さえ記載されていれば
pip install -r requirements.txt
でインストールすることもできる。
# requirements.txt
pandas
matplotlib
venvによる仮想環境
仮想環境 → Pythonの実行環境を独立した領域に切り分ける
- Pythonパッケージのインストール先を分けることができる
- 異なるバージョンのパッケージを使うことができる
- プロジェクトごとに必要なパッケージのみインストールできる
# 仮想環境作成コマンド
# - カレントディレクトリに{仮想環境名}のフォルダが作成される(Python実行環境)
# - 作成されるPythonのバージョンは、実行時のPythonバージョンと同じになる
# Python3.12.2で実行すれば、Python3.12.2で仮想環境が作成される
$ python -m venv {仮想環境名}
$ python -m venv env
# 仮想環境の有効化(UNIX系 bash/zsh)
$ source env/bin/activate
(env) xxxx # プロンプトに(env)という仮想環境名が表示されるようになる
# 仮想環境の有効化(Windows コマンドプロンプト)
C: .\env\Script\activate.bat
(env) xxxx # プロンプトに(env)という仮想環境名が表示されるようになる
# 仮想環境の有効化(Windows Powershell)
PS C: .\env\Script\Activate.ps1
(env) xxxx # プロンプトに(env)という仮想環境名が表示されるようになる
# 仮想環境無効化(どのOSでも共通)
(env) deactivate
$
# 仮想環境削除
# 作成した仮想環境のディレクトリを削除すればOK
$ rm -rf env
役に立つこと
パッケージング
-
- どこからインストールしているの?
- どんな仕組み?
- 自分でパッケージってどうやって作るの?
みたいな深堀りをしていくときに参考になる。
パッケージマネージャー
-
uv (pythonパッケージマネージャー)の使い方 詳細版
2024/11現在、よく使われているのはPoetryだと思いますが、
今後はuvが台頭してくるのではないかと見ています。
これらのツールでパッケージインストールを行うと、仮想環境も自動で作成されます。
pip/venv/requirements.txtでも管理はできるが、パッケージ追加したときに
requirements.txtの更新が漏れたりとか往々にしてあるので、この辺のツール使ったほうが便利。
2: コーディング規約
章 | タイトル | 問題数 | 問題割合 | 備考 |
---|---|---|---|---|
2 | コーディング規約 | 2 | 5.0% |
覚えておくこと
Pythonでのコーディングスタイルには、PEP8という公式のガイドラインが
あります。
- Flake8
ソースコードがPEP8に準拠しているか、静的解析するツール(リンター) - Black
ソースコードがPEP8に準拠していない箇所を自動整形するツール(フォーマッター)
役に立つこと
-
Pythonのリンター・フォーマッターをしっかりと理解する(Flake8, Black, isort, mypy)
この章については、この記事の内容で十分ではないだろうか。 -
VSCodeでblackとflake8の設定をしてみた
VSCodeと連携して、自動でチェック+(ファイル保存時に)フォーマットまでできる。
この章の内容についても、実際にFlake8/Black/isortを入れてコーディングしていると自然と把握できるようになるので、
実際に入れてみて試すのがオススメ。 -
Pythonの Ruff (linter) でコード整形もできるようになりました
最近はruffというリンター+フォーマッターの役割を持つものが出てきた。
uvと同じAstral社がRustで作っており、より高速。
入れるものが1つだけでよくて、VSCodeとの連携設定も簡単。
実際にPython使うなら、もうこれでいいんじゃないかな…
5: 型ヒント
章 | タイトル | 問題数 | 問題割合 | 備考 |
---|---|---|---|---|
5 | タイプヒント | 2 | 5.0% | 5.2 mypy は除く |
覚えておくこと
Pythonは動的型付き言語であり、型を指定せずともプログラム実行時に動的に推論します。
しかし、実際にコーディングしている人間的には、「あれ、この変数の型ってなんだっけ?」
となることは往々にして起こります。
「型ヒント」を用いると、変数に型情報を付与することができます。
これにより、コードの可読性向上につながったり、IDEによる入力補完が効くようになり、
書きやすさの向上、バグの作りこみ防止にもつながります。
型ヒントの書き方
# 変数の宣言に型ヒントをつける
name: str = "太郎"
age: int = 20
student: bool = True
# 関数の引数/戻り値
def print_person_info(
name: str,
age: int,
) -> None: # 戻り値がないときはNone
print(f"{name}さんは、{age}歳です。")
print_person_info("次郎", 18)
# -> 次郎さんは、18歳です。
# リスト型(要素は文字列型)
names: list = ["太郎", "次郎"]
names: list[str] = ["太郎", "次郎"]
# 辞書型(key-> 文字列, value-> int)
person: dict = {"太郎": 20, "次郎": 18}
person: dict[str, int] = {
"太郎": 20,
"次郎": 18,
}
# タプルの場合、要素の型ヒントはすべての要素に対して行う必要がある
# OK
person: tuple = ("太郎", 20)
person: tuple[str, int] = ("太郎", 20)
# NG
person: tuple[str] = ("太郎", "次郎")
# dataclass の型ヒント利用
from dataclasses import dataclass
@dataclass
class Person:
name: str
age: int
student: bool
# Personという自作したクラスを引数として受け取るという型ヒント
def hello(person: Person):
print(f"{person.name}さん、こんにちわ")
taro = Person("太郎", 20, True)
hello(person=taro)
typingモジュールを使用した型ヒント
typingは標準ライブラリになります。
これを用いると、いろいろな型をつけることができます。
- Union
一つの変数/引数に複数の型ヒントをつけられる
from typing import Union
# str, intどちらの場合も考えられる
def code(index: Union[int, str]) -> None:
print(f"{index}")
# Python3.10以降はこの書き方もOK
def code_new(index: int | str) -> None:
print(f"{index}")
code("A00-11")
code(11)
- Optional
変数/引数にNoneが渡されることを許容する
from typing import Optional
def sum(num1: int, num2: int, num3: Optional[int] = None) -> int:
# 3番目の数字はNoneでも可能
if num3 is None:
return num1 + num2
else:
return num1 + num2 + num3
print(sum(10, 40, 50))
print(sum(10, 40))
- Literal
特定の値のみ許可
from typing import Literal
import pandas as pd
FILETYPE = Literal["csv", "xlsx"]
def read_file(filename: str, ext: FILETYPE):
if ext == "csv":
df = pd.read_csv(filename)
elif ext == "xlsx":
df = pd.read_excel(filename)
else:
raise ValueError(f"拡張子は{FILETYPE}のみ")
return df
read_file("test.json", "json")
- Any
任意の型を許可
from typing import Any
user_input: Any = common_process()
- TypedDict
辞書のキーと値の型を指定
辞書型に名前を付けられる
from typing import TypedDict
class Config(TypedDict):
input_file: str
setting_value1: int
threshold: float
# 以下のように型ヒントをつけることができる
def use_config(config: Config):
print(config)
cfg = Config(
input_file="test.csv",
setting_value1=10,
threshold=0.8,
)
use_config(config=cfg)
# {'input_file': 'test.csv', 'setting_value1': 10, 'threshold': 0.8}
役に立つこと
-
VSCodeでPythonを使用する時のおすすめ拡張機能( Black Formatter, Flake8, isort, Mypy Type Checker )
VSCodeへのmypy導入。拡張のインストールだけで簡単利用できる。 -
namedtupleで美しいpythonを書く!(翻訳)
TypedDictを紹介するなら、namedtuple/typing.NamedTupleも知っておいたほうが、Pythonでの書き方の幅が広がる。
次回
【執筆中】 Python3エンジニア認定実践試験の勉強をするよ その2
Discussion