python使用提案とテクニックを共有する(一)


これは一連の文章で、主にpythonの使用提案と技巧を共有して、毎回3点を共有して、収穫があることを望みます。
1どのように長さを指定し、特定の値を持つリストを作成しますか?
おすすめしない方法

list1 = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
print list1
# [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
おすすめの方法

list1 = [0] * 10
print list1
# [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
実は、前の方式は見ただけではDRY(Don't Repeat Yourself)の原則に合わず、もう少し考えればもっと優雅なやり方があることが分かります。元組なら?[0]を(0)に変更すればいいです。0の後のコンマを忘れないでください。なお、ここでは数字だけではなく、任意のオブジェクトから構成されるリストまたはtupleでも良い。たとえば:

class User(object):
pass


user_list = [User()] * 10
2文字列の接続方法
おすすめしない方法

def plus_str():
str_list = ['1'] * 10000
long_str = ''
for str in str_list:
long_str = long_str + str
return long_str
おすすめの方法

def join_str():
str_list = ['1'] * 10000
return ''.join(str_list)
プラス記号で文字列を接続すると、効率的に文字列のコピーやメモリの割り当てが頻繁に行われるので、時間がかかります。しかし、join方式で文字列を接続すると、一回のメモリを割り当てるだけで、接続するすべての文字列をメモリ空間にコピーすることができ、より効率的です。私のパソコンでは、2つの関数の消耗をテストします。10000回実行すると、前者は約24倍かかります。コードは以下の通りです。

print timeit(stmt="plus_str()",
setup="from __main__ import plus_str",
number=10000)

//   :42.7354210396

print timeit(stmt="join_str()",
setup="from __main__ import join_str",
number=10000)

//   : 1.78316799643
3辞書の結合方法
おすすめしない方法

dict1 = {'a': 1, 'b': 2, 'c': 3}
dict2 = {'a': 4, 'b': 5, 'g': 6}
dict1.update(dict2)
merged_dict = dict1
print merged_dict
# {'a': 4, 'c': 3, 'b': 5, 'g': 6}
おすすめの方法

dict1 = {'a': 1, 'b': 2, 'c': 3}
dict2 = {'d': 4, 'f': 5, 'g': 6}
merged_dict = dict(dict1, **dict2)
print merged_dict
# {'a': 1, 'c': 3, 'b': 2, 'd': 4, 'g': 6, 'f': 5}
前の方法はソース辞書dict 1を修正します。副作用があります。ソース辞書を気にしないなら、前の方法はもっと簡潔です。後の方法はソース辞書を修正しません。副作用がありません。重複するkey値がある場合は、右から左への順番で上書きします。例えば、

dict1 = {'a': 1, 'b': 2, 'c': 3}
dict2 = {'a': 4, 'b': 5, 'g': 6}
merged_dict = dict(dict1, **dict2)
print merged_dict
# {'a': 4, 'c': 3, 'b': 5, 'g': 6}
右パラメータdict 2のkey値を用いてdict 1のkey値を上書きします。ビルド関数dictにより、2つの辞書をパラメータとしてこの関数に伝達し、新しい辞書を作成します。特に指摘したいのは、第二のパラメータdict 2は、2つの星番号を追加する必要があります。ここでは、このパラメータは有名なパラメータであり、タイプは辞書です。dict関数が辞書を作成すると、複数のパラメータが受け入れられますので、これはpython関数が可変パラメータをサポートする規定のフォーマットです。
以上はpythonを使って提案と技巧を使って(一)の詳しい内容を分かち合って、更にpythonに関して提案と技巧の資料に関して私達のその他の関連している文章に注意して下さい!