高度な Python ハック

王林
王林オリジナル
2024-07-24 09:26:41823ブラウズ

Advanced Python Hacks ou

Python は多用途で強力な言語であり、その高度な機能を習得すると、コーディングの効率と読みやすさを大幅に向上させることができます。ここでは、より優れた、よりクリーンで効率的なコードを作成するのに役立つ、Python の高度なヒントをいくつか紹介します。

週末に読むための Python についての小さな本を 2 冊書きました。リンクは次のとおりです: (1) https://leanpub.com/learnpython_inweekend_pt1 & (2) https://leanpub.com/learnpython_inweekend_pt2


1. コードを簡潔にするためにリスト内包表記を使用する

リスト内包表記は、リストを作成するための簡潔な方法を提供します。多くの場合、従来の for ループや条件文を置き換えることができ、コードがよりクリーンで読みやすくなります。

# Traditional approach
numbers = [1, 2, 3, 4, 5]
squared_numbers = []
for num in numbers:
    squared_numbers.append(num ** 2)

# Using list comprehension
squared_numbers = [num ** 2 for num in numbers]

2. ジェネレータ式を活用してメモリ効率を高める

ジェネレーター式を使用すると、シーケンス全体をメモリに保存せずに簡潔な方法でイテレータを作成できるため、メモリ効率が向上します。

# List comprehension (creates a list)
squared_numbers = [num ** 2 for num in numbers]

# Generator expression (creates an iterator)
squared_numbers = (num ** 2 for num in numbers)

3. インデックス追跡に enumerate() を利用する

反復可能オブジェクトを反復処理し、各要素のインデックスを追跡する必要がある場合、enumerate() 関数は非常に役立ちます。

fruits = ['apple', 'banana', 'cherry']
for index, fruit in enumerate(fruits):
    print(f"Index: {index}, Fruit: {fruit}")

4. join() を使用して文字列の連結を簡素化する

文字列を連結するには、特に大きな文字列の場合、+ 演算子を使用するよりも join() メソッドを使用する方が効率的です。

fruits = ['apple', 'banana', 'cherry']
fruit_string = ', '.join(fruits)
print(fruit_string)  # Output: apple, banana, cherry

5. __slots__ を使用してメモリ使用量を削減する

デフォルトでは、Python はインスタンス属性を辞書に保存するため、大量のメモリを消費する可能性があります。 __slots__ を使用すると、インスタンス変数の固定セットにメモリを割り当てることでメモリ使用量を削減できます。

class Point:
    __slots__ = ['x', 'y']
    def __init__(self, x, y):
        self.x = x
        self.y = y

6. contextlib.suppress を使用して例外を無視する

contextlib.suppress コンテキスト マネージャーを使用すると、特定の例外を無視し、不必要な try-Except ブロックを回避してコードを簡素化できます。

from contextlib import suppress

with suppress(FileNotFoundError):
    with open('file.txt', 'r') as file:
        contents = file.read()

7. itertools モジュールを利用する

itertools モジュールは、反復子を操作するための効率的な関数のコレクションを提供します。積、順列、組み合わせなどの関数を使用すると、複雑な演算を簡素化できます。

import itertools

# Calculate all products of an input
print(list(itertools.product('abc', repeat=2)))

# Calculate all permutations
print(list(itertools.permutations('abc')))

8. キャッシュに functools.lru_cache を使用する

functools.lru_cache デコレーターは、負荷の高い関数呼び出しの結果をキャッシュし、パフォーマンスを向上させることができます。

from functools import lru_cache

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

9. よりクリーンなコードのためのマスターデコレーター

デコレーターは、関数またはクラスの動作を変更するための強力なツールです。これらは、ロギング、アクセス制御などに使用できます。

def my_decorator(func):
    def wrapper():
        print("Something is happening before the function is called.")
        func()
        print("Something is happening after the function is called.")
    return wrapper

@my_decorator
def say_hello():
    print("Hello!")

say_hello()

10.For-Else トリックを使用する

Python の for-else 構造を使用すると、for ループが正常に完了した後 (つまり、break ステートメントに遭遇することなく) else ブロックを実行できます。これは、検索操作で特に役立ちます。

for n in range(2, 10):
    for x in range(2, n):
        if n % x == 0:
            print(f"{n} equals {x} * {n//x}")
            break
    else:
        # Loop fell through without finding a factor
        print(f"{n} is a prime number")

結論

これらの高度な Python ヒントを開発ワークフローに組み込むことで、より効率的で読みやすく保守しやすいコードを作成できます。

__slots__ を使用してメモリ使用量を最適化する場合でも、join() を使用して文字列操作を簡素化する場合でも、itertools モジュールの機能を活用する場合でも、これらのテクニックを使用すると、Python プログラミング スキルを大幅に向上させることができます。

これらの概念を探求し、実践し続けて、Python の旅を前進させてください。

以上が高度な Python ハックの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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