亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

ホームページ バックエンド開発 Python チュートリアル 効率的で読みやすい Python コードを作成するための強力なテクニック

効率的で読みやすい Python コードを作成するための強力なテクニック

Oct 31, 2024 pm 07:06 PM

Powerful Techniques for Writing Efficient and Readable Python Code

Python はそのシンプルさと多用途性で知られていますが、経験豊富な開発者であっても、パフォーマンスと可読性を最大化するベスト プラクティスを採用することで恩恵を受けることができます。データ サイエンス、機械學(xué)習(xí)、Python による Web 開発の臺頭により、今日の急速に変化するテクノロジー環(huán)境で競爭力を維持するには、効率的なコード テクニックを習(xí)得することが必須となっています。ここでは、複雑なプロジェクトに取り組んでいる場合でも、簡単な自動化スクリプトに取り組んでいる場合でも、Python コードのパフォーマンスと読みやすさを向上させるための 20 の効果的なテクニックを詳しく説明します。

1.ジェネレーターを使用してメモリを節(jié)約

ジェネレーターは、過剰なメモリを使用せずに大規(guī)模なデータセットを処理するのに最適です。すべてをメモリに保持するのではなく、一度に 1 つずつデータを生成します。たとえば、ジェネレーターを使用すると、大きなログ ファイルを 1 行ずつ読み取ることができます。

def read_large_file(file_path):
    with open(file_path, 'r') as file:
        for line in file:
            yield line.strip()

このアプローチは、限られたメモリでの作業(yè)が不可欠なデータ処理やバッチ トレーニングなどのタスクに特に役立ちます。

2. .setdefault() でデフォルト値を設(shè)定する

辭書內(nèi)のキーをデフォルト値で初期化する必要がある場合、.setdefault() を使用すると手動チェックを省略できます。

inventory = {"jeans": 500, "top": 600}
inventory.setdefault("shoes", 0)
print(inventory)

これにより、デフォルト値の管理がより簡潔になり、余分な if ステートメントが不要になります。

3. if-elif チェーンを辭書に置き換えます

長い if-elif チェーンの代わりに辭書を使用して関數(shù)をマップすると、コードがよりクリーンになり、保守しやすくなります。

def start(): print("Start")
def stop(): print("Stop")
actions = {"start": start, "stop": stop}
action = "start"
actions.get(action, lambda: print("Invalid"))()

この構(gòu)造により、特に大規(guī)模なデシジョン ツリーでの読みやすさとパフォーマンスが向上します。

4. Counter を使用してカウントを簡素化します

コレクション モジュールの Counter クラスは、頻度分析など、Python でのカウント タスクを簡素化する優(yōu)れた方法です。

from collections import Counter
words = ["apple", "banana", "apple", "orange", "banana"]
counts = Counter(words)
print(counts)

カスタムのカウント関數(shù)を作成する必要がなくなり、効率的かつ使いやすくなります。

5.メモ化による再帰の最適化

メモ化は負荷の高い関數(shù)呼び出しの結(jié)果を保存します。これは、フィボナッチ計算などの再帰アルゴリズムで特に役立ちます。

from functools import lru_cache

@lru_cache(maxsize=1000)
def fibonacci(n):
    if n < 2:
        return n
    return fibonacci(n - 1) + fibonacci(n - 2)

このアプローチでは、追加メモリを最小限に抑えながら、時間の複雑さを軽減します。

6.デコレータで柔軟性を追加

Python デコレータは、コア ロジックを変更せずに、ロギングやタイミングなど、再利用可能な機能を複數(shù)の関數(shù)に適用する場合に役立ちます。

import time

def timer(func):
    def wrapper(*args, **kwargs):
        start_time = time.time()
        result = func(*args, **kwargs)
        print(f"{func.__name__} took {time.time() - start_time:.6f} seconds")
        return result
    return wrapper

@timer
def slow_function():
    time.sleep(1)

slow_function()

7. dataclass でデータモデルを明確にする

Python のデータクラスを使用すると、init、repr、比較メソッドが自動的に生成されるため、単純なデータ モデルの定義がより簡単かつ読みやすくなります。

def read_large_file(file_path):
    with open(file_path, 'r') as file:
        for line in file:
            yield line.strip()

