「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > 高度な Python ハック

高度な Python ハック

2024 年 7 月 30 日に公開
ブラウズ:783

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-excel ブロッ​​クを回避してコードを簡素化できます。

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 



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 の旅を前進させてください。

リリースステートメント この記事は次の場所に転載されています: https://dev.to/hisham_elamir/10-advanced-python-hacks-4-you-j2o?1 侵害がある場合は、[email protected] に連絡して削除してください。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3