Pythonでは、関数を使って処理をまとめ、モジュールやimport
を使ってコードを整理し、再利用しやすくすることができます。
今回はそれらについて学んでゆきます。
関数
関数は、特定の処理をまとめたブロックです。一度定義すれば、何度でも呼び出して使うことができ、コードの再利用や整理に役立ちます。
関数の基本構造
def 関数名(引数1, 引数2, ...):
# 処理
return 戻り値
・def
: 関数を定義するキーワード。
・関数名: 呼び出すための名前。
・引数: 関数に渡すデータ(任意)。
・return
: 関数が計算結果などを返すために使う(任意)。
例:2つの数値を足し合わせる関数
def add_numbers(a, b):
result = a + b
return result
# 関数の呼び出し
sum_value = add_numbers(10, 5)
print(sum_value) # 15が表示される
練習問題 1: 関数の定義
- 2つの数値を引数として受け取り、それらの積(かけ算)を返す関数
multiply_numbers
を定義してください。 - その関数を呼び出して、結果を出力してください。
答えはこちらをクリック
def multiply_numbers(a, b):
return a * b
# 関数の呼び出し
product = multiply_numbers(6, 7)
print(product) # 42が表示される
モジュール
モジュールは、Pythonのファイル(.py
)で、他のコードから簡単にインポートして使えるようにした関数や変数、クラスのまとまりです。
標準ライブラリや自作のモジュールを使うことで、再利用性の高いコードを書くことができます。
例:標準ライブラリの math
モジュール
Pythonには、便利な関数が含まれる標準ライブラリがあり、それを使うには import
でモジュールを読み込む必要があります。
import math
# mathモジュールの関数を使用
result = math.sqrt(16)
print(result) # 4.0が表示される
import
: モジュールを読み込むキーワード。
math.sqrt
: math
モジュールの sqrt
関数(平方根を計算)を使用。
練習問題 2: 標準モジュールを使う
math
モジュールを使って、任意の数値の円周率を掛け合わせて面積を計算する関数circle_area
を作成してください(面積の公式はπr^2
)。- 半径
5
の円の面積を計算し、表示してください。
答えはこちらをクリック
import math
def circle_area(radius):
return math.pi * (radius ** 2)
# 半径5の円の面積を計算
area = circle_area(5)
print(area) # 78.53981633974483が表示される
import
とモジュールの利用
モジュールは、標準ライブラリだけでなく、自分で作成したモジュールも import
して使うことができます。
モジュールを使うことで、コードを分割し、管理しやすくなります。
自作モジュールの作成
my_module.py
というファイルを作成し、関数を定義します。
# my_module.py
def greet(name):
return f"Hello, {name}!"
他のファイルからこのモジュールを import
して使用します。
# main.py
import my_module
# greet関数を呼び出す
message = my_module.greet("Alice")
print(message) # "Hello, Alice!" が表示される
from
を使ったインポート
モジュールの特定の関数や変数だけをインポートすることもできます。
from my_module import greet
# greet関数を直接呼び出す
message = greet("Bob")
print(message) # "Hello, Bob!" が表示される
import as
を使った別名
モジュール名が長い場合や、名前が重複する可能性がある場合、import as
でモジュールや関数に別名を付けることができます。
import math as m
# 別名を使って平方根を計算
result = m.sqrt(25)
print(result) # 5.0が表示される
練習問題 3: 自作モジュールの利用
math_operations.py
というモジュールを作成し、次の関数を定義してください:add(a, b)
: 2つの数値を足す関数subtract(a, b)
: 2つの数値を引く関数
- 別のファイルでこれらの関数を
import
して使い、それぞれの結果を表示してください。
答えはこちらをクリック
# math_operations.py
def add(a, b):
return a + b
def subtract(a, b):
return a - b
# main.py
from math_operations import add, subtract
# 関数を使う
sum_result = add(10, 5)
sub_result = subtract(10, 5)
print("足し算:", sum_result) # 15
print("引き算:", sub_result) # 5
問題1
- Pythonの標準ライブラリ
math
を使って、次の計算を行う関数を定義してください:circle_area(radius)
: 半径を引数に取り、円の面積を計算して返す関数(面積の公式はπr^2
)。square_root(x)
: 数値x
の平方根を計算して返す関数。
- 関数を使って、次の値を計算して結果を表示してください:
- 半径
7
の円の面積 - 数値
49
の平方根
- 半径
答えはこちらをクリック
import math
# 半径を引数に取り、円の面積を計算する関数
def circle_area(radius):
return math.pi * (radius ** 2)
# 数値の平方根を計算する関数
def square_root(x):
return math.sqrt(x)
# 関数の呼び出し
area = circle_area(7)
sqrt_value = square_root(49)
# 結果を表示
print("半径7の円の面積:", area) # 153.93804002589985が表示される
print("49の平方根:", sqrt_value) # 7.0が表示される
時刻情報の取得
Pythonでは、datetime
モジュールを使って現在の日付や時刻を取得することができます。これには、まず import
文を使って datetime
モジュールを読み込む必要があります。
import datetime
# 現在の日付と時刻を取得
now = datetime.datetime.now()
# 日付と時刻を表示
print("現在の日付と時刻:", now)
# 年、月、日、時刻だけを表示
print("年:", now.year)
print("月:", now.month)
print("日:", now.day)
import datetime
を使って datetime
モジュールをインポートします。datetime.datetime.now()
で現在の日付と時刻を取得し、year
, month
, day
などの属性にアクセスできます。
クラスとオブジェクト指向プログラミング(OOP)
Pythonでは、クラスとオブジェクトを使ってオブジェクト指向プログラミングを行うことができます。
オブジェクト指向プログラミング(OOP)は、現実世界の物体や概念を「オブジェクト」として扱い、そのオブジェクトが持つ「属性」や「メソッド」を定義する方法です。
OOPの基本概念は「クラス」と「オブジェクト」です。
先ほど使用したdatetimeモジュールを例に説明をすると、datetimeモジュールのdatetimeクラスを使用しました。
ほかにdateクラス、timeクラス、timedeltaクラス等があり、同じような機能をまとめたものがクラスです。
クラスとは
クラスは、オブジェクトの設計図のようなものです。クラスの中で、オブジェクトが持つデータ(属性)と、それに対する動作(メソッド)を定義します。
メソッドとは
クラスの提供する様々な機能のことをメソッドといいます。たとえばnow()というメソッドは現在の日時を取得して返す機能を持っています。
now = datetime.datetime.now()
オブジェクトとは
オブジェクトは、クラスから作られる実際のデータです。クラスは設計図であり、オブジェクトはその設計図に基づいて作られる実体です。
datetimeオブジェクトとして定義をすると時刻を保持できる変数となり、プロパティという機能で年や時間だけ切り取って表示したりすることが出来ます。
オブジェクト例
# 現在の日付と時刻を取得 オブジェクト定義
now = datetime.datetime.now()
プロパティ例
# 年、月、日、時刻だけを表示
print("年:", now.year)
print("月:", now.month)
print("日:", now.day)
クラスとオブジェクトの定義
クラスは以下のように定義できます。
class クラス名:
def __init__(self, 引数1, 引数2, ...):
# 初期化メソッド(オブジェクトが作られたときに実行される)
self.属性1 = 引数1
self.属性2 = 引数2
def メソッド名(self):
# メソッドの定義
print("メソッドが実行されました")
オブジェクトの作成と使用
# クラスを使ってオブジェクトを作成
オブジェクト名 = クラス名(引数1, 引数2, ...)
# オブジェクトのメソッドを呼び出す
オブジェクト名.メソッド名()
作成例:
class Person:
# 初期化メソッド(コンストラクタ)
def __init__(self, name, age):
self.name = name # 名前の属性
self.age = age # 年齢の属性
# メソッドの定義
def greet(self):
print(f"こんにちは、{self.name}さん! あなたは{self.age}歳です。")
# オブジェクトの作成
person1 = Person("太郎", 20)
# オブジェクトのメソッドを呼び出す
person1.greet()
解説:
class Person:
でPerson
というクラスを定義します。このクラスは、name
とage
という2つの属性を持ちます。__init__()
はコンストラクタと呼ばれ、オブジェクトが作られたときに実行されます。ここで、オブジェクトに名前と年齢を設定します。greet()
はクラスのメソッドで、名前と年齢を使って挨拶を表示します。Person("太郎", 20)
によって、name
が「太郎」、age
が20
のperson1
というオブジェクトが作られます。person1.greet()
を呼び出すと、greet
メソッドが実行され、「こんにちは、太郎さん! あなたは20歳です。」と表示されます。
問題2
自動車クラスの作成
Car
というクラスを作成しなさい。- クラスには次の属性を持たせなさい:
brand
(ブランド名、文字列)model
(モデル名、文字列)year
(製造年、整数)
- メソッドを2つ追加しなさい:
show_info()
: 車の情報(ブランド、モデル、製造年)を表示するメソッド。is_new()
: 車の製造年が2022年以降の場合、新しい車かどうかを判定して表示するメソッド。
- このクラスを使って
Car
オブジェクトを2つ作成し、メソッドshow_info()
とis_new()
を実行しなさい。
答えはこちらをクリック
class Car:
def __init__(self, brand, model, year):
# 初期化メソッドでブランド、モデル、製造年を設定
self.brand = brand
self.model = model
self.year = year
def show_info(self):
# 車の情報を表示するメソッド
print(f"ブランド: {self.brand}, モデル: {self.model}, 製造年: {self.year}")
def is_new(self):
# 製造年が2022年以降かを判定するメソッド
if self.year >= 2022:
print(f"{self.model} は新しい車です。")
else:
print(f"{self.model} は新しい車ではありません。")
# Car オブジェクトを作成
car1 = Car("Toyota", "Corolla", 2021)
car2 = Car("Tesla", "Model 3", 2023)
# メソッドの実行
car1.show_info() # Toyota Corolla 2021の情報を表示
car1.is_new() # 新しい車かどうかを判定
car2.show_info() # Tesla Model 3 2023の情報を表示
car2.is_new() # 新しい車かどうかを判定
解説
Car
クラスの作成- クラスは
class Car:
で定義され、初期化メソッド__init__
で各オブジェクトの属性を設定しています。brand
,model
,year
の3つの属性を持つように設計されています。
- クラスは
show_info()
メソッドshow_info()
は、self
を使ってオブジェクトの属性brand
,model
,year
にアクセスし、その車の情報をフォーマットして出力します。
is_new()
メソッドis_new()
メソッドは、製造年 (year
) を基に新しい車かどうかを判定します。2022年以降であれば新しい車とみなし、それ以外は古い車として扱います。
- オブジェクトの作成とメソッドの呼び出し
car1
とcar2
の2つのオブジェクトがCar
クラスから生成されています。それぞれのオブジェクトに対してshow_info()
とis_new()
を呼び出すことで、車の情報を表示し、新しい車かどうかを確認しています。
次回はこちら