いくつかの方法の効率を高めるために、Pythonプログラミング

序文

私たちは、この言語Pythonの走行速度が(例えばC、C ++、Javaの、Golangなど他の多くの言語に失われている知っている ...)。 しかし、開発者の視点の視点からPythonは私の好きな言語です、その構文は、(実際に、私は怠け者)シンプルであるため、大部分は、多くの非常にサンパウロの操作があり、大幅に私たちのノックコードの効率を向上させることができる。我々は通常つ星のために、この操作を呼び出しますpythonic

Pythonのサンパウロは、ここでは、多くの操作がよりゆっくりとした後、いくつかの最初のものです。

二つの変数の1の交換

伝統的な執筆:

temp = a
a = b
b = temp

ニシキヘビ:

a, b = b, a

2.列挙enument

リストがある、シナリオを想像してみて["老胡", "老王", "老李", "老赵"]、今の辞書を作成する必要があり、各キーがリストの要素である辞書は、インデックスの対応する要素の値が、実行する方法?これは、列挙シーンの最善の使用ではありません、ここでは、実際に列挙がある非常に良い使用をあなたに伝えるために、ほんの一例です。

伝統的な執筆:

alist = ["老胡", "老王", "老李", "老赵"]

aDict = {}

for i in range(len(alist)):
    aDict[alist[i]] = i

ニシキヘビ:

alist = ["老胡", "老王", "老李", "老赵"]

aDict = {}

for index, item in enumerate(alist):
    aDict[item] = index

式の導出3.

Pythonは3つの派生分割され列表推导式字典推导式集合推导式ここで印象的な類似点は、プレゼンテーションでも過言ではない穴により収集し、派生リスト内包表記に、。

リスト内包

シーンを想像してみて、私たちは、リスト内の100に全ての偶数1を置くように頼むevenList

伝統的な執筆:

evenList = []

for i in range(0, 101):
   if i % 2 == 0:
       evenList.append(i)

ニシキヘビ:

evenList = [i for i in range(0,101) if i % 2 == 0]

コードの1行だけ、それとてもクールではありません。

これは仕様導出式のリストを与えます:

variable = [out_exp for out_exp in input_list if 某个条件成立]

辞書の導出

あなたは辞書のキーと値を交換位置のすべての要件を持っているシナリオを想像してみて

伝統的な執筆:

ADict = {
    "key1": "value1",
    "key2": "value2",
    "key3": "value3"
}

BDict = {}

for key, value in ADict.items():
    BDict[value] = key

ニシキヘビ:

ADict = {
    "key1": "value1",
    "key2": "value2",
    "key3": "value3"
}

BDict = {value: key for key, value in ADict.items()}

導出に泊まったが、あなたのコードは非常に短くなることができます!

4.lambda式

これは間違いなく非常に重要な文法的であるが、多くの新規参入者が使用することを好きではありません...

いわゆるラムダ式は、我々が機能を使用したいが、プログラム全体がこれだけの時間を使用する必要がある場合、ラムダ式を使用して、この時間は間違いなく最も便利な時間があります?なぜ我々は無名関数を使用する必要があり、無名関数であります

タプルペア内に格納されているリストがあり、シナリオを想像し、今リストの第2要素Yaoanタプルは、ソートされ

伝統的な方法:

aList = [(2, 3), (1, 2), (4, 5), (7, 4)]


def sortKey(x):
    return x[1]


aList.sort(key=sortKey)     # 注意不要写成aList = aList.sort(key=sortKey),它没有返回值

print(aList)

でる:

[(1, 2), (2, 3), (7, 4), (4, 5)]

ニシキヘビ:

aList = [(2, 3), (1, 2), (4, 5), (7, 4)]

aList.sort(key=lambda x: x[1])

でる:

[(1, 2), (2, 3), (7, 4), (4, 5)]

与えられた仕様:

lambda 参数:操作(参数)

後者のように注意操作(参数)返されます

例えば:

add = lambda x, y: x + y
# 等价于下面的函数
def add(x, y):
    return x + y

5.デコレータ

Pythonのデコレータは非常に、非常に重要な知識、ここでしか応用例である、そして私は詳細な説明デコレータ外となります

シナリオを想像してみて、今、各部門のための条件を変更することなく、コードを実行するように依頼する新機能を追加しました下、同社は、同時に運転中の部門(機能)をたくさん持っています

出典:

def partA():
    print("----do A job----")

def partB():
    print("----do B job----")

def partC():
    print("----do C job----")

if __name__ == '__main__':
    partA()
    partB()
    partC()

でる:

----do A job----
----do B job----
----do C job----

伝統的な方法:

def partA():
    print("----do A job----")
    print("****do extra job****")

def partB():
    print("----do B job----")
    print("****do extra job****")

def partC():
    print("----do C job----")
    print("****do extra job****")

if __name__ == '__main__':
    partA()
    partB()
    partC()

でる:

