Python 小技メモ

main() 関数

Python コードで以下のように main() という関数を定義してその中に処理を書き、最後に実行する書き方。 回りくどく見えるがいくつかメリットがある。

  • 処理全体の流れを把握しやすい。
  • 関数の定義を後ろに書ける。
  • 意図しない変数の衝突を回避する。
def main():
    # 何らかの処理

if __name__ == "__main__":
    main()

最後の if のブロックは何?

if __name__ == "__main__": の記述は、 このスクリプト自体が Python スクリプトとして実行された場合 (python3 hoge.py という形で実行された場合) に以降の処理を実行することを意味している。

例えば、モジュールとしてほかのスクリプトから読み込まれた場合は 勝手に実行されると困るのでそれを防いでいる。

不定個の引数をとる関数の定義

引数に *** をつける。 1つだとタプル、2つだと辞書に格納される。 慣例的に *args, **kwargs が使われている。

def sum_some_numbers(*args):
  return sum(args)

print(sum_some_numbers(1,2,3,4))
# 10
def en2ja(**kwargs):
  for k,v in kwargs.items():
    print(k, "means", v)

en2ja(cat="neko", dog="inu", mouse="nezumi")
# cat means neko
# dog means inu
# mouse means nezumi

いつも忘れるlistのソート

  • sort() はメソッド、破壊的
  • sorted() は関数、非破壊的

sort() は元のリストそのものを並び替える:

>>> l = [3, 4, 1, 5, 2]
>>> l.sort(reversed = False)
>>> l
[1, 2, 3, 4, 5]

sorted() は元のリストはそのままで、要素を並び替えた新しいリストを返す:

>>> l = [3, 4, 1, 5, 2]
>>> ll = sorted(l, reverse = False)
>>> ll
[1, 2, 3, 4, 5]
>>> l
[3, 4, 1, 5, 2]

文字数や絶対値でソート

>>> l = ["ccc", "c", "cc"]
>>> l.sort(key = len)
>>> l
['c', 'cc', 'ccc']

>>> l = [3, -4, 1, 5, -2]
>>> sorted(l)
[-4, -2, 1, 3, 5]
>>> sorted(l, key = abs)
[1, -2, 3, -4, 5]

辞書型 — KeyError への対処

通常、辞書型で存在しないキーを検索するとエラーが返ってくる:

>>> dict = {"one":1, "two":2, "three":3}
>>> print(dict["four"])
KeyError: 'four'

辞書型を使っていると、存在しないキーを指定した時も柔軟にやってほしいと思うことがよくある。 そこで get() メソッド:

>>> dict = {"one":1, "two":2, "three":3}
>>> print(dict.get("four"))
None

dict.get(key) で存在しないキーを引数にすると None が返ってくる。 さらに偉いのは、返ってくる値を第二引数に指定できる。

>>> dict = {"one":1, "two":2, "three":3}
>>> print(dict.get("four", "No such a key"))
No such a key

pdf2pptx — PDF から PowerPoint スライドへの簡易変換

PDF をページごとにパワーポイントのスライドに貼り付けて使いたい、という単純な操作が、 既存の方法だとページごとにスクショして貼る、という原始的な方法くらいしかなかった。

pdf2pptxpdf2pptx input という単純なコマンドで PDF の各ページを PNG イメージとしてパワポに貼り付ける。

python3 -m pip install pdf2pptx
pdf2pptx --help
pdf2pptx hoge.pdf
-o, --output
出力ファイルの指定。デフォルトは入力ファイルの拡張子 .pptx
-r, --resolution
1inch あたりのドット数で解像度を指定。 デフォルトは300だが150とかでも十分可読でファイルサイズも抑えられる。
-q, --quiet
ログの非表示
--from
PDF の何ページ目からパワポに変換するか。
--count
PDF の何ページ分パワポに変換するか。