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

2021-04-17に作成

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

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

19日目

1. appdirs

appdirs
モジュールの適切なディレクトリを提示してくれる?

2. mkdocs.yml

doc
MkDocs 使ってみた。
簡単にWebサイトを作ることができる。ymlはその設定ファイル。
pythonで作られてる。
EC2やGitHub Project page にも構築できるみたい

3. setup.py

setup.pyを書いてpipでインストール可能にしよう
Python でパッケージを開発して配布する標準的な方法
pip installできるようにするもの

■次はテスト!

18日目

1. urllib.parse

doc

このモジュールでは URL (Uniform Resource Locator) 文字列をその構成要素 (アドレススキーム、ネットワーク上の位置、パスその他) に分解したり、構成要素を URL に組みなおしたり、 "相対 URL (relative URL)" を指定した "基底 URL (base URL)" に基づいて絶対 URL に変換するための標準的なインタフェースを定義しています。

quote

doc

URL 構成要素として使用できるよう特殊文字をクオートしたり非 ASCII 文字を適切にエンコードする

URLを使いやすい感じに整えてくれるってことかな

2. input

Pythonのinput関数でキーボードからの入力を取得
input()で入力待ちの状態になる。
入力値は変数に格納できる。str型で取得。

17日目

1. os.urandom

doc
ランダムな文字列を生成する

2. sys.version

doc
pythonインタプリタのバージョン番号、ビルド番号などを表示する

3. int.from_bytes

doc
与えられたバイト列の整数表現を返す

4. urllib.request.getproxies

doc
プロキシ情報を取得

16日目

1. pygments

公式doc
Pygments 利用ノート

It is a generic syntax highlighter suitable for use in code hosting, forums, wikis or other applications that need to prettify source code.

15日目

1. pyquery

PyQueryによるWebスクレイピング -クイックスタート-
【初心者向け】Pythonで初めてのスクレイピング
公式doc

2. requestsのsessionモード

RequestsでSessionモード

ログインを必要とするWebサイトの情報をRequestsを用いて取得しようとする際、その都度GETやPOSTでアクセスするとセッションが途切れてしまい毎回ログイン処理をしないといけません。
これを回避するためにRequestsはSessionモードをサポートしています。

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より)