日記20171217

今日は、朝起きたら、パリパリの日だった。
パッキパキで、目の奥が痛くなるような青い空が、小さな窓を一色にしていた。
鉛の液体が脳、首、肩に詰まっていた。
急激な気圧の上昇による症状だと直感した。
いや、それは言い訳かもしれない。
週末の仕事の悩みが、次の日が月曜だという日曜の朝、鬱となって吹き出したのだろう。

数学の本を読み、ノートに計算を書いても、落ち着かなかった。
整域を同値類に分けて、体にすることができる。素イデアルによる剰余環は、整域であり、体ではない。
体にするには、極大イデアルが必要だ。しかし、整域という条件さえあれば、体は作れるのだな、
と考え、字を書いても、焦燥感が増すばかり。

確かなこと、価値ある事実がつかめていない気がする。
こんなときは、外に出て散歩をするに限る。
スーパーの地下にある1000円カットへ、散髪に行った。
「髪はすきますか?」
「はい。」
ハゲが丸見えになったので、失敗したなと思った。

コンビニでスパゲッティを買い、テレビ「ザ・ノンフィクション」を見ながら食べた。
そんな冬の一日だった。

Python3.6.3チュートリアル写経20171122

最近、寒いですね。

Pythonをかじっていて、お仕事で少し役立ったのは、リスト内包表記です。

テストケースを入力の組み合わせに応じて、作成するときに使えました。

for文でやっても同じですが、ネストが深くなります。

また、リスト内包表記の方が速い?

今日は、9.8. イテレータ~10.5. 文字列のパターンマッチング をやりました。

うーん、この辺は、やはり、何か具体的なプログラムを作りながら身につけるべきだと思います。

ちょっと、だれてきましたが、メモ。

  • イテレータを簡単に自作できるようにしたものがジェネレータ
  • ジェネレータのキーワードはyield
  • ジェネレータってschemeなどの「継続」と関係がある?
  • ジェネレータ式というのはリスト内包表記のメモリに優しい版で、丸括弧を使うところだけ違う

Python3.6.3チュートリアル写経20171119

9.3.1. クラス定義の構文~9.7. 残りのはしばし までやった。

  • classのコンストラクタは、__init__(self, arg1, arg2, ...)と書く
  • コンストラクタやメソッドの第一引数はselfと書く慣習
  • x.f() という呼び出しは、 MyClass.f(x) と厳密に等価
  • Pythonではクラスのメンバはすべてpublic
  • MyClass(MyBaseClass): のように括弧内に基底クラスを書くことによって継承を行う
  • クラス変数に、ミュータブルなオブジェクト(リスト、辞書など)を使用してはならない
  • メンバ変数とメンバメソッドは同じ名前のものを書くことができない。上書きされてしまう。
  • クラスを調べる組み込み関数 isinstance(obj, type) と継承関係を調べる組み込み関数 issubclass(MyClass, MyBaseClass) がある

Python3.6.3チュートリアル写経20171118

8.1. 構文エラー~9.2. Pythonのスコープと名前空間 をやった。

  • 例外のcatchはtry, exceptでやる。else節に例外が発生しなかったときの処理が書け、finally節にクリーンアップ処理を書く。
  • except ValueError: などのように、例外のクラスを指定できる。
  • except Exception as err: のようにすると、err.argsがExceptionのコンストラクタに指定した引数であり、その引数にアクセスできる
  • ユーザ定義例外を作るには、Exceptionクラスを継承したクラスを書けばよい
  • 関数内で関数が定義できる
  • 変数宣言に変数のスコープを表すキーワード nonlocal, globalが書ける
  • nonlocal指定の変数は最内スコープの1つ外側の変数を表す
  • global指定の変数はモジュールのスコープの変数を表す

Python3.6.3チュートリアル写経20171116

6.1.2. モジュール検索パス~7.2.2. jsonによる構造化されたデータの保存 をやった。

  • パッケージはディレクトリ、モジュールは.pyファイル
  • パッケージのディレクトリには、__init__.pyを置く(空でもよい)
  • ファイル入出力のモードには以下がある

"r", "rb", "r+", "rb+", "w", "wb", "w+", "wb+", "a", "ab","a+", "ab+"

f = open('test.txt', 'r')
for line in f:
    print(line, end=' ')
f.close()

Python3.6.3チュートリアル写経20171113

5.5. 辞書型~6.1.1. モジュールをスクリプトとして実行する をやった。 以下メモ。

  • 辞書のキーにできるのは、イミュータブルな型だけ。すなわち、文字列、数値、タプル。
  • dict(ペアのリスト) (ペアのリスト->辞書)の逆は my_dict.items() (辞書->ペアのリスト)
  • キーのリスト: list(my_dict.keys())
  • 値のリスト: list(my_dict.values())
In [1]: fruits = {'apple': 3, 'banana': 2, 'peach': 4}

In [2]: for k, v in fruits.items():
   ...:     print(k, v)
   ...:     
apple 3
banana 2
peach 4
  • シーケンスの生成の仕方

    • ソートされたシーケンス: sorted(シーケンス型)
    • 逆順にしたシーケンス: reversed(シーケンス型)
    • インデックス(0-origin)とのペアにされたシーケンス: enumerate(シーケンス型)
    • タプルにされたシーケンス: zip(シーケンス型, シーケンス型, ...)
    • 型変換: list(シーケンス型), set(シーケンス型), tuple(シーケンス型)
  • 論理演算子は、not, or, and

  • モジュールは、モジュール名.py というファイルに、関数を定義することで作成する
  • モジュールのインポートの仕方、「import モジュール名」と「from モジュール名 import シンボル名」
  • 前者は、インポート先のシンボルテーブルにモジュール名しか入らないため、モジュール名.関数名 で関数を参照する
  • 後者は、インポート先のシンボルテーブルにimportの後ろのシンボルが入るため、シンボルをモジュール名無しで参照できる。「import モジュール名 *」という書き方は可読性を低くするので非推奨
  • モジュールの最後にスクリプトとして実行するプログラムが書ける(実行コマンド: $ python fib.py 50)
def fib(n):
    """Write Fibonacci series up to n."""
    a, b = 0, 1
    while b < n:
        print(b, end=' ')
        a, b = b, a+b
    print()

def fib2(n):
    """Return Fibonacci series up to n."""
    result = []
    a, b = 0, 1
    while b < n:
        result.append(b)
        a, b = b, a+b
    return result

if __name__ == "__main__":
    import sys
    fib(int(sys.argv[1]))

Python3.6.3チュートリアル写経20171112

5.1.4. ネストしたリストの内包表記~5.4 集合型 をやった。 以下メモ。

  • ネストしたリストの内包表記を書くことができるが読みづらいので、zip関数を使った方がいい
In [1]: matrix = [
   ...:     [1, 2, 3, 4],
   ...:     [5, 6, 7, 8],
   ...:     [9, 10, 11, 12],
   ...: ]

In [3]: [[row[i] for row in matrix] for i in range(4)]
Out[3]: [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

In [7]: list(zip(*matrix))
Out[7]: [(1, 5, 9), (2, 6, 10), (3, 7, 11), (4, 8, 12)]

In [12]: [list(elm) for elm in list(zip(*matrix))]
Out[12]: [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]
  • シーケンス型には、list, tuple, rangeがある
  • シーケンス型と似たものに、テキストシーケンス型、バイナリシーケンス型がある
  • タプルはイミュータブル(そのため、タプルの要素への代入ができない)
  • 集合型というものがある(差集合: -, 和集合: |, 共通部分: &, EXOR: ^)