これにより、定型コードが削減され、データ構(gòu)造がクリーンで保守可能に保たれます。

8.一致する構(gòu)造條件

Python 3.10 では、構(gòu)造パターン マッチングにより、冗長な if-else ステートメントを使用せずに複雑なデータ構(gòu)造を照合できます。

inventory = {"jeans": 500, "top": 600}
inventory.setdefault("shoes", 0)
print(inventory)

9. Chained と all() を置き換えます

複數(shù)の條件を一度に検証するには、all() を使用してコードを簡潔かつ読みやすく保ちます。

def start(): print("Start")
def stop(): print("Stop")
actions = {"start": start, "stop": stop}
action = "start"
actions.get(action, lambda: print("Invalid"))()

10.リスト內(nèi)包表記を活用する

リスト內(nèi)包表記により、特に単純な変換の場合、ループが簡潔かつ表現(xiàn)力豊かになります。

from collections import Counter
words = ["apple", "banana", "apple", "orange", "banana"]
counts = Counter(words)
print(counts)

従來のループよりも効率的で読みやすいです。

11.ジェネレータ式を理解して使用する

リストが必要ない場合は、ジェネレータ式を使用してメモリ効率を高めます。

from functools import lru_cache

@lru_cache(maxsize=1000)
def fibonacci(n):
    if n < 2:
        return n
    return fibonacci(n - 1) + fibonacci(n - 2)

ジェネレーター式は、オンデマンドで値を生成することでメモリ使用量を削減します。

12.並列反復(fù)のために zip() を試してください

zip() 関數(shù)を使用すると、複數(shù)のリストを並行して反復(fù)処理することが簡単になります。

import time

def timer(func):
    def wrapper(*args, **kwargs):
        start_time = time.time()
        result = func(*args, **kwargs)
        print(f"{func.__name__} took {time.time() - start_time:.6f} seconds")
        return result
    return wrapper

@timer
def slow_function():
    time.sleep(1)

slow_function()

13. with ステートメントでファイルを安全に処理する

with ステートメントは、スイートの終了後にファイルが適切に閉じられるようにするため、ファイル処理に最適です。

from dataclasses import dataclass

@dataclass
class Employee:
    name: str
    id: int
    salary: float

e = Employee("Alice", 1, 50000)
print(e)

これにより、リソース管理が簡素化され、エラーの可能性が最小限に抑えられます。

14.タイプヒントで安全性を追加

型ヒントによりコードが読みやすくなり、IDE が実行前に潛在的なエラーを検出できるようになります。

def describe_point(point):
    match point:
        case (0, 0):
            return "Origin"
        case (0, y):
            return f"On Y-axis at {y}"
        case (x, 0):
            return f"On X-axis at {x}"
        case (x, y):
            return f"Point at ({x}, {y})"

型ヒントは、特に大規(guī)模なコードベースでの保守性を向上させます。

15. or 條件 を any() で簡略化します

リスト內(nèi)の條件が true かどうかを確認するには、連鎖した or 條件よりも any() の方が簡潔です。

fields = ["name", "email", "age"]
data = {"name": "Alice", "email": "alice@example.com", "age": 25}
if all(field in data for field in fields):
    print("All fields are present")

16. try-excel-else-finally を活用する

この構(gòu)造により、else と最終的にさまざまなシナリオを管理するための柔軟性が追加され、よりクリーンなエラー処理が可能になります。

squares = [x ** 2 for x in range(10)]

17.名前付きタプルを使用してデータを整理する

名前付きタプルはタプルに構(gòu)造を追加し、タプルをより読みやすく、自己文書化します。

sum_of_squares = sum(x ** 2 for x in range(1000))

18. f-Strings による str 連結(jié)の改善

f-String は、特に複雑な式の場合、従來の連結(jié)方法よりも高速で読みやすいです。

names = ["Alice", "Bob"]
ages = [25, 30]
for name, age in zip(names, ages):
    print(f"{name} is {age} years old")

19.効率的な反復(fù)のために itertools を使用する

itertools モジュールは、順列、組み合わせ、要素の繰り返しの生成など、効率的なループ オプションを提供します。

def read_large_file(file_path):
    with open(file_path, 'r') as file:
        for line in file:
            yield line.strip()

20.コンテキストマネージャーでコードをクリーンに保つ

