鈴木たかのりほか『Pythonエンジニア ファーストブック』読書メモ①

Pythonエンジニア ファーストブック

Pythonエンジニア ファーストブック

鈴木たかのりほか『Pythonエンジニア ファーストブック』の読書メモ
一覧はこちら


第1章 Pythonの動向

Pythonの設計思想……バッテリー付属(必要な機能が標準ライブラリとして揃っている)、シンプルで読みやすいコード
・Python2系とPython3系には互換性がない
Python2系で書かれている既存のコードを改修する場合と、Python2系でしか動かないパッケージを使用する場合はPython2でいい
Python2のサポートは2020年で終了するため、それ以外の場合はPython3系を使う

第2章 最低限知っておきたいPython言語の基本
#関数の定義
def func_name (arg):
  print(arg)

func_name("Hello World") #Hello World

#キーワード引数
def print_func (msg="Keyword"):
  print(msg)

print_func() #Keyword
print_func("Hello World") #Hello World

#for文
for i in range(1, 101): #1から100までループ
    print(i) #1, 2, ... 100

#三重クォート
print("""Hello

World""")
#Hello
#
#World

#文字列の繰り返し
print("msg" * 5) #msgmsgmsgmsgmsg

#文字列からの取り出し
str = "python"
print(str[1]) #y
print(str[2:5]) #tho
print(str[-1]) #n

#文字列の有無の判定
print("t" in "python") #True
print("k" in "python") #False

#リスト内包表記
list = [str(i) for i in range(1, 11)]
print(list) #['1', '2', '3', '4', '5', '6', '7', '8', '9', '10']

#with文
with open("test.txt", encoding="utf-8") as f:
    test_str = f.read()

#インポート
import inpy #モジュール全体
from inpy import function #特定の関数のみ
import long_long_long_module_name as alies #asで別名をつけることができる

Pythonではブロック構造をインデントで表す
・キーワード引数……関数の引数にデフォルト値を指定できる
関数呼び出し時に引数を指定すればその値が、指定しなければデフォルト値が引数として使用される
・関数呼び出し時に引数名を指定すると、引数を指定する順序を無視できる
・for文はシーケンス型のオブジェクトを指定する
・三重クォートを使うことで、改行を含む文字列を一度に定義できる
・インデックスで負の数を指定すると、後ろから数えてくれる
・リスト内包表記……for文による繰り返し処理を、リストの定義時に使用できる
・タプル……イミュータブルなリスト
()を使用して定義する
・辞書(dict)……他言語で言うマップ
波括弧{}を使用して定義する
・集合(set)……順序を持たないリスト
波括弧で定義する
・ファイルをpythonで操作するとき、with文を使用するとファイルのオープンとクローズを自動でやってくれる
・インポートをすることで、別ファイル(モジュール)や別ファイルの特定の関数を使用できる
正規表現を使用するためには正規表現モジュール(re)を使用する必要がある

第3章 開発環境とチーム開発
#カレントディレクトリにvenv環境を作成
python -m venv envname

#有効化
envname\Scripts\activate.bat
#無効化
deactivate

#パッケージのインストール
(envname) pip install package_name
#unittestモジュール
#spam.pyに関数を作成
def spam():
    #spamを返却する
    return "ham"

#test.pyにテストコードを作成
import unittest
class Test(unittest.TestCase): #TestCaseクラスを継承するクラスを作成
    def test_spam(self): #test_で始まる関数を定義
        import spam
        value = spam.spam()
        self.assertEqual("spam", value)
#unittestで単体テスト
python -m unittest discover

#coverageで網羅率の測定
coverage run -m unittest discover #coverageからunittestを実行
coverage report #カバレージの測定結果を表示

#flake8で静的コード解析
flake8 python.py

・venv……プロジェクトごとにインストールするパッケージを切り替えることができる
・docstring……ファイル・クラス・関数などの説明
定義の次の行に三重クォートのコメントで記述する
・doctest……docstringに動作確認のコードを記述できる
・unittestモジュール……ユニットテストを記述する標準ライブラリ
・coverage……コードカバレージ(網羅率)を測定するパッケージ
Sphinx……ドキュメントを生成してくれる