Open7
python

三項演算子的な書き方
# 他の言語にもあるシンプルなパターン
'odd' if x % 2 else 'even'
# 複数の条件を一行で
'positive' if x > 0 else 'negative' if x < 0 else 'zero'

rstrip
指定された末尾の文字を除去する。指定しない場合は空白が除去される。
" 123 ".rstrip()
# " 123"
"///123///".rstrip("/")
# "///123"

既存のリストからフィルタリングして新たなリストを作成 (1行で)
[n for n in numbers if n % 2 == 0]

main 関数の実行
python script.py
のように直接実行される場合、__name__
という変数に __main__
という値が代入される。スクリプトが module として import される場合、__name__
はそのスクリプトの名前になる。
以下のような書き方を良くする。
def main():
print("Hello, World!")
if __name__ == "__main__":
main()

relative import
python の relative import は実際のディレクトリ構造を読み取っているわけではなく、__name__
を元に行っている。
例えば
project/
├── __init__.py
├── scripts/
│ ├── __init__.py
│ └── sample_script.py
└── util/
├── __init__.py
└── logger.py
というディレクトリ構造で
# sample_script.py
from ..util.logger import Logger
みたいな import があった場合、python project/scripts/sample_script.py
みたいな実行の仕方だと、__name__
の値が __main__
になるため、名前から相対情報が読み取れない。そのため、relative import が失敗する。
しかし、sample_script.py がモジュールである場合は、__name__
が scripts.sample_script
となるため、..util.logger
は util.logger
と変換され、正常に import される。