カスタム コンテキスト マネージャーは、リソースの管理やタスクのクリーンアップに役立ち、読みやすさと安全性が向上します。

inventory = {"jeans": 500, "top": 600}
inventory.setdefault("shoes", 0)
print(inventory)

これらのテクニックを統(tǒng)合することで、より効率的であるだけでなく、読みやすく保守しやすい Python コードを作成できます。これらのヒントを試して、徐々に毎日のコーディング実踐に取り入れてください。

以上が効率的で読みやすい Python コードを作成するための強力なテクニックの詳細內(nèi)容です。詳細については、PHP 中國語 Web サイトの他の関連記事を參照してください。

このウェブサイトの聲明
この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當(dāng)する法的責(zé)任を負いません。盜作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡(luò)ください。

ホットAIツール

Undress AI Tool

Undress AI Tool

脫衣畫像を無料で

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード寫真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

寫真から衣服を削除するオンライン AI ツール。

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中國語版

SublimeText3 中國語版

中國語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統(tǒng)合開発環(huán)境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Pythonクラスの多型 Pythonクラスの多型 Jul 05, 2025 am 02:58 AM

Pythonオブジェクト指向プログラミングのコアコンセプトであるPythonは、「1つのインターフェイス、複數(shù)の実裝」を指し、異なるタイプのオブジェクトの統(tǒng)一処理を可能にします。 1。多型は、メソッドの書き換えを通じて実裝されます。サブクラスは、親クラスの方法を再定義できます。たとえば、Animal ClassのSOCK()方法は、犬と貓のサブクラスに異なる実裝を持っています。 2.多型の実用的な用途には、グラフィカルドローイングプログラムでdraw()メソッドを均一に呼び出すなど、コード構(gòu)造を簡素化し、スケーラビリティを向上させる、ゲーム開発における異なる文字の共通の動作の処理などが含まれます。 3. Pythonの実裝多型を満たす必要があります:親クラスはメソッドを定義し、子クラスはメソッドを上書きしますが、同じ親クラスの継承は必要ありません。オブジェクトが同じ方法を?qū)g裝する限り、これは「アヒル型」と呼ばれます。 4.注意すべきことには、メンテナンスが含まれます

Python関數(shù)引數(shù)とパラメーター Python関數(shù)引數(shù)とパラメーター Jul 04, 2025 am 03:26 AM

パラメーターは関數(shù)を定義するときはプレースホルダーであり、引數(shù)は呼び出し時に特定の値が渡されます。 1。位置パラメーターを順番に渡す必要があり、順序が正しくない場合は結(jié)果のエラーにつながります。 2。キーワードパラメーターはパラメーター名で指定されており、順序を変更して読みやすさを向上させることができます。 3.デフォルトのパラメーター値は、複製コードを避けるために定義されたときに割り當(dāng)てられますが、変數(shù)オブジェクトはデフォルト値として避ける必要があります。 4. Argsおよび *Kwargsは、不確実な數(shù)のパラメーターを処理でき、一般的なインターフェイスまたはデコレータに適していますが、読みやすさを維持するためには注意して使用する必要があります。

Pythonジェネレーターと反復(fù)器を説明します。 Pythonジェネレーターと反復(fù)器を説明します。 Jul 05, 2025 am 02:55 AM

イテレータは、__iter __()および__next __()メソッドを?qū)g裝するオブジェクトです。ジェネレーターは、単純化されたバージョンのイテレーターです。これは、収量キーワードを介してこれらのメソッドを自動的に実裝しています。 1. Iteratorは、次の()を呼び出すたびに要素を返し、要素がなくなると停止例外をスローします。 2。ジェネレーターは関數(shù)定義を使用して、オンデマンドでデータを生成し、メモリを保存し、無限シーケンスをサポートします。 3。既存のセットを処理するときに反復(fù)器を使用すると、大きなファイルを読み取るときに行ごとにロードするなど、ビッグデータや怠zyな評価を動的に生成するときにジェネレーターを使用します。注:リストなどの反復(fù)オブジェクトは反復(fù)因子ではありません。イテレーターがその端に達した後、それらは再作成する必要があり、発電機はそれを一度しか通過できません。

python `@classmethod`デコレーターが説明しました python `@classmethod`デコレーターが説明しました Jul 04, 2025 am 03:26 AM

クラスメソッドは、@ClassMethodデコレーターを介してPythonで定義されるメソッドです。最初のパラメーターはクラス自體(CLS)で、クラス?fàn)顟B(tài)へのアクセスまたは変更に使用されます。特定のインスタンスではなく、クラス全體に影響を與えるクラスまたはインスタンスを通じて呼び出すことができます。たとえば、Personクラスでは、show_count()メソッドは作成されたオブジェクトの數(shù)を數(shù)えます。クラスメソッドを定義するときは、@ClassMethodデコレータを使用して、Change_Var(new_Value)メソッドなどの最初のパラメーターCLSに名前を付けてクラス変數(shù)を変更する必要があります。クラス方法は、インスタンスメソッド(自己パラメーター)および靜的メソッド(自動パラメーターなし)とは異なり、工場の方法、代替コンストラクター、およびクラス変數(shù)の管理に適しています。一般的な用途には以下が含まれます。

PythonでAPI認証を処理する方法 PythonでAPI認証を処理する方法 Jul 13, 2025 am 02:22 AM

API認証を扱うための鍵は、認証方法を正しく理解して使用することです。 1。Apikeyは、通常、リクエストヘッダーまたはURLパラメーターに配置されている最も単純な認証方法です。 2。BasicAuthは、內(nèi)部システムに適したBase64エンコード送信にユーザー名とパスワードを使用します。 3。OAUTH2は、最初にclient_idとclient_secretを介してトークンを取得し、次にリクエストヘッダーにbearertokenを持ち込む必要があります。 4。トークンの有効期限に対処するために、トークン管理クラスをカプセル化し、トークンを自動的に更新できます。要するに、文書に従って適切な方法を選択し、重要な情報を安全に保存することが重要です。

Python Magic MethodsまたはDunder Methodとは何ですか? Python Magic MethodsまたはDunder Methodとは何ですか? Jul 04, 2025 am 03:20 AM

PythonのMagicMethods(またはDunder Methods)は、オブジェクトの動作を定義するために使用される特別な方法であり、二重のアンダースコアで始まり、終了します。 1.オブジェクトは、追加、比較、文字列表現(xiàn)などの組み込み操作に応答できるようにします。 2.一般的なユースケースには、オブジェクトの初期化と表現(xiàn)(__init__、__Repr__、__str__)、算術(shù)操作(__ add__、__sub__、__mul__)、および比較操作(__eq__、___lt__)が含まれます。 3。それを使用するときは、彼らの行動が期待を満たしていることを確認してください。たとえば、__Repr__はリファクタリング可能なオブジェクトの式を返す必要があり、算術(shù)メソッドは新しいインスタンスを返す必要があります。 4.過剰使用または混亂を招くことは避ける必要があります。

Pythonメモリ管理はどのように機能しますか? Pythonメモリ管理はどのように機能しますか? Jul 04, 2025 am 03:26 AM

PythonManagesMemoryAutomatelyUsingTuntingAndagarBageCollector.ReferencountingTrackShowManyvariablesRefertoAnobject、およびThemeMoryisfreed.

PythonのPython Garbage Collectionを説明してください。 PythonのPython Garbage Collectionを説明してください。 Jul 03, 2025 am 02:07 AM

Pythonのごみ収集メカニズムは、參照カウントと定期的なごみ収集を通じてメモリを自動的に管理します。そのコアメソッドは參照カウントであり、オブジェクトの參照の數(shù)がゼロになるとすぐにメモリを解放します。ただし、円形の參照を処理できないため、ループを検出してクリーニングするために、Garbage Collection Module(GC)が導(dǎo)入されています。通常、ガベージコレクションは、プログラムの操作中に參照カウントが減少したときにトリガーされます。割り當(dāng)てとリリースの差がしきい値を超える、またはgc.collect()が手動で呼ばれるときにトリガーされます。ユーザーは、gc.disable()を介して自動リサイクルをオフにし、gc.collect()を手動で実行し、gc.set_threshold()を介して制御を?qū)g現(xiàn)するためにしきい値を調(diào)整できます。すべてのオブジェクトがループリサイクルに參加するわけではありません。參照が含まれていないオブジェクトが參照カウントによって処理されている場合、それは組み込まれています

See all articles