----do A job----
****do extra job****
----do B job----
****do extra job****
----do C job----
****do extra job****

ニシキヘビ:

def doExtraJob(func):
    def wrap():
        func()
        print("****do extra job****")
    return wrap

@doExtraJob
def partA():
    print("----do A job----")

@doExtraJob
def partB():
    print("----do B job----")

@doExtraJob
def partC():
    print("----do C job----")

if __name__ == '__main__':
    partA()
    partB()
    partC()

でる:

----do A job----
****do extra job****
----do B job----
****do extra job****
----do C job----
****do extra job****

二つの方法の比較において、新たな機能を追加し、デコレータの効果は、それが機能は、状況の内部コードを変更しないことができるということです。

6.魔法elseステートメント

ほとんどの人は唯一elseステートメントを知っていて、if文で使用されていますが、他に何のステートメントを知っている、とも可能forステートメント、whileステートメントtryのステートメントで使用します

あなたは、未知のデータの内部リストにループしていたときのシーンを想像してみて(どちらかforまたはwhile)、あなたは、配列が出力の偶数個含まれていない場合、文の偶数を破るために顔をセットアップ奇数列表言葉を。

伝統的な方法:

aList = [1, 3, 5, 7, 9]

flag = True
for i in aList:
    if i % 2 == 0:
        flag = False
        break

if flag:
    print("奇数列表")

ニシキヘビ:

aList = [1, 3, 5, 7, 9]

for i in aList:
    if i % 2 == 0:
        flag = False
        break
else:
    print("奇数列表")

ループ(ことに注意してくださいforまたはwhileループが正常に終了した場合)else文は(break文の終了に起因しないときには、ある)トリガ

try,else声明、else文は例外ではない場合、おそらくあなたは疑問を持って、直接、時には我々はそうは思わない、それを解決しようとするが、文が運転中に捕獲されてみてくださいされていないステートメントに異常がないトリガされます。

例を見てください:

try:
    assert True
except:
    print("出错了")
else:
    print("没有错")

でる:

没有错

assert後者の文は偽であるという主張については異常であることが報告され、このtry文は、時には一緒に使用されて非常に便利になります。

7.map機能

マップ機能は、すべての要素までのリストにマッピングされた機能になります。これは単純に完璧にフィットし、ラムダ式です。

10の番号1-10のリストは、ここに需要がこのリスト内のすべての数を二乗しますシナリオは、別のリストに格納され、これは難しいことではありません想像

伝統的な方法:

aList = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

bList = []
for i in aList:
    bList.append(i**2)

ニシキヘビ:

aList = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

bList = list(map(lambda x:x**2, aList))

関数はリストを返しマップしないように注意してくださいmap对象、あなたは変換を入力する必要があります

8.filter機能

Right関数の名前から見ることができるfilterパフォーマンス機能をフィルタリングすることである、filterあなたは要素をフィルタリングし、すべての元素組成の要件を満たしているのリストを返すことができfilter对象、およびmapコンバージョンのタイプに類似した注意を。

シナリオを想像してみて、いくつかの未知の数字を保持リスト、があり、今でもすべて取り出し置くように頼みます、

伝統的な方法:

aList = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

bList = []
for each in aList:
    if each % 2 == 0:
        bList.append(each)

ニシキヘビ:

aList = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

bList = list(filter(lambda x: not x % 2, aList))

ここで使用notしても数2以上0であるからではないため除いて、Trueを返す場合でも数を作るためには、(Pythonの0はfalse)

9.reduce機能

注意:フロントと2つの異なる機能を、減らす機能が置かれfunctools、このモジュールは、使用がインポートする必要があります。

reduceこの関数は2つのパラメータを持っている必要があり、この機能を必要とする機能で操作を行ったすべての要素のリストになります。

シナリオを想像すると、すべての数値の平均値に番号のリストを求める必要です。

伝統的な方法:

aList = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

sum = 0
for i in aList:
    sum += i

ave = sum / len(aList)

ニシキヘビ:

from functools import reduce

aList = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

ave = reduce(lambda x, y: x + y, aList) / len(aList)

mapfilterreduce機能、およびlambda使用が本質であると。三つの機能は、機能を混同しないようにあります

関数名 機能 返却値
地図 シンプルな機能のすべての要素は、最大のリストをマップします マップオブジェクト
フィルタ フィルタエレメントとは、フィルタオブジェクトの要件を満たすために、すべての要素のリストを返します。 フィルタオブジェクト
減らします すべての要素のリストは、機能と操作を行いました 結果

10.概要

多くのPythonのサン作業、忘れがちに新しく追加された人々のためにとても便利ないくつかの使用によってもたらされる望みは、私はあなたを見て、あなたがより実践的なコードのメモリを向上させるノックなることを願ってこれらの変更されたサンパウロの操作を使用することが可能なコードを書く前に、あなたのコードより合理外観を作ります。

おすすめ

転載: www.cnblogs.com/kainhuck/p/10987747.html