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に戻ろう