ゴイサギ日記

東京でエンジニアとして頑張って何とか生きてます。。ゆる~く更新していきます

【Python】備忘録

自分用メモ

リスト内包表記

リスト内包表記が便利なのか面倒なのか良く分からないので取りあえずメモ

コード

# if
list = [n for n in range( 10 ) if n % 2 == 0]
print u'\nif'
print list

# if-else
list = [i if (i % 2 == 0) else str(i) for i in range(10)]
print u'\nif-else'
print list

# loop:zip
print u'\nloop:zip'
list1 = [1,2,3]
list2 = [4,5,6]
for (a, b) in zip( list1, list2 ):
    print a,b

# loop:enumerate
print u'\nloop:enumerate'
list1 = ['a','b','c']
for (i, x) in enumerate( list1 ):
    print i,x

結果

if
[0, 2, 4, 6, 8]

if-else
[0, '1', 2, '3', 4, '5', 6, '7', 8, '9']

loop:zip
1 4
2 5
3 6

loop:enumerate
0 a
1 b
2 c

その他
リスト内包表記によるリスト作成はappendメソッドを呼ばないので
append呼び出しによるリスト作成に比べて実行速度が速い

list = [ i for i tmpList if is_valid_file( i ) ]

クラス

# HogeObjectクラス.
class HogeObject:

    def __init__(self):
        print('コンストラクタやで')
        self.num = 10

    def __del__(self):
        print('デストラクタやで')

    def func()
        print('numは{}やで' . format(self.num))
    
obj = HogeObject() # インスタンス生成.
obj.func() # 「numは10やで」表示.
del obj # インスタンス破棄.

空のクラスを定義する場合は pass を使う

class EmptyClass:
    pass

多値返却

関数の戻り値を複数にすることができる

status, data = hoge_func()
print status
print data
# False
# 15

def hoge_func():
    sum = 5 + 10
    return (True, sum);

辞書で返す事もできる、値が多くなってきたら便利そう

result = hoge_dict()
print result[ 'flag' ]
print result[ 'sum' ]
# True
# 15

def hoge_dict():
   sum = 5 + 10
   return {'flag':True, 'sum':sum }

*args,**kwargs について

関数の引数に指定したリストや辞書を分解して渡すことができる

def hoge_func( a = 0, b = 0, c = 1 )
    return a + b + c

args = [1, 2, 3]
kwargs = {'a':5, 'b':6, 'c':7}

print "none:", hoge_func()
print "*args:", hoge_func(*args)
print "**kwargs:", hoge_func(**kwargs)

# none:1
# *args:6
# **kwargs:18

その他

・tim.clock() はプロセッサのクロックタイムを返す、ベンチマークとかに使う