【ITニュース解説】Function in Python (2)
2025年09月21日に「Dev.to」が公開したITニュース「Function in Python (2)」について初心者にもわかりやすく解説しています。
ITニュース概要
Pythonの関数は、`pass`や`return`で`None`を返す何もしない関数から、クラスや関数を引数に取ったり、関数内で定義したりできる。一行で書け、変数への代入も可能だ。命名規則に注意し、`lower_snake_case`が推奨される。
ITニュース解説
Pythonにおける関数は、特定の処理をひとまとまりにして名前を付けたもので、プログラムの様々な場所で繰り返し利用できる便利な道具だ。今回は、Pythonの関数について、より実践的で応用的な使い方や、知っておくべき細かなルールについて解説する。システムエンジニアを目指す上で、関数を深く理解することは非常に重要である。
まず、「何もしない関数」というテーマから見ていこう。Pythonの関数は、たとえ具体的な処理を記述しなくても、何らかの形で動作させることができる。例えば、pass文を記述した関数や、単にreturn文だけを記述した関数は、一見すると何もしていないように見える。また、文字列や数値を単独で記述しただけの関数も同様だ。これらの関数を呼び出すと、結果としてNoneという特殊な値が返される。Noneは「何もない」ことを表す値で、Pythonでは、関数が明示的に何かを返さない場合、自動的にNoneを返すというルールがある。特にpass文は、将来的にコードを追加する予定だが、今はまだ処理がない関数の仮置きとしてよく使われる。これは、何もコードを記述しない関数は、Pythonの構文エラーになるため、それを避ける目的もあるのだ。
次に、Pythonの柔軟性を示す機能として、関数に「クラス」や「別の関数」そのものを引数として渡すことができる点がある。これは、まるで部品を組み立てるように、異なる機能を持つ部品(この場合はクラスや関数)を、別の関数に渡して利用できることを意味する。例えば、ある関数がクラスを引数として受け取り、そのクラスの属性にアクセスしたり、別の関数を引数として受け取り、その受け取った関数を実行したりできる。これにより、プログラムの設計の幅が広がり、より汎用的なコードを書くことが可能になる。
さらに、関数の中に「クラス」や「別の関数」を定義することもできる。これは、ある関数の中でしか使わない小さな部品(クラスや関数)を、その関数の中に閉じ込めて定義するイメージだ。このようにすると、外のプログラムからはその内部に定義されたクラスや関数は見えず、その関数の中だけで完結して利用されるため、コードの整理や衝突の回避に役立つ。これは「スコープ」という概念に関連しており、変数が有効な範囲と同様に、定義された場所によって使える範囲が決まる。
また、「多層関数」、あるいは「ネストされた関数」という概念もある。これは、関数の中にさらに別の関数を定義し、その内部関数を呼び出す形だ。記事の例では、funcという名前の関数が何層にもわたって定義されているが、これはある処理を段階的に深掘りしていくような構造を表現できる。外側の関数から内側の関数を呼び出すことで、特定の処理をカプセル化し、コードをより構造化されたものにできる。
より簡潔なコードを書きたい場合には、「一行関数」が役立つ。これは、非常に短い処理しか行わない関数であれば、defキーワードからreturn文までを一行で記述できるというものだ。これにより、コードの行数を減らし、視覚的にすっきりさせることができる。
Pythonでは、関数そのものを「値」として扱うことができるという特徴がある。これは「第一級オブジェクト」という概念の一部で、関数を変数に代入したり、他の関数に渡したりできることを意味する。記事の例では、定義済みの関数名を変数に代入し、その変数を通して関数を呼び出している。これは、関数オブジェクトへの参照を変数に持たせているため、通常の変数を扱うのと同じように関数を扱える。ただし、JavaScriptのようにdefキーワードごと変数に代入するような直接的な代入はPythonではできないため、この点は注意が必要だ。この制約を回避し、一行で手軽に匿名関数を作成したい場合には、「ラムダ関数」が非常に便利だ。ラムダ関数はlambdaキーワードを使って定義し、式を一つだけ記述できるシンプルな関数で、これも変数に代入して利用できる。
プログラミングでは、関数名や引数名にどのような名前を付けるかという「命名規則」が非常に重要になる。Pythonのルールでは、関数名や引数名にはアルファベット、アンダースコア(_)、数字を使用できる。ただし、名前の最初の文字を数字にすることはできない。例えば、100_Trueのような名前はエラーになる。また、Pythonの言語仕様で特別に意味を持つ「予約キーワード」(例: True, class, defなど)は関数名や引数名として使用できない。これに対し、matchやcaseのような一部のキーワードは「ソフトキーワード」と呼ばれ、状況によっては関数名などとして使用できるが、混乱を避けるためにも避けるのが無難だ。ハイフン(-)も計算の引き算と解釈されるため、名前には使えない。
最後に、Pythonコミュニティで広く推奨されている「命名規約(スタイルガイド)」について触れておく。これは、コードの可読性を高め、チーム開発を円滑に進めるための共通のルールだ。Pythonの公式なスタイルガイドであるPEP 8では、関数名はlower_snake_case(小文字のアルファベットとアンダースコアで単語を連結する形式)で記述することが推奨されている。例えば、my_funcやcalculate_total_priceのような名前がこれに当たる。この規約に従うことで、他の人があなたのコードを読んだり、あなたが他の人のコードを読んだりする際に、コードの意味や構造をスムーズに理解できるようになる。
これらの知識は、Pythonで効率的かつ保守性の高いプログラムを開発するために不可欠である。関数はプログラムの基本的な構成要素であり、その使い方やルールを深く理解することは、システムエンジニアとしてのスキルアップに直結するだろう。