Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonの第一級市民(ファーストクラスシチズン)とは?データ型と関数の扱いを解説

第一級市民(ファーストクラスシチズン)とは、他のエンティティと同様に、あらゆる操作を平等にサポートできる対象のことを指します。

こうしたエンティティは、引数として渡す関数からの戻り値として返す条件分岐の中で変更する変数へ代入するといった場面で頻繁に活用されます。

本記事では、Python 3.x(およびそれ以前のバージョン)における第一級市民の実装方法と使い方を解説します。さらに、どのようなエンティティが第一級市民とみなされるのかについても詳しく見ていきましょう。

第一級市民には、変数関数の両方が含まれます。

第一級市民となるデータ型

まず、第一級市民として扱われる主なデータ型を確認しましょう。

  • 整数(int)
  • 浮動小数点数(float)
  • 複素数(complex)
  • 文字列(str)

上記の4つの型はすべて、Python 3.x以前において第一級市民として扱われます。

サンプルコード:各データ型の確認

# 整数の宣言
print("hello world")
int_inp = int(input())
print("This is a First class Citizen of " + str(type(int_inp)))
# 浮動小数点数の宣言
float_inp = float(input())
print("This is a First class Citizen of " + str(type(float_inp)))
# 複素数の宣言
complex_inp = complex(input())
print("This is a First class Citizen of " + str(type(complex_inp)))
# 文字列の宣言
str_inp = input()
print("This is a First class Citizen of " + str(type(str_inp)))

入力例

2
23.4
4+7j
tutorialspoint

出力結果

This is a First class Citizen of <class 'int'>
This is a First class Citizen of <class 'float'>
This is a First class Citizen of <class 'complex'>
This is a First class Citizen of <class 'str'>

第一級市民としての関数

続いて、第一級市民と呼ばれる関数について見ていきましょう。

Pythonでは、第一級オブジェクトは一貫した方法で扱われます。オブジェクト指向言語であるため、すべてのエンティティはデフォルトでオブジェクトとして存在し、任意の時点で参照・参照解除が可能です。また、データ構造や制御構造を使って保存することもできます。

ある言語が「第一級関数」をサポートしていると言えるのは、その言語が関数を第一級オブジェクトとして扱う場合です。ここからは、Pythonが実際に関数を第一級オブジェクトとして扱っているかを確認していきます。

サンプルコード①:関数をオブジェクトとして扱う

# Pythonプログラム
# 関数をオブジェクトとして扱う例
def comp_name(text):
    return text.isupper()

print(comp_name("TUTORIALSPOINT"))
new_name = comp_name  # 関数をオブジェクトとして参照
print(new_name("TutorialsPoint"))

出力結果

True
False

この例では、関数 comp_name を新しい変数 new_name に代入し、同じ関数を別名で呼び出しています。関数がただのオブジェクトとして扱えることが分かります。

サンプルコード②:関数を引数として渡す

# Pythonプログラム
# 関数を他の関数の引数として渡す例
def new_inp(text):
    return text.upper()

def old_inp(text):
    return text.lower()

def display(func):
    # 関数を通常の変数に格納
    code = func("Love Coding, Learn everything on Tutorials Point")
    print(code)

display(new_inp)  # 関数を引数として直接渡す
display(old_inp)

出力結果

LOVE CODING, LEARN EVERYTHING ON TUTORIALS POINT
love coding, learn everything on tutorials point

このように、Pythonの関数はオブジェクトとして参照できるだけでなく、別の関数への引数としても渡せます。これは、Pythonにおいて関数が第一級市民であり、オブジェクトという実体を通じて自由に参照・操作できることを明確に示しています。

まとめ

本記事では、Pythonにおける第一級市民の概念を解説しました。int・float・complex・strといった基本データ型に加え、関数もまた第一級オブジェクトとして扱えることを、具体的なコード例とともに確認しました。関数を変数に代入したり、引数として受け渡したりできる柔軟性は、Pythonならではの強力な特徴です。ぜひ実際にコードを書いて、その挙動を体感してみてください。

  1. Pythonの継承とは?単一継承と階層継承の基本をサンプルコードで解説

    本記事では、Python 3.xにおける継承(インヘリタンス)とクラスの拡張方法について詳しく解説します。 継承とは、現実世界のモノや概念の関係性を自然に表現できる、オブジェクト指向プログラミングの中核となる仕組みです。継承を活用すると、次のようなメリットが得られます。 再利用性:すでに書いたコードを流用でき、重複を削減できる 推移性:クラス間の関係を連鎖的に引き継げる 開発速度の向上:ゼロから書かずに済むため、短期間で開発できる 保守性・拡張性:既存クラスを壊さずに機能を追加しやすい 継承の5つの種類 Pythonの継承は、その構造によって主に以下の5種類に分類されます。 単一継承(

  2. Pythonのクラスメソッドと静的メソッドの違いを徹底解説

    Pythonにおけるクラスメソッド(classmethod)は、クラスのインスタンスではなく、クラスそのものに紐づけられるメソッドです。静的メソッド(staticmethod)もこれと似ていますが、両者にはいくつかの重要な違いがあります。クラスメソッドには@classmethodデコレータを、静的メソッドには@staticmethodデコレータをそれぞれ付与して定義します。 クラスメソッドの構文 class my_class: @classmethod def function_name(cls, arguments): # 関数の処理内容