- 作者: Bill Lubanovic,斎藤康毅,長尾高弘
- 出版社/メーカー: オライリージャパン
- 発売日: 2015/12/01
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (3件) を見る
目次
はじめに
いつも忘れて、ググったり、
長い間上手く使えていなかった
Pythonのデフォルト機能をメモとしてまとめておきます。
これらの機能は主に下記の資料を元に勉強しました。
- 作者: Bill Lubanovic,斎藤康毅,長尾高弘
- 出版社/メーカー: オライリージャパン
- 発売日: 2015/12/01
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (3件) を見る
printの表示フォーマット
print文の表示ををフォーマットするには、
いくつか方法がありますが、
Cのprintfに似た下記の方法が便利です。
print("1: %s, 2: %f" % (name, points)) print("1: %-10s, 2: %10.2f" % (name, points)) # 表示幅, 桁数指定
%sは文字列、 %fは小数, %dは整数です。
左揃えにする場合は、桁数の左に-(マイナス)を置きます。
クラス変数
あるクラスにおいて、
そのインスタンス全体で共有したい変数がある場合、
クラス変数という機能が使えます。
(例えば、そのクラスのインスタンスの数など)
クラス変数はクラスの関数と同じインデントで宣言すると、
クラス変数になります(selfは不要)
class Hoge(object): FOO = int() # クラス変数 def __init__(self): self.FOO = int() #インスタンス変数 def get_foo(self): return self.FOO #アクセス print(Hoge.FOO)
アクセスしたい場合は、クラス.変数名とすればOK
パッケージの下のモジュールのインポート
ディレクトリ内(パッケージ内)にある
モジュールをimportした場合、
そのモジュールを使う場合は、
パッケージ名から指定する必要があります。
import pack.mod1 print(pack.mod1.hoge()) #OK #print(mod1.hoge()) # NG
集合型(Set)の使い方
順序がなく、
また重複を許さないデータセットを作りたい場合、
集合型(Set)を使うと便利です。
下記が基本的な使い方になります。
a = set([5, 4, 8, 5]) # or a = {5, 3, 8, 5} print(a) print(5 in a) # 要素検索 a.add(2) # 追加 a.remove(3) # 削除 print(len(a)) # サイズを計算
ジェネレータ
ある一つ前のデータを使う処理を関数化して、
その関数をループ毎に利用したい場合、
(遅延評価関数ともいうみたいです)
大抵、前のデータを保持して関数を呼ぶか、
事前にリストなどで結果をストアして利用するか、
だと思いますが、
2つ目の方法だと、実際にいくつデータを使うかわからない場合は、
事前にどれだけ計算を保持しておけばいいかわからないですし、
一つ目の方法だと少しコードが複雑になります。
そんな時は、yield文を使った、
ジェネレータという機能を使うとコードがスッキリする時があります。
def get_infinite(): # ジェネレータ i = 0 while True: yield i * 2 i += 1 g = get_infinite() print(next(g)) print(next(g)) print(next(g))
上記のようにyield文で値を返す関数を作って、
その関数のオブジェクトをnextで呼ぶと、
前の値を保持した状態で
nextが呼ばれるタイミングで一つづつ計算する
関数を作ることができます。
大抵、上記のようなコードを実装する場合は、
クラスを使って前のデータを保持するインスタンスを作ることが多いですが、
シンプルなものであれば、ジェネレータで実装するとシンプルになります。
リスト内包表記でfilter
リスト内包表記でmapはよく使うのですが、
filter(ある条件下のデータのみを抽出したい)をしたい場合は
forの後にif文を追加します。
# 0-9で偶数を3倍したリストを取得する print([i * 3 for i in range(10) if i % 2 == 0])
参考資料
- 作者: Bill Lubanovic,斎藤康毅,長尾高弘
- 出版社/メーカー: オライリージャパン
- 発売日: 2015/12/01
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (3件) を見る