お手本プロジェクト書き写し記録

2021-04-17に作成

勉強メモです。
howdoiというpythonのプロジェクトを書き写しています。

所有者限定モードのためこのボードには投稿できません ボードとは?

14日目

1. pool.starmap

doc
starmapでPythonでの並列処理の結果をリストで受け取る
starmapは並列処理に複数の引数を渡して結果をリストで受け取るらしい

2. pyquery

pyquery PyPI

13日目

1. multiprocess

前回のコードだとたまにサブプロセスで実行されることがある、くらいだったのでsleepを入れてみた

from multiprocessing import Pool
import os
import time


def return_id(*args):
    time.sleep(2)
    return os.getpid()


if __name__ == "__main__":

    with Pool(processes=4) as pool:
        print(pool.map(return_id, range(4)))

結果

[10644, 10646, 10645, 10647]

12日目

1. Pool

マルチプロセスにならない。。。

from multiprocessing import Pool
import os


def return_id(*args):
    return os.getpid()


if __name__ == "__main__":

    with Pool(processes=4) as pool:
        print(pool.map(return_id, range(4)))
        multiple_results = [pool.apply_async(os.getpid, ()) for i in range(5)]
        results = [res.get(timeout=1) for res in multiple_results]
        print(results)

■ 謎

11日目

1. 並列処理

並行処理、並列処理のあれこれ
【Python】マルチプロセスについて
マルチプロセスな処理を実装して、処理を高速化する

- 並列処理:別のプロセスで複数の処理を同時にやる(重い処理向き)
- 平行処理:同じプロセスで複数の処理を同時にやる(待機が多い処理向き)

Poolを使うとプロセス数の指定ができる

10日目

1. keep

keep - PyPI
utils
Your personal shell command keeper

## 2. for文の変数名
for文内で変数を使わない場合はアンダーバーを使うといい
for _, val in some_dict.items(): print(val) # keyは使わない

■ 関数が多くて迷子になり始めた。。。

9日目

1. ターミナルの出力結果に色をつける

[python]print文で色をつけてみよう
変数(定数)にしておくのが普通らしい。

2. 環境変数の操作

Pythonで環境変数を取得・追加・上書き・削除(os.environ)
os.environ['some_key'] = some_valで環境変数を設定できる
※システムの環境変数が変わるわけではない

3. inspect

doc
inspect.currentframe - 呼び出し元のフレームオブジェクトを返す(??)
doc
inspect.getouterframes - よくわからないけど実行中のオブジェクトの情報らしきものを返してくれるみたい

4. any

Pythonの組み込み関数all(), any()の使い方
any - イテラブルオブジェクトの要素が1つでもTrueであるかどうかを返す

5. map関数とlambda関数

Pythonにおけるlambda()とmap()について現役エンジニアが解説
map関数はイテラブルオブジェクトの各要素に対して同じ処理を行う
lambda関数は「lambda 引数: 返り値」の形で使う

■ anyとmap関数便利だー

8日目

1. cachelib.NullCache

cachelibはpythonのライブラリ
github/pallets/cachelib

2. ArgumentParser.parse_args

parse_argsの引数にコマンドライン引数を渡せるみたい
doc

3. AssertionError

assertはテストだけで使うものではなかった
デバッグ支援のために使える
Pythonで本当に役立つ機能「アサーション」の使い方を解説!『Pythonトリック』から

■ vscodeのデバッグ機能を少しだけ使った

7日目

1. call関数

python:callメソッドの基礎
インスタンスを関数のように使ったときに呼ばれる。

2. 例外処理

Python の例外を別の例外として投げるときの話
組み込み例外
例外をキャッチして別の例外としてraiseする時はfromを使う。

except OriginalError as oe:
    raise AnotherError from oe

スタックトレースが見やすくなるっていうメリットかなあ

■ クラスの中に自作例外を関数として書いて、raiseで呼び出すのは可読性高くて良いかも

6日目

1. ArgumentParserの引数

doc
epilogはヘルプ表示で追加説明ができる。
doc
formatter_classはヘルプ出力をカスタマイズできる。
RawTextHelpFormatterは空白を維持する。

2. textwrap

Pythonで文字列を折り返し・切り詰めして整形するtextwrap
textwrap.dedent
text の各行に対し、共通して現れる先頭の空白を削除します。

この関数は通常、三重引用符で囲われた文字列をスクリーン/その他の左端にそろえ、なおかつソースコード中ではインデントされた形式を損なわないようにするために使われます。

3. ArgumentParser.add_argumentの引数

doc
metavar - 使用法メッセージ(ヘルプ)の中で使われる引数の名前。
doc
nargs - 受け取るべきコマンドライン引数の数。
doc
dest - parse_args() が返すオブジェクトに追加される属性名。
doc
action - コマンドラインにこの引数があったときの基本のアクション。

■ ヘルプ関係の便利関数!

5日目

1. グローバル変数

Pythonでのグローバル(global)変数の宣言方法
キーワードglobalでグローバル変数になる

2. プライベート関数

Python命名規則(PEP8より)

3日目

1. ArgumentParserライブラリ

doc
ArgumentParserの使い方を簡単にまとめた
コマンドライン引数を取りたいときに便利なライブラリ。
parse_args()は引数を解析する(そのまんま)

2. init.pyの使い方

versionという変数をinit.pyに書いている
→モジュールを配布するときにバージョンを示すため。
よくあるパターンだけどアンチパターンでもあるみたい。
versionの罠とベストプラクティス

■ ヘルプコマンドとかはArgumentParserを使って作れるんだな

2日目

1. if name == 'main'の意味

Pythonのif name == 'main'の意味と使い方
ファイルがコマンドラインから実行された場合にのみ、以降の処理を実行する。
このモジュールをコマンドとして利用することができる。

2. vars関数

【中級者への道】Pythonの組み込み関数varsを活用する
引数に渡されたオブジェクトのdic属性を返す。
dic属性はオブジェクトに設定されているプロパティの名前と値が格納されている。

■ 呪文の意味が解読できた

初日

1. まずhowdoi/howdoi.pyから解読

手を動かして理解するshebang
shebang(シェバン)は実行時のインタプリタを指定するもの。

2. README書き写し

Vscodeのautopep8エラーを解消しようとしたら$brew updateとかいろいろ時間がかかったのでREADMEの書き写しから!

■ だいたいの機能がわかった!