中級 Python:データ構造、関数、および OOP
Python におけるリストとタプルの違いを説明してください。
回答:
リストはミュータブル(mutable)であり、作成後に要素を変更できます。角括弧 [] を使用して定義されます。タプルはイミュータブル(immutable)であり、要素を変更できません。丸括弧 () を使用して定義されます。タプルは一般的に高速であり、辞書のキーとして使用できます。
辞書内包表記とは何ですか?例を挙げてください。
回答:
辞書内包表記は、辞書を作成するための簡潔な方法です。式、それに続く for 句、そしてゼロ個以上の for または if 句で構成されます。例:squares = {x: x*x for x in range(5)} は {0: 0, 1: 1, 2: 4, 3: 9, 4: 16} を作成します。
関数定義における *args と **kwargs の目的は何ですか?
回答:
*args は、関数が任意の数の位置引数を受け取ることを可能にし、それらはタプルに収集されます。**kwargs は、関数が任意の数のキーワード引数を受け取ることを可能にし、それらは辞書に収集されます。これらは柔軟な関数シグネチャを可能にします。
Python におけるデコレータの概念を説明してください。
回答:
デコレータは、関数やメソッドのソースコードを明示的に変更することなく、その機能を追加または拡張できるデザインパターンです。基本的に、別の関数を引数として受け取り、何らかの機能を追加して、新しい関数を返す関数です。これらは、ロギング、タイミング、またはアクセス制御によく使用されます。
Python クラスにおける __init__ メソッドと __new__ メソッドの違いを説明してください。
回答:
__new__ は、__init__ が呼び出される前にクラスの新しいインスタンスを作成して返す静的メソッドです。__init__ は、新しく作成されたオブジェクトを初期化するインスタンスメソッドです。シングルトンのようなオブジェクト作成自体を制御する必要がない限り、__new__ がオーバーライドされることはめったにありません。
Python におけるメソッドのオーバーライドとメソッドのオーバーロードを説明してください。
回答:
メソッドのオーバーライドは、サブクラスがスーパークラスに既に定義されているメソッドに対して特定の С 구현 を提供する場合に発生します。Python は、伝統的なメソッドのオーバーロード(同じ名前だがパラメータが異なる複数のメソッド)を直接サポートしていません。代わりに、デフォルト引数または *args/**kwargs を使用して同様の柔軟性を実現できます。
Python におけるジェネレータとは何ですか?また、なぜそれを使用するのですか?
回答:
ジェネレータは、単一の値を返すのではなく、yield キーワードを使用して一度に 1 つの結果のシーケンスを生成するイテレータを返す関数です。それらはシーケンス全体をメモリに格納しないためメモリ効率が良く、大規模なデータセットや無限シーケンスに最適です。
Python のグローバルインタープリターロック(GIL)を説明してください。
回答:
GIL は Python オブジェクトへのアクセスを保護するミューテックス(mutex)であり、複数のネイティブスレッドが同時に Python バイトコードを実行するのを防ぎます。これは、マルチコアプロセッサ上であっても、任意の時点で Python バイトコードを実行できるスレッドは 1 つだけであることを意味します。メモリ管理を簡素化しますが、CPU バウンドなタスクの真の並列実行を制限する可能性があります。
Python における super() の目的は何ですか?
回答:
super() は、親クラスまたは兄弟クラスのメソッドを呼び出すために使用されます。サブクラスでオーバーライドされた継承メソッドにアクセスすることを可能にし、複雑な継承階層における適切なメソッド解決順序(MRO)を保証します。サブクラスの __init__ メソッドでよく使用されます。
Python で例外をどのように処理しますか?基本的な例を挙げてください。
回答:
例外は try、except、else、finally ブロックを使用して処理されます。try ブロックには例外を発生させる可能性のあるコードが含まれます。except は特定の例外をキャッチします。例外が発生しなかった場合は else が実行され、例外が発生したかどうかにかかわらず finally は常に実行されます。例:try: 1/0 except ZeroDivisionError: print('Cannot divide by zero')。
シャローコピーとディープコピーの違いを説明してください。
回答:
シャローコピーは新しい複合オブジェクトを作成しますが、その後、元のオブジェクトに含まれるオブジェクトへの参照を挿入します。元のオブジェクトにミュータブルなオブジェクトが含まれている場合、それらのオブジェクトへの変更はシャローコピーに反映されます。ディープコピーは新しい複合オブジェクトを作成し、その後、元のオブジェクトに含まれるオブジェクトのコピーを再帰的に挿入することで、完全な独立性を保証します。
コンテキストマネージャーと with ステートメントの概念を説明してください。
回答:
コンテキストマネージャーは、リソースを管理するためのクリーンな方法を提供し、エラーが発生した場合でもセットアップとクリーンアップ操作が正しく処理されることを保証します。with ステートメントは、リソースの取得と解放を自動的に処理するために使用されます。一般的な用途には、ファイル処理、データベース接続、ロックなどがあり、リソースが正しく閉じられることを保証します。