ホームページ > バックエンド開発 > Python チュートリアル > このような Python 関数を書くのはやめてください。

このような Python 関数を書くのはやめてください。

Susan Sarandon
リリース: 2025-01-23 16:14:12
オリジナル
789 人が閲覧しました

Just Stop Writing Python Functions Like This!

簡潔で読みやすく効率的なコードを書くことは、すべての開発者が向上に努めるスキルです。 Python では、関数の作成によってコードベースの品質が決まります。ただし、初心者でも経験豊富な開発者でも、多くの開発者は Python 関数を作成するときによくある落とし穴に陥ります。これらのエラーは、可読性、保守性、およびパフォーマンスの問題を引き起こす可能性があります。この記事では、避けるべき Python 関数の一般的なパターンを調査し、より良いコードのためにそれらを改善する方法について説明します。

1. パラメータが多すぎる関数の作成を避ける

質問:

関数に長いパラメーター リストが含まれている場合、問題が発生する可能性があります。関数が受け入れるパラメーターが多すぎると、その機能を理解することが難しくなり、エラーの可能性が高くなります。また、関数が引き受けるタスクが多すぎるため、単一責任の原則にも違反します。

<code class="language-python">def process_data(a, b, c, d, e, f, g, h, i, j):
    # 参数过多,难以理解
    pass</code>
ログイン後にコピー
ログイン後にコピー

解決策:

キーワード引数 または 辞書 を使用して関連データを渡すか、関数をより小さな関数に分割することを検討してください。これにより、関数が理解しやすくなります。

<code class="language-python">def process_data(data):
    # 使用字典或类来分组相关数据
    pass</code>
ログイン後にコピー
ログイン後にコピー

2. 関数内でのグローバル変数の使用をやめる

質問:

便利に思えるかもしれませんが、関数内でグローバル変数を使用すると、コードとグローバル状態の間に緊密な結合が作成されます。これにより、コードのテスト、デバッグ、保守がより困難になります。

<code class="language-python">my_data = [1, 2, 3]

def process_data():
    # 访问全局变量
    total = sum(my_data)
    return total</code>
ログイン後にコピー
ログイン後にコピー

解決策:

グローバル状態に依存するのではなく、明示的に変数を関数に渡します。これにより、関数がより予測可能になり、再利用可能になります。

<code class="language-python">def process_data(data):
    return sum(data)</code>
ログイン後にコピー
ログイン後にコピー

3. 戻り値のない関数の作成を避ける

質問:

戻り値のない関数は、通常、効率的に機能していないことを意味します。関数は、プログラムの他の部分で簡単に使用できるように、意味のある値を返す必要があります。これはコードの再利用性とテストのしやすさにとって重要です。

<code class="language-python">def process_data(data):
    print("Processing data")  # 没有返回值</code>
ログイン後にコピー

解決策:

関数が意味のある結果を返すようにしてください。関数が副作用 (ファイルへの書き込みなど) のみを実行する場合でも、戻り値を使用して操作の成功または失敗を示すことを検討してください。

<code class="language-python">def process_data(data):
    print("Processing data")
    return True  # 返回有意义的值</code>
ログイン後にコピー

4. *args と `kwargs`**

の不要な使用を停止します。

質問:

*args と **kwargs は関数を柔軟にするための強力なツールですが、使いすぎると混乱が生じ、関数が予期せぬ動作をする可能性があります。また、関数がどのような引数を期待しているのかが明確でないため、読みやすさも低下します。

<code class="language-python">def process_data(*args, **kwargs):
    # 没有明确需求地使用 *args 和 **kwargs
    pass</code>
ログイン後にコピー

解決策:

可能な限り、*args や **kwargs の代わりに特定の引数を使用してください。必要な場合は、予期される入力タイプを明確に文書化してください。

<code class="language-python">def process_data(data, operation_type):
    pass</code>
ログイン後にコピー

5. 関数内でネストされたループの使用を停止します (可能な場合)

質問:

関数内にネストされたループがあると、特に大規模なデータセットを扱う場合、コードが読みにくくなり、速度が低下する可能性があります。 Python では、深くネストされたループを使用せずに同じ結果を達成するより効率的な方法がよくあります。

<code class="language-python">def process_data(a, b, c, d, e, f, g, h, i, j):
    # 参数过多,难以理解
    pass</code>
ログイン後にコピー
ログイン後にコピー

解決策:

リスト内包表記や、map()、filter()、itertools などの組み込み関数を使用してロジックを簡素化し、可読性とパフォーマンスを向上させます。

<code class="language-python">def process_data(data):
    # 使用字典或类来分组相关数据
    pass</code>
ログイン後にコピー
ログイン後にコピー

6. 長すぎる関数の作成を避ける

質問:

過度に長い関数は 単一責任の原則 に違反しており、保守が困難です。長い関数は複数のタスクを実行することが多いため、テスト、デバッグ、変更が困難になります。

<code class="language-python">my_data = [1, 2, 3]

def process_data():
    # 访问全局变量
    total = sum(my_data)
    return total</code>
ログイン後にコピー
ログイン後にコピー

解決策:

関数をより小さく、より管理しやすい関数に分割しました。すべての関数は 1 つのことを実行し、それを適切に実行する必要があります。

<code class="language-python">def process_data(data):
    return sum(data)</code>
ログイン後にコピー
ログイン後にコピー

結論

これらのよくある間違いを避けることで、Python 関数はより効率的で読みやすくなり、保守が容易になります。目標は、シンプルでクリーンで理解しやすいコードを書くことであることに注意してください。関数は簡潔で、焦点が絞られ、モジュール化されている必要があります。これにより、コードの保守とデバッグが容易になり、より楽しく使用できるようになります。したがって、次回関数を書き始めるときは、次のように自問してください: これは最良の設計ですか?

以上がこのような Python 関数を書くのはやめてください。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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