Python でパフォーマンスの最適化を実行する方法

伊谢尔伦
リリース: 2017-06-28 13:33:15
オリジナル
1345 人が閲覧しました

Python の批評家は、Python は非効率的で遅いと主張しますが、そうではありません。Python アプリケーションを高速化するために、次の 6 つのヒントを試してください。

Python は非常に優れた言語です。なぜなら、非常に少ない Python コードで短時間に多くのことを実行でき、マルチタスクとマルチプロセッシングを簡単にサポートできるからです。

py

1. 重要なコードは拡張パッケージに依存できます

Python は多くのプログラミングタスクを簡素化しますが、非常に重要なタスクに対して常に最高のパフォーマンスを提供するとは限りません。 C、C++、または機械語拡張パッケージを使用して重要なタスクを実行すると、パフォーマンスが大幅に向上します。これらのパッケージはプラットフォームに依存します。つまり、使用しているプラ​​ットフォームに固有のパッケージを使用する必要があります。つまり、このソリューションは、基礎となるホストに直接プログラミングすることによってのみ得られるパフォーマンスと引き換えに、アプリケーションの移植性を提供します。個人の拡張ライブラリに追加することを検討できる次の拡張パッケージ: Cython

PyInlne

PyPy
Pyrex

これらのパッケージには、さまざまな機能と実行方法があります。たとえば、Pyrex を使用すると、Python で一部のメモリ タスクを簡単かつ効率的に処理できます。PyInline を使用すると、Python アプリケーションで C コードを直接使用できますが、C コードを効率的に使用できる場合は、インライン コードを使用できます。同時にすべてを 1 か所で。

2. キーワード並べ替えを使用する

実行時にカスタム並べ替え関数

の作成に余分な時間を費やす古い Python コードがたくさんあります。並べ替える最良の方法は、キーワードとデフォルトの sort() メソッドを使用することです。次の例を見てください:

import operator
somelist = [(1, 5, 8), (6, 2, 4), (9, 7, 5)]
somelist.sort(key=operator.itemgetter(0))
somelist
#Output = [(1, 5, 8), (6, 2, 4), (9, 7, 5)]
somelist.sort(key=operator.itemgetter(1))
somelist
#Output = [(6, 2, 4), (1, 5, 8), (9, 7, 5)]
somelist.sort(key=operator.itemgetter(2))
somelist
#Output = [(6, 2, 4), (9, 7, 5), (1, 5, 8)],
ログイン後にコピー
各ケースのリストは、キーワード引数として選択したインデックスに従って並べ替えられます。この方法では、文字列

と数値ソートにも同じことが当てはまります。

3. ループを最適化する

どの プログラミング言語

でもループ ステートメントの最適化が重視されており、Python も同様です。ループの実行を高速化するための豊富なテクニックを利用できますが、開発者が見落としがちな方法の 1 つは、ループ内でドット文字列の使用を避けることです。次の例の場合:

lowerlist = ['this', 'is', 'lowercase']
upper = str.upper
upperlist = []
append = upperlist.append
for word in lowerlist:
    append(upper(word))
    print(upperlist)
    #Output = ['THIS', 'IS', 'LOWERCASE']
ログイン後にコピー
str.upper が呼び出されるたびに、Python はこのメソッドの値を見つけます。しかし、評価結果を変数

に代入すると、プログラムのパフォーマンスを向上させることができます。 Python はこれらのインスタンスの解析に時間がかかるため、重要なのは、Python 内で実行されるループの数を減らすことです。

4. 新しいバージョンを使用する

オンラインで Python 情報を検索すると、Python バージョンの移行に関する無数の情報が見つかります。通常、Python の各バージョンは、Python をより高速に実行できるように、前のバージョンに対して最適化および改善されています。制限要因は、お気に入りのライブラリが Python の新しいバージョン用に改良されているかどうかです。

新しい関数ライブラリを使用し、新しいバージョンの Python を入手する場合は、コードが引き続き実行できることを確認し、アプリケーションをチェックして、相違点を修正する必要があります。

その後、アプリケーションが新しいバージョンで実行できることを確認するだけでは、新機能の更新を見逃す可能性があります。改善を加え、新しいバージョンでアプリケーションを構成し、問題領域を確認し、新機能による更新の優先順位を付けると、ユーザーは以前のアップグレードよりもさらに大きなパフォーマンスの向上を確認できるようになります。

5. 複数のプログラミング方法を試す

アプリケーションを作成するたびに、同じプログラミング方法を使用すると、場合によっては、プログラムの実行が予想より遅くなります。分析中にいくつかの小さな実験を行ってください。たとえば、ディクショナリ内のデータ項目を管理する場合、安全な方法を使用して、データ項目がすでに存在し、それを更新する必要があるかどうかを判断できます。また、エントリを直接追加して、項目が存在しない場合に対処することもできます。全て。

n = 16
myDict = {}
for i in range(0, n):
    char = 'abcd'[i%4]
    if char not in myDict:
        myDict[char] = 0
        myDict[char] += 1
        print(myDict)
ログイン後にコピー

上記のコードは、通常、myDict が空の場合、より高速に実行されます。ただし、myDict に既にデータが入力されている場合は、より良い選択方法があります:

n = 16
myDict = {}
for i in range(0, n):
    char = 'abcd'[i%4]
    try:
        myDict[char] += 1
    except KeyError:
        myDict[char] = 1
    print(myDict)
ログイン後にコピー

どちらの場合も、出力 {'d': 4, 'c': 4, 'b': 4, 'a': 4}唯一の違いは、出力の取得方法です。既成概念にとらわれずに考えて新しいプログラミング手法を作成すると、プログラムの実行速度が向上します。

6. クロスコンパイラー

開発者は、コンピューターが現在のアプリケーション言語を認識せず、マシンコードのみを認識することを忘れることがあります。プログラムを実行するには、人間が読めるコードをコンピュータが理解できるコードに変換するアプリケーションが必要です。 Python などの 1 つの言語でプログラムを作成し、それを C++ などの別の言語で実行することは、パフォーマンスの観点から合理的です。これは、アプリケーションで何をしたいか、およびホスト システムが提供できるリソースによって異なります。

興味深いクロスコンパイラーである Nuitka は、Python を C++ コードに変換することができ、その結果、インタープリターに依存せずにネイティブ モードでアプリケーションを実行できるようになります。プラットフォームとタスクによっては、大幅なパフォーマンスの向上が見られる場合があります。

以上がPython でパフォーマンスの最適化を実行する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート