国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

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

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

Oct 31, 2024 pm 07:06 PM

Powerful Techniques for Writing Efficient and Readable Python Code

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

辭書內のキーをデフォルト値で初期化する必要がある場合、.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"))()

この構造により、特に大規(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ù)呼び出しの結果を保存します。これは、フィボナッチ計算などの再帰アルゴリズムで特に役立ちます。

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()

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

8.一致する構造條件

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

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.リスト內包表記を活用する

リスト內包表記により、特に単純な変換の場合、ループが簡潔かつ表現(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.並列反復のために zip() を試してください

zip() 関數(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()

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() で簡略化します

リスト內の條件が 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 を活用する

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

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

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

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

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

18. f-Strings による str 連結の改善

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

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

19.効率的な反復のために 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 コードを作成するための強力なテクニックの詳細內容です。詳細については、PHP 中國語 Web サイトの他の関連記事を參照してください。

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

ホット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 Webアプリケーション(XSS、SQLインジェクションなど)の一般的なセキュリティの脆弱性は何ですか?また、どのように緩和できますか? Python Webアプリケーション(XSS、SQLインジェクションなど)の一般的なセキュリティの脆弱性は何ですか?また、どのように緩和できますか? Jun 10, 2025 am 12:13 AM

Webアプリケーションのセキュリティに注意する必要があります。 Python Webサイトの一般的な脆弱性には、XSS、SQLインジェクション、CSRF、およびファイルアップロードリスクが含まれます。 XSSの場合、テンプレートエンジンを使用して、自動的にエスケープし、豊富なテキストHTMLをフィルタリングし、CSPポリシーを設定する必要があります。 SQLインジェクション、パラメーター化されたクエリまたはORMフレームワークを防ぎ、ユーザー入力を検証するため。 CSRFを防ぐには、CSRFTTOKENメカニズムを有効にし、機密操作を2回確認する必要があります。ファイルアップロード脆弱性を使用して、タイプを制限し、ファイルの名前を変更し、実行権限を禁止する必要があります。規(guī)範に従って、成熟したツールを使用すると、リスクが効果的に減少し、安全性が継続的に注意とテストを必要とします。

Pythonの不適格またはPytestフレームワークは、自動テストをどのように促進しますか? Pythonの不適格またはPytestフレームワークは、自動テストをどのように促進しますか? Jun 19, 2025 am 01:10 AM

Pythonの不適格でPytestは、自動テストの書き込み、整理、および実行を簡素化する2つの広く使用されているテストフレームワークです。 1.両方とも、テストケースの自動発見をサポートし、明確なテスト構造を提供します。 pytestはより簡潔で、テスト\ _から始まる関數(shù)が必要です。 2。それらはすべて組み込みのアサーションサポートを持っています:Unittestはアサートエクイアル、アサートトルー、およびその他の方法を提供しますが、Pytestは拡張されたアサートステートメントを使用して障害の詳細を自動的に表示します。 3.すべてがテストの準備とクリーニングを処理するためのメカニズムを持っています:un

Pythonアプリケーションを生産環(huán)境に展開するための考慮事項は何ですか? Pythonアプリケーションを生産環(huán)境に展開するための考慮事項は何ですか? Jun 10, 2025 am 12:14 AM

Pythonアプリケーションを生産環(huán)境に展開するには、安定性、セキュリティ、メンテナンスに注意が必要です。まず、GunicornまたはUWSGIを使用して開発サーバーを置き換えて、同時処理をサポートします。第二に、パフォーマンスを改善するための逆プロキシとしてNginxと協(xié)力します。第三に、リソースを最適化するためにCPUコアの數(shù)に従ってプロセスの數(shù)を構成します。第4に、仮想環(huán)境を使用して依存関係を分離し、バージョンをフリーズして一貫性を確保します。第5に、詳細なログを有効にし、監(jiān)視システムを統(tǒng)合し、操作とメンテナンスを容易にするアラームメカニズムを設定します。第六に、アプリケーションを実行するためのルートアクセス許可を避け、デバッグ情報を閉じ、HTTPSを構成してセキュリティを確保します。最後に、自動展開はCI/CDツールを通じて達成され、人的エラーを減らします。

Pythonは関數(shù)の可変デフォルト引數(shù)をどのように処理しますか、そしてなぜこれが問題になるのでしょうか? Pythonは関數(shù)の可変デフォルト引數(shù)をどのように処理しますか、そしてなぜこれが問題になるのでしょうか? Jun 14, 2025 am 12:27 AM

Pythonのデフォルトパラメーターは、定義されたときに1回のみ初期化されます??蓧浈芝弗Д龋ē辚攻趣滢o書など)がデフォルトのパラメーターとして使用される場合、予期しない動作が引き起こされる可能性があります。たとえば、空のリストをデフォルトのパラメーターとして使用する場合、関數(shù)への複數(shù)の呼び出しは、毎回新しいリストを生成する代わりに同じリストを再利用します。この動作によって引き起こされる問題には、次のものが含まれます。1。関數(shù)呼び出し間のデータの予期しない共有。 2。その後の呼び出しの結果は、以前の呼び出しの影響を受け、デバッグの難しさを増加させます。 3.論理エラーを引き起こし、検出が困難です。 4.初心者と経験豊富な開発者の両方を混亂させるのは簡単です。問題を回避するために、ベストプラクティスは、デフォルト値をNONEに設定し、関數(shù)內に新しいオブジェクトを作成することです。

PythonをMicroservicesアーキテクチャ內の他の言語やシステムとどのように統(tǒng)合できますか? PythonをMicroservicesアーキテクチャ內の他の言語やシステムとどのように統(tǒng)合できますか? Jun 14, 2025 am 12:25 AM

Pythonは、マイクロサービスアーキテクチャの他の言語やシステムとうまく機能します。キーは、各サービスが獨立して実行され、効果的に通信する方法です。 1.標準のAPIおよび通信プロトコル(HTTP、REST、GRPCなど)を使用して、PythonはFlaskやFastapiなどのフレームワークを介してAPIを構築し、リクエストまたはHTTPXを使用して他の言語サービスを呼び出します。 2。メッセージブローカー(Kafka、Rabbitmq、Redisなど)を使用して非同期コミュニケーションを実現(xiàn)するために、Python Servicesは他の言語消費者向けのメッセージを公開して、システム分離、スケーラビリティ、フォールトトレランスを改善します。 3.実裝を実現(xiàn)するために、他の言語のランタイム(Jythonなど)をC/Cから拡張または埋め込んだ

Pythonは、NumpyやPandasなどのライブラリとのデータ分析と操作にどのように使用できますか? Pythonは、NumpyやPandasなどのライブラリとのデータ分析と操作にどのように使用できますか? Jun 19, 2025 am 01:04 AM

pythonisidealfordataanalysisduetonumpyandpandas.1)numpyexcelsatnumericalcompitations withfast、多次元路面およびベクトル化された分離likenp.sqrt()

__iter__と__next__を使用してPythonにカスタムイテレーターを実裝するにはどうすればよいですか? __iter__と__next__を使用してPythonにカスタムイテレーターを実裝するにはどうすればよいですか? Jun 19, 2025 am 01:12 AM

カスタムイテレーターを実裝するには、クラス內の__iter__および__next__メソッドを定義する必要があります。 __iter__メソッドは、ループなどの反復環(huán)境と互換性があるように、通常は自己の反復オブジェクト自體を返します。 __next__メソッドは、各反復の値を制御し、シーケンスの次の要素を返し、アイテムがもうない場合、停止例外をスローする必要があります。 statusステータスを正しく追跡する必要があり、無限のループを避けるために終了條件を設定する必要があります。 fileファイルラインフィルタリングなどの複雑なロジック、およびリソースクリーニングとメモリ管理に注意を払ってください。 simple単純なロジックについては、代わりにジェネレーター関數(shù)の収率を使用することを検討できますが、特定のシナリオに基づいて適切な方法を選択する必要があります。

リスト、辭書、および設定された包括的設定は、Pythonのコードの読みやすさと簡潔さをどのように改善しますか? リスト、辭書、および設定された包括的設定は、Pythonのコードの読みやすさと簡潔さをどのように改善しますか? Jun 14, 2025 am 12:31 AM

Pythonのリスト、辭書、コレクションの派生は、簡潔な構文を通じてコードの読みやすさと書き込み効率を向上させます。これらは、マルチラインループをシングルラインコードに置き換えて要素変換またはフィルタリングを実裝するなど、イテレーションおよび変換操作を簡素化するのに適しています。 1. [x2forxinrange(10)]などの包括的リストは、正方形シーケンスを直接生成できます。 2。{x:x2forxinrange(5)}などの辭書の包括的な辭書は、キー値マッピングを明確に表現(xiàn)しています。 3。[XForxinNumberSifx%2 == 0]などの條件フィルタリングにより、フィルタリングロジックがより直感的になります。 4。複雑な條件を埋め込むこともできます。たとえば、マルチコンディションフィルタリングや三元式の組み合わせなど。しかし、保守性の低下を避けるために、過度のネスティングまたは副作用操作を避ける必要があります。派生の合理的な使用は減少する可能性があります

See all articles