読者です 読者をやめる 読者になる 読者になる

入門Python3 を読む~Python3の基礎まとめ~後編

Python

nnpo.hatenablog.com

後編です。

本の返却期限が迫っているので、気になったところだけ書きます。


7章 プロのようにデータを操る

Unicode

Unicode HOWTO — Python 3.5.2 ドキュメント

・書式指定

n = 42
f = 7.03
s = 'string cheese'

'{} {} {}'.format(n, f, s)

'42 7.03 string cheese'

'{2} {0} {1}'.format(n, f, s)

'string cheese 42 7.03'

d = {'n':42, 'f':7.03, 's':'string cheese'}
'{0[n]} {0[f]} {0[s]} {1}'.format(d, 'other')

'42 7.03 string cheese other'

詳しくはここが参考になった

Python3での文字列フォーマットまとめ 旧型で生きるか、新型で生きるか - Qiita

正規表現とのマッチング

正規表現は、標準モジュールであるreが提供している。

特殊文字に関しては公式ドキュメントが分かりやすかった。

6.2. re — 正規表現操作 — Python 3.5.2 ドキュメント

re.match(pattern, source)

sourceの先頭がパターンに一致しているか

re.search(pattern, source)

sourceにパターンが含まれているか

match() と search() はマッチオブジェクトを返します。

6.2. re — 正規表現操作 — Python 3.5.2 ドキュメント

re.findall(pattern, source)

matchとsearchは1つマッチが見つかったらそこで処理を終えていたが、findallはすべてのマッチをリストで返す。

import re
source = 'Young Frankenstein'
m = re.findall('n', source)
m

['n', 'n', 'n', 'n']

print(len(m))

4

もちろん、特殊文字でパターンを指定できる。

m = re.findall('n.', source)
m

['ng', 'nk', 'ns']

m = re.findall('n.?', source)
m

['ng', 'nk', 'ns', 'n']

re.split(pattern, source)

パターンで文字列を分解し、部分文字列のリストを返す

import re
source = 'Young Frankenstein'
m = re.split('n', source)
m

['You', 'g Fra', 'ke', 'stei', '']

sub(pattern, source)

マッチした部分を置換を行い、文字列を返す

import re
source = 'Young Frankenstein'
m = re.sub('n', '?', source)
m

'You?g Fra?ke?stei?'

・structによるバイナリデータの変換

本での説明は分かりづらいので、以下参照。今までもお世話になったモジュールです。

7.1. struct — バイト列をパックされたバイナリデータとして解釈する — Python 3.5.2 ドキュメント


8章 データの行き先

9章 ウェブを解きほぐす

10章 システム

ここにまとめるよりも、必要となったときに本を参照した方が良いと思ったので飛ばします。


 11章 並行処理とネットワーク

この章は難しかったので、個別で勉強記事をつくるかもです。

こういうのは使いながら覚えていったほうが良いですね。

ネットワーク関連に関しては省略した(こちらも個別記事をつくるかも)。

・プロセス

17.2. multiprocessing — プロセスベースの並列処理 — Python 3.5.2 ドキュメント

・スレッド

17.1. threading — スレッドベースの並列処理 — Python 3.5.2 ドキュメント

スレッドは、I/O(Input/Output)バウンド問題の解決のために使う。

CPUバウンド問題は、プロセス、ネットワーキング、イベントを使う。

・gevent

本にはpython3には移植されていないとありますが、

Gevent runs on Python >= 2.6, Python >= 3.3, or PyPy >= 4.0.1 (but not PyPy3) (Note: PyPy is not supported in Windows). On all platforms, installing setuptools is recommended (this is done automatically if working in a virtual environment).

引用元: https://pypi.python.org/pypi/gevent

とあるのでpython3でも使えそうですね。

What is gevent? — gevent 1.2.0.dev0 documentation

Gevent チュートリアル

・twisted

非同期のイベント駆動型ネットワーキングフレームワーク

こちらも本ではpython3には移植されていないとありますが、インストール出来ますね。

Documentation – Twisted

Twisted 入門 — Twisted Intro

・asyncio

18.5. asyncio – 非同期 I/O、イベントループ、コルーチンおよびタスク — Python 3.5.2 ドキュメント

 12章 パイソニスタになろう

なりたいですね。

・unittest

import unittest

class TestCap(unittest.TestCase):
    
    #テストメソッドの前に呼び出される
    def setUp(self):
        pass
    
    #テストメソッドの後に呼び出される
    def tearDown(self):
        pass
    
    def test_one(self):
        '''テスト内容を書く'''
        pass
        
    def test_two(self):
        '''テスト内容を書く'''
        pass
    
if __name__ == '__main__':
    unittest.main()

26.4. unittest — ユニットテストフレームワーク — Python 3.5.2 ドキュメント

pdbによるデバッグ

27.3. pdb — Python デバッガー — Python 3.5.2 ドキュメント

・エラーメッセージのロギング

16.6. logging — Python 用ロギング機能 — Python 3.5.2 ドキュメント

Logging HOWTO — Python 3.5.2 ドキュメント


後半はかなり端折ってしまったので、ブログにあげるか悩みましたが、あとで自分で調べやすくするために公開しておきます