他言語経験者のための速習Python Vol.1 (変数・関数)

Python

本記事は、何らかのプログラミング言語経験をお持ちの方々を対象にした Python 学習シリーズの第一弾投稿です。

そのため、「Pythonとは」だったり「環境構築」系の解説はスッ飛ばして、どんどん本題に切り込んでいきます。

今回のテーマは、「変数」と「関数」です。

Pythonの変数

Pythonの変数定義は非常にシンプルです。
型の宣言が必須ではないため、記述が短く済むのが特徴です。
ただし、型ヒントを使用してデータ型を指定することもできます。

以下に、いくつかの言語で整数型の変数 number を宣言し、値を代入する例を作成してみます。

Python
number = 5
Java
int number = 5;
JavaScript
let number = 5;
PHP
$number = 5;

型ヒントを使用する例

型ヒントを使用する場合、変数名の右にコロン(:)とデータ型を記述します。

Python
number: int = 5  // 👈整数型(int)
message: str = "Hello" // 👈文字列型(str)

型ヒントは変数だけでなく、関数の引数や戻り値にも指定ができ、静的解析ツールでの型チェックに役立ちます。

Pythonの主なデータ型一覧

Pythonで型ヒントを指定する際に利用可能な主要なデータ型を一覧化します。
それぞれの型に対応するサンプルコードも合わせて記載しています。

基本型(プリミティヴ型)

型名説明使用例
int整数型。age: int = 25
float浮動小数点型。小数を含む数値を扱う。pi: float = 3.14
str文字列型。message: str = “Hello”
bool真偽値型。True または False を表す。is_valid: bool = True
complex複素数型。実部と虚部を持つ数値を扱う。num: complex = 2 + 3j
NoneType値が存在しないことを示す特殊型。value:None = None

complex (複素数型) について

num: complex = 2 + 3j 👈このコードを見て、「虚数なのに ji の間違いなんじゃないの?」と思った方は鋭いです。

しかし、j で正しいです。

変数 i は、多くのプログラミング言語で繰り返し構文のループカウンターに使う慣例があります。また、電気工学の分野で「電流」を表す記号として i が既に使用されています。

そのため、Pythonなどの複素数をネイティブにサポートする一部のプログラミング言語では、虚数を表す変数名として j を採用しています。
なぜ j なのかの理由は、「アルファベット順で i の次が j だから」という単純なものです。

コレクション型

型名説明使用例
List型指定可能なリスト。values: List[int] = [1, 2, 3]
Tuple型指定可能なタプル。coords: Tuple[int, int] = (10, 20)
Set型指定可能な集合。items: Set[str] = {“a”, “b”}
Dictキーと値の型を指定可能な辞書型。data: Dict[str, int] = {“age”, 25}

特殊型

型名説明使用例
OptionalNoneを許容する型。value: Optional[int] = None
Union複数の型を許容。value: Union[int, str] = 24
Any任意の型。value: Any = “自由”
Callable関数型。fn: Callable[[int], str]

fn: Callable[[int], str]

👆このサンプルコードで、角カッコ ([ ]) に囲まれている1つ目の int引数の型を表し、角カッコに囲まれていない str戻り値の型です。

ジェネリック型

型名説明使用例
Genericジェネリック型を定義。T = TypeVar(“T”)

ジェネリック型を使用するための TypeVar は、typing モジュールから提供される機能で、Pythonに元々組み込まれているものではありません。

TypeVar以外にも、List, Optional, Callable, Unionは、typing モジュールをインポートして使用します。

そのため、使用するには以下のコードが必要になります。

from typing import TypeVar

Pythonでの関数定義

Pythonでは、関数定義もシンプルかつ読みやすい構文が採用されています。

以下に、シンプルな関数を定義してみましょう。
2つの引数(ともに整数型)を受け取り、足し算した結果(整数型)を返す関数です。

def add(a: int, b: int) -> int:
  return a + b

おや、多くのプログラミング言語でブロックを表す波カッコ({ })が見当たりませんね。

Pythonでは、インデントがブロックを表します。

インデントが揃っていないとプログラムがエラーになるため、自然とコードが綺麗に揃います。
コードレビューなどの際に、インデントが不揃いなコードは本当に読みづらいので、この仕様は個人的に大変お気に入りです。

関数のデフォルト引数

デフォルト引数を使うと、関数呼び出し時に引数が省略された場合に、あらかじめ設定した値を使用できます。

def greet(name: str = "World") -> str:
  return f"Hello, {name}!"

# 引数を省略した場合
print(greet())  # 出力結果: Hello, World!

# 引数を渡した場合
print(greet("Python"))  # 出力結果: Hello, Python!

可変長引数

可変長引数を使うことで、関数が任意の数の引数を受け取ることができます。
可変長引数の特徴は次の通りです。

  • *args:複数の位置引数をタプルとして受け取る。
  • **kwargs:キーワード引数を辞書として受け取る。

それぞれのサンプルコードを示します。

位置引数(*args)

def sum_numbers(*args: int) -> int:
    return sum(args)

print(sum_numbers(1, 2, 3))  # 出力結果: 6
print(sum_numbers(10, 20))   # 出力結果: 30
Python

キーワード引数(**kwargs)

def show_info(**kwargs: str) -> None:
  for key, value in kwargs.items():
    print(f"{key}: {value}")

show_info(name="Python", version="3.10")
# Output:
# name: Python
# version: 3.10

ラムダ式

ラムダ式は、匿名関数(名前のない関数)を作成するための構文です。
通常の関数よりも簡潔に記述でき、一度だけ使用する簡単な処理に適しています。

ラムダ式の特徴は次の通りです。

  • キーワード lambda を使用。
  • 引数と処理内容を1行で記述。
    • 複数行の処理を含む場合は使用できません。
  • 必要な場所で直接定義でき、無駄な関数名が増えない。
  • 戻り値は常に自動的に返されるため、return は記述しません。
    • return を記述した場合、構文エラーになります。

ラムダ式を変数に格納して使用する例

Python
square = lambda x: x ** 2
print(square(5))  # 出力結果: 25

lambda xの「x」が引数を示し、 x ** 2 は処理内容を表します。
2行目で、引数に値(5)を渡しており、その値の平方(25)を返しています。

ラムダ式をリスト内で使用する例

Python
numbers = [1, 2, 3, 4]
squared_numbers = list(map(lambda x: x ** 2, numbers))
print(squared_numbers)  # 出力結果: [1, 4, 9, 16]

map 関数と組み合わせることで、リスト内の全要素に対してラムダ式を適用しています。

まとめ

本記事では、他言語経験者向けにPythonの変数や関数の定義方法を中心に解説しました。
他言語との比較を交えながら、Pythonの特徴であるシンプルさと柔軟性を理解していただけたかと思います。
また、デフォルト引数や可変長引数、ラムダ式といった便利な機能も取り上げ、実用性を高めるための基礎を築きました。

Pythonは、その簡潔な構文と豊富な機能により、効率的に開発を進められる言語です。
次回以降の記事では、さらにPython特有の強力な機能やデータ操作の方法を紹介していきますので、引き続き、Pythonの魅力を一緒に学んでいきましょう。

コメント

タイトルとURLをコピーしました