Open8

Python Tips

ピン留めされたアイテム
aiskyaisky

Python3 を使う際に調べた小ネタをメモ

ピン留めされたアイテム
aiskyaisky

Python 命名規則

PEP8 で定められている。

対象 ルール
パッケージ 全小文字 なるべく短くアンダースコア非推奨 tqdm, requests ...
モジュール 全小文字 なるべく短くアンダースコア可 sys, os,...
クラス 最初大文字 + 大文字区切り MyFavoriteClass
例外 最初大文字 + 大文字区切り MyFuckingError
型変数 最初大文字 + 大文字区切り MyFavoriteType
メソッド 全小文字 + アンダースコア区切り my_favorite_method
関数 全小文字 + アンダースコア区切り my_favorite_funcion
変数 全小文字 + アンダースコア区切り my_favorite_instance
定数 全大文字 + アンダースコア区切り MY_FAVORITE_CONST
  • ファイル名 = モジュール名+.py ( or .pyw)
  • C/C++ のモジュールはアンダースコアで開始
  • 自クラス内でのみ使用する内部変数と内部メソッドはアンダースコアで開始
aiskyaisky

dict の使い方

for 文中での dict

  • dict.items() returns iterables of (key, value)
  • dict.keys() returns iterables of key
  • dict.values() return iterables of value

for 文で用いた場合 default で key が返されるが、confusing なので使わないようにする。

dict の並び替え

dict の並び替えには lambda 式を用いる

sorted(dict.items(), key=lambda x: x[0])  # key で並び替え
sorted(dict.items(), key=lambda x: x[1])  # value で並び替え

list から dict の作り方

2 つのリストから dict を作るには zip を用いる

dict(zip(key_list, value_list))

dict の初期化

dict の場合存在チェックが必要になるが、collections.defaultdict を使うと不要になる。

collections.defaultdict([type of value])
aiskyaisky

* の使い方

関数の呼び出し時に使われると、iterable を argument に変換する。

>>> fruits = ['orange', 'apple', 'pear', 'grapefruit']
>>> print(*fruits)
orange apple pear grapefruit

** の使い方

dict の key を用いて value を展開する。

>>> date_info = {'year': "2020", 'month': "01", 'day': "01"}
>>> print("{year}-{month}-{day}.txt".format(**date_info))
2020-01-01.txt
aiskyaisky

strlist からそれぞれの長さを計算する

map(collable, *iterable) を使う。

fruits = ['orange', 'apple', 'pear', 'grapefruit']
list(map(len, fruits))
# return [6, 5, 4, 10]
aiskyaisky

.pkl の作り方

python object を保存できる。

import pickle

# export
with open('sample.pkl', 'wb') as f
    pickle.dump(sample, f)

# import
with open('sample.pickle', mode='rb') as f:
    sample = pickle.load(f)
aiskyaisky

自作モジュールの使用方法

以下の module があるときを考える。

some_module.py
def some_func():
    ....

同じディレクトリにあるとき

main.py
import some_module

some_module.some_func()

違うディレクトリにあるとき

root
|-- module
|    |-- some_module.py
|-- main.py
main.py
from module import some_module

some_module.some_func()
aiskyaisky

モジュールの更新方法

Jupyter などを使っている場合、モジュールを編集などして更新した際はモジュールを読み込み直さないと更新が反映されない (単に再度 import を実行するだけではダメ)。
従って、以下を実行すること。

import importlib
importlib.reload([module name])