9.クラスとオブジェクト指向プログラミング (Classes and Object-Oriented Programming)
・Pythonにおけるクラスとオブジェクト指向プログラミング(OOP)は、コードの再利用性と効率性を高めるための重要な仕組みです。クラスはオブジェクトの設計図であり、__init__メソッドを使って属性を初期化します。オブジェクトはクラスから生成される実体です。メソッドはオブジェクトの振る舞いを定義します。たとえば、Personクラスでは、greetメソッドを定義して挨拶を返す機能を実装しています。
さらに、応用例ではOOPの基本概念である継承やポリモーフィズムを用いています。Animalクラスを基底クラスとして、DogやCatといったサブクラスを作成し、それぞれが固有の speakメソッドを実装しています。これにより、コードを再利用しながら個別の振る舞いを設定できます。また、Birdクラスではsuper()を使って親クラスの属性を引き継ぎつつ、新しい属性やメソッドを追加しています。この柔軟性がOOPの強力な利点です。
10.イテレータとジェネレータ (Iterators and Generators)
イテレータとジェネレータは、Pythonで効率的にデータを操作するための強力なツールです。
イテレータ
イテレータは、要素を一つずつ取り出せるオブジェクトです。リストやタプルなどのコレクション型オブジェクトは、iter()関数を使ってイテレータに変換できます。イテレータでは、next()関数を呼び出すことで次の要素を取得できます。この仕組みにより、メモリ効率の良いデータ処理が可能です。たとえば、大量のデータを一度に処理せずに、順次処理したい場合に有用です。
ジェネレータ
ジェネレータはイテレータを簡単に作成できる関数の一種です。関数内でyield文を使うことで、計算結果を一時的に返し、呼び出し元に処理を戻します。次に呼び出された際は、前回の状態を保持したまま再開されます。これにより、膨大なデータの逐次生成が可能です。
たとえば、generate_numbers関数は0から4までの数値を生成します。forループでジェネレータを反復処理することで、必要なデータを1つずつ取得できます。ジェネレータはメモリ効率に優れ、無限系列や大規模なデータセットの処理に特に適しています。
11.ラムダ式 (Lambda Functions)
・ラムダ式は、Pythonで簡潔に無名関数を定義する方法です。通常の関数と異なり、lambdaキーワードを用いて1行で記述でき、関数名を持ちません。構文はlambda 引数: 式となっており、式の評価結果が返されます。たとえば、lambda x: x * 2は、引数xを2倍する関数を作成します。このようにシンプルな処理を行う関数を一時的に使いたい場合に便利です。リストのフィルタリングやソートなど、他の関数と組み合わせて使用する場面が多いです。
12.データ構造操作 (Data Structure Operations)
・Pythonにはリスト、タプル、辞書、集合といった基本的なデータ構造が用意されており、それぞれに適した操作が可能です。
- リスト操作: リストは可変長のデータ構造で、
append()で要素を追加したり、remove()で削除できます。順序が維持され、インデックスを使った操作も可能です。 - タプル操作: タプルはイミュータブルなデータ構造で、値の変更が禁止されています。要素のアクセスはインデックスを使用し、データの整合性を保つために適しています。
- 辞書操作: キーと値のペアでデータを管理する辞書は、キーを使って値を効率的に検索・追加・更新できます。
data["key"] = valueの形式で新しい要素を追加可能です。 - 集合操作: 集合は順序を持たず、重複を許さないデータ構造です。
add()で要素を追加し、remove()で削除できます。ユニークなデータを管理したい場合や集合演算(和・積・差)に利用されます。
これらのデータ構造は、プログラムの効率的な設計とデータ管理に欠かせません。
9.クラスとオブジェクト指向プログラミング (Classes and Object-Oriented Programming)
例: class, __init__, メソッドの定義
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def greet(self):
return f”こんにちは、私の名前は{self.name}で、{self.age}歳です。”
person = Person(“TARO”, 55)
print(person.greet())
Pythonにおけるオブジェクト指向プログラミング(OOP)の基本的な用例を以下に示します。
この例では、クラス、インスタンス、継承、ポリモーフィズムを含む基本的なOOPの概念を使用しています。
【応用】例: 動物園管理システム
基本クラス(親クラス)
class Animal:
def init(self, name, age):
self.name = name
self.age = age
def speak(self):
return f"{self.name} makes a sound."
def __str__(self):
return f"{self.name}, {self.age} years old."
サブクラス(子クラス): 犬
class Dog(Animal):
def speak(self):
return f”{self.name} says: Woof!”
サブクラス(子クラス): 猫
class Cat(Animal):
def speak(self):
return f”{self.name} says: Meow!”
サブクラス(子クラス): 鳥
class Bird(Animal):
def init(self, name, age, can_fly=True):
super().init(name, age)
self.can_fly = can_fly
def speak(self):
return f"{self.name} says: Chirp!"
def fly(self):
if self.can_fly:
return f"{self.name} is flying!"
else:
return f"{self.name} cannot fly."
インスタンスの作成
dog = Dog(name=”Buddy”, age=3)
cat = Cat(name=”Whiskers”, age=2)
bird = Bird(name=”Tweety”, age=1, can_fly=False)
オブジェクトの振る舞いの確認
animals = [dog, cat, bird]
for animal in animals:
print(animal) # オブジェクトの情報を出力
print(animal.speak()) # オブジェクト固有のspeakメソッドを呼び出し
鳥特有の動作を確認
print(bird.fly())
________________________________________
10. イテレータとジェネレータ (Iterators and Generators)
• イテレータ
リストをイテレータに変換
numbers = [1, 2, 3, 4]
iterator = iter(numbers)
イテレータを次に進める
print(next(iterator)) # 1
print(next(iterator)) # 2
例: yield, next()
• ジェネレータ
def generate_numbers():
for i in range(5):
yield i
for num in generate_numbers():
print(num)
________________________________________
11. ラムダ式 (Lambda Functions)
例: lambda x: x * 2
double = lambda x: x * 2
print(double(5)) # 10
________________________________________
12. データ構造操作 (Data Structure Operations)
例: リスト、タプル、辞書、集合の操作
•リスト操作
numbers = [1, 2, 3, 4, 5]
numbers.append(6)
print(numbers) # [1, 2, 3, 4, 5, 6]
•タプル操作
1. タプルの作成
•タプルの基本的な作成
fruits = (“apple”, “banana”, “cherry”)
print(fruits) # (‘apple’, ‘banana’, ‘cherry’)
•タプルの要素アクセス
fruits = (“apple”, “banana”, “cherry”)
print(fruits[0]) # apple
print(fruits[-1]) # cherry
• 辞書操作
data = {“name”: “TARO”, “age”: 55}
data[“city”] = “Tokyo”
print(data) # {‘name’: ‘TARO’, ‘age’: 55, ‘city’: ‘Tokyo’}
•集合操作
1.集合の作成
# 集合の基本作成
fruits = {“apple”, “banana”, “cherry”}
print(fruits) # {‘apple’, ‘cherry’, ‘banana’} (順序は保証されない)
2.要素の追加と削除
fruits = {“apple”, “banana”}
fruits.add(“cherry”)
print(fruits) # {‘apple’, ‘banana’, ‘cherry’}
fruits.remove(“banana”)
print(fruits) # {‘apple’, ‘cherry’}
________________________________________