kb84tkhrのブログ

何を書こうか考え中です あ、あと組織とは関係ないってやつです 個人的なやつ

HFP2: その他

残りもざざっと読んだけど時間切れで返却

ファイル

f = open(<ファイル名>, <モード>)でファイルをオープン
r:読み込み、w:書き込み、a:追加、x:新規
print(~, file=f)またはf.write()で書き込み
f.read()で全体を読み込む
f.readlines()で(1行ずつのリストとして)全体を読み込む
for line in f:で1行ずつ読み込む
f.close()でファイルのクローズ
with open() as f:で自動的にクローズ

関数

関数宣言の引数に*argsと書くと可変長の引数をタプルで受け取れる
関数宣言の引数に**kwargsと書くとキーワード引数を辞書で受け取れる
関数呼び出しで引数に*を付けるとリストが位置引数に展開される
関数呼び出しで引数に**をつけると辞書がキーワード引数に展開される
両方使うとあらゆる型の引数を幾つでも受け取る関数を宣言したり呼び出したりすることができる

例外

いろいろとりまぜてこんな感じ

class MyError(Exception):
    pass

try:
    ...
    if something.occurred():
        raise MyError("Something occurred")
    ...
except MyError as err:
    print(err)
else:
    print("Nothing occurred")

コンテキストマネージャ

コンテキストマネージャでの例外処理
__enter__内で例外が発生したらwith内のコードは実行されない
with内で発生した例外は__exit__で補足する
こんな感じらしい

class MyContextManager:
    def __enter__(self):
        self.target = ...
        return self.target
    def __exit__(self, exc_type, exc_value, exc_trace):
        self.target.close() # とか
        if exc_type is SomeError:
            print(exc_value)
        elif exc_type:
            raise exc_type(exc_value)

なお今は@contextmanagerデコレータで書くほうがいいらしい

デコレータ

実際の処理とは関係ないコードはデコレータに分離することを考える
デコレータ内のwrapper関数を@wraps(func)でデコレートする
ひな型

from functools import wraps

def my_decorator
    @wraps(func)
    def wrapper(*args, **kwargs):
        ...
        return func(*args, **kwargs)
return wrapper

Flask/Jinja2

escape()でHTMLエスケープ Markupオブジェクトを返す
{% for ~ in ~ } ~ {% endfor %}で要素の繰り返し

sessionは辞書
こんな感じで使うっぽい

from flask import Flask, session

app.secret_key = '...'

@app.route('/setuser/<user>')
def setuser(user: str) -> str:
    session['user'] = user

試してなくてよくわかってない

スレッド

読んでない

内包表記・ジェネレータ

読んでない​

まだ入門レベルのカバー率に不満がある
Flaskももうちょっと勉強してみたいな

Humble Book Bundleで勝った本の中にもPythonの入門書とか
Flaskの本があったから読む?
いやこことはいちどPPP3に戻ろう