現在Python3エンジニア認定基礎試験の勉強中です。
学習したことを以下に整理していきます。
(個人のメモ用でもあるので、説明を少し省いている箇所もあります。)
1章 食欲をそそってみようか
出題数 1/ 40問(2.5%)
1.1 Pythonの特徴
-
インタープリタ言語
- コンパイル・リンクが不要
- 対話モード
-
Pythonは高水準言語
- 高水準言語:人間が理解しやすい言語
- 低水準言語:機械語など
-
グルーピングにインデントを使用
- インデント:字下げのこと
-
動的型付け
- 変数や引数の宣言が不要
- C言語やJavaなどは静的型付け
-
モジュールとして再利用が可能
- モジュール:Pythonのファイル(.py)のこと
-
拡張可能
- ビルトインの関数やモジュールなど
-
主要OSで利用
- Windows, Mac OS X, UNIXなど
2章 Pythonインタープリタの使い方
出題数 1/ 40問(2.5%)
2.1 インタープリタの起動・終了
起動
python
python -c コマンド
例:python -c "print('hello')"
python -m モジュール名
例:python -m test
(python test.py
と同じ操作)
python -i スクリプトファイル名
例:python -i script.py
※スクリプト実行後に対話モードへ
終了
Unixの場合:Ctrl+d
Windowsの場合:Ctrl+z
共通:quit()
2.2 引数を渡す
-
スクリプト起動時の引数
- sysモジュールのargvに割り当てられる(
sys.argv
) -
import sys
を実行して参照
- sysモジュールのargvに割り当てられる(
-
コマンドライン引数
- コマンド入力画面(コマンドライン)からプログラムを起動する際に指定する文字列のこと
2.3 対話モード
プライマリプロンプト:コマンド入力を促す(>>>
)
セカンダリプロンプト:継続行の入力を促す(...
)
2.4 エンコーディング
デフォルトはUTF-8
それ以外を使う場合は# coding: (エンコーディング方式)
を1行目に記載
※shebangを書く場合は2行目
例
#!/usr/bin/env python3.9
# coding: shift_jis
3章 気楽な入門編
出題数 6/ 40問(15%)
3.1 コメントアウト
-
ハッシュ記号
#
でコメントアウト -
文字列リテラル (引用符で囲まれた文字列) 内部はコメントアウトできない
3.2 数値計算
-
四則演算
>>> 1 + 3 * 4 / 2
-> 7.0 -
剰余
>>> 5 % 2
-> 1 -
小数点以下切り捨て
>>> 7 // 3
-> 2 -
累乗
>>> 2 ** 3
-> 8 -
変数
>>> a = 1
>>> b = 2
>>> a + b
-> 3 -
四捨五入
>>> round(5.4)
-> 5
>>> round(5.5)
-> 6
>>> round(5.43, 1)
-> 5.4 -
その他
complex(複素数)、decimal(10進数)、fraction(分数)などもサポート
3.3 文字列
-
シングルクォーテーション、ダブルクォーテーション
>>> 'hello'
-> 'hello'
>>> "hello"
-> 'hello'
>>> 'dosen\'t'
-> "dosen't"
>>> "dosen't"
-> "dosen't" -
エスケープシーケンス
\n
:改行
\t
:タブ -
print()関数とraw文字列
print()関数:全体を囲む引用符を除去、特殊文字として解釈
raw文字列:特殊文字として解釈しない
>>> 'a\nb'
-> 'a\nb'
>>> print(r'a\nb')
-> a\nb
>>> print('a\nb')
-> a
b
- トリプルクォーテーション
>>> '''
... a
... b
... c
... '''
'\na\nb\nc\n'
- 長い文字列
>>> ('あいうえお'
... 'かきくけこさしすせそ')
'あいうえおかきくけこさしすせそ'
-
長さ
>>> word = 'abc'
>>> len(word)
-> 3 -
連結、繰り返し
>>> 'a' 'b'
-> 'ab'
>>> 'a' + 'b'
-> 'ab'
>>> 'a' * 3
-> 'aaa' -
インデックス指定・スライス
>>> word = 'hello'
>>> word[1]
-> 'e'
>>> word[-1]
-> 'o'
※インデックス指定は範囲外を指定するとエラー
>>> word[0:2]
-> 'he'
※スライスは範囲外をしてもエラーにならない
3.4 リスト
-
[]
で宣言
>>> a = [1,2,3]
>>> a
-> [1, 2, 3]
※数字、文字列、辞書型のデータなどを並べられる -
文字列と同様に長さの取得が可能
-
・文字列と同様に連結、繰り返しが可能
-
文字列と同様にインデックス指定・スライスが可能
-
改変可能(ミュータブル)
※文字列は改変不可(イミュータブル) -
要素の追加
>>> a = [1,2,3]
>>> a.append(4)
>>> a
-> [1, 2, 3, 4]
3.5 多重代入
- 1行で記述可能
- 複数の変数に値を代入する場合、代入によって変数の値が更新される影響を受けない
>>> a = 10
>>> a, b = 3, a + 1
>>> print(a, b)
-> 3 11
3.6 条件分岐
- bool型(True、False)で判定
数値:0 → False、1 → True
シーケンス(リストや文字列):長さが0 → False、長さが0以外 → True
比較演算子:>
、<
、>=
、<=
、==
、!=
3.7 print()関数
- 引用符なしで表示
- アイテムとアイテムの間はスペース
- キーワード引数endで出力末尾の調整が可能
>>> print("abc", "def")
abc def
>>> for i in range(5):
... print(i, end=",")
...
0,1,2,3,4,
4章 制御構造ツール
出題数 9/ 40問(22.5%)
4.1 if文
- 記載方法
if 条件:
elif 条件:
else:
>>> a = 1
>>> if a < 0:
... print("負の数")
... elif a == 0:
... print("0")
... else:
... print("正の数")
...
正の数
4.2 for文
- 記載方法
for 変数 in 要素の集まり:
※入れ子構造により多重ループも可能
>>> wordlist = ["abc", "defg"]
>>> for word in wordlist:
... print(word, len(word))
...
abc 3
defg 4
4.3 while文
- 記載方法
while 条件:
※条件が真(True)であれば実行
※入れ子構造により多重ループも可能
>>> i = 0
>>> while i < 5:
... print(i)
... i = i + 1
...
0
1
2
3
4
4.4 各種関数(range、list、enumerate)
- range()関数
range (終了値):
range (開始値, 終了値):
range (開始値, 終了値, ステップ数):
>>> range(3)
-> range(0, 3)
>>> range(0, 3)
-> range(0, 3)
>>> range(0, 20, 5)
-> range(0, 20, 5)
-
list()関数
要素の集まりをリスト形式に変換
>>> list('abc')
-> ['a', 'b', 'c']
>>> list(range(3))
-> [0, 1, 2]
>>> list(range(0, 20, 5))
-> [0, 5, 10, 15] -
enumerate()関数
for (変数),(変数) in enumerate(要素の集まり):
>>> wordlist = ["abcde", "fjh"]
>>> for i, item in enumerate(wordlist):
... print(i, item)
...
0 abcde
1 fjh
以下のようにrange
とlen
を組み合わせた場合も同様の結果になる
>>> wordlist = ["abcde", "fjh"]
>>> for i in range(len(wordlist)):
... print(i, wordlist[i])
...
0 abcde
1 fjh
4.5 繰り返し処理
- continue、break、else
continue
:繰り返し処理をスキップ
break
:繰り返し処理を中断
else
:繰り返し処理終了後に実行
>>> for i in range(5):
... if i == 3:
... continue
... print(i)
... else:
... print("終了")
...
0
1
2
4
終了
>>> for i in range(5):
... if i == 3:
... break
... print(i)
... else:
... print("終了")
...
0
1
2
- イテラブル、イテレータ
イテラブル:繰り返し可能なオブジェクト
イテレータ:イテレーションした状態を記憶するオブジェクト
※iter()
でイテレータ化したものをnext()
で取り出せる
4.6 pass文
-
後で実装する場合などの仮置き場として使用
※実行しても何も起きない -
while True:
内で実行すると無限ループになる
>>> def abc():
... pass
...
4.7 関数・引数
-
関数は
def
を使用 -
スコープ(変数の有効範囲)
シンボル表を読み取る順はローカル → グローバル → ビルトイン
※他のスコープに代入する場合はglobal文やlocal文を使用 -
オブジェクトへの参照渡し ※追記:Pythonでは参照渡しは存在せず、値渡しのみ
(以下は部分的には正しいが、参照渡しを勘違いして理解していることによる誤りとのこと)
引数がミュータブルの場合
関数内で値が変更されると呼び出し元の変数も影響を受ける
引数がイミュータブルの場合
関数内で値が変更されても呼び出し元の変数は影響を受けない -
return文
関数の外で値を使用できる(return文がないとNoneになる)
関数の実行を終了させたいときにも使用可能 -
引数のデフォルト値
デフォルト値は、関数が定義された時点で関数を定義している側のスコープで評価
例:関数が定義されている時点で定義されている変数の値を使用
デフォルト値は1回のみ評価 -
位置引数、キーワード引数
位置引数:値の指定なし
キーワード引数:=
で値を指定
※位置引数、キーワード引数の順番
※キーワード引数の順序は問われない -
可変長引数
*args
:タプルで受け取る
**kwargs
:辞書で受け取る
※*args
、**kwargs
の順番 -
特殊引数
位置専用引数:/
より前
※使用例:APIの引数名変更により呼び出せなくなるのを防ぐ
位置引数と任意個数を表すキーワード引数の衝突を防ぐ
キーワード専用引数:*
より後ろ -
アンパック
複数の要素を各変数に代入
*
:リストやタプルをアンパック
**
:辞書をアンパック -
lambda(ラムダ)式
名前を付ける程でもない小規模な関数に使用
他の関数と組み合わせて使用する事が前提とされた定義式
(sort、max、 map、 filterなど) -
docstring(ドキュメンテーション文字列)
定義の先頭にその関数の使い方を記述
"""
で囲んで記載
help()で呼び出し可能 -
関数アノテーション
引数アノテーションと返り値アノテーション
def abc(x:str, y:int) -> str:
挙動に変化はない
.__annotations__
で型の確認が可能
4.8 コーディング規約
- PEP8:Pythonのスタイルガイド
- インデントはスペース4つ
- 79文字以下で折り返す
- 他の行にコメントを書く
- カンマの後ろはスペース
- クラス名は頭文字を大文字に
- 関数やメソッドは小文字の単語を_で繋ぐ
- エンコーディングはUTF-8(Pythonのデフォルト)かASCIIを使用
※5章以降は別途記載予定・・・
エンジニアファーストの会社 株式会社CRE-COエンジニアリングサービス