再利用可能なコードブロックの整理
# 値を返す関数
def add_numbers(a, b):
"""2つの数値を足して結果を返す"""
result = a + b
return result
def calculate_area(width, height):
"""長方形の面積を計算"""
area = width * height
return area
# 戻り値の使用
sum_result = add_numbers(5, 3)
print(f"5 + 3 = {sum_result}")
room_area = calculate_area(4, 6)
print(f"部屋の面積: {room_area}平方メートル")# キーワード引数を使った呼び出し
def create_profile(name, age, city, profession):
"""プロフィールを作成"""
profile = f"{name}({age}歳)は{city}在住の{profession}です。"
return profile
# 位置引数
profile1 = create_profile("山田太郎", 28, "東京", "エンジニア")
# キーワード引数(順序を変更可能)
profile2 = create_profile(
profession="デザイナー",
name="佐藤花子",
city="大阪",
age=32
)
print(profile1)
print(profile2)# *args - 可変長位置引数
def calculate_average(*numbers):
"""任意の数の数値の平均を計算"""
if not numbers:
return 0
return sum(numbers) / len(numbers)
print(f"平均: {calculate_average(10, 20, 30)}")
print(f"平均: {calculate_average(1, 2, 3, 4, 5)}")
# **kwargs - 可変長キーワード引数
def print_info(**info):
"""任意のキーワード引数を表示"""
for key, value in info.items():
print(f"{key}: {value}")
print_info(名前="太郎", 年齢=25, 職業="エンジニア")# グローバル変数
global_message = "これはグローバル変数です"
def demo_scope():
# ローカル変数
local_message = "これはローカル変数です"
print(f"関数内から: {global_message}")
print(f"関数内から: {local_message}")
def modify_global():
global global_message
global_message = "グローバル変数が変更されました"
print(f"関数外から: {global_message}")
demo_scope()
modify_global()
print(f"変更後: {global_message}")def calculate_bmi(weight, height):
"""
BMI(体格指数)を計算する関数
Args:
weight (float): 体重(kg)
height (float): 身長(m)
Returns:
float: BMI値
Example:
>>> calculate_bmi(70, 1.75)
22.857142857142858
"""
bmi = weight / (height ** 2)
return bmi
# ドキュメンテーションの確認
print(calculate_bmi.__doc__)
# 実際の使用
result = calculate_bmi(70, 1.75)
print(f"BMI: {result:.2f}")def celsius_to_fahrenheit(celsius: float) -> float:
"""摂氏を華氏に変換"""
return (celsius * 9/5) + 32
def fahrenheit_to_celsius(fahrenheit: float) -> float:
"""華氏を摂氏に変換"""
return (fahrenheit - 32) * 5/9
def temperature_converter(temp: float, unit: str) -> dict:
"""温度変換の統合関数"""
if unit.lower() == 'c':
fahrenheit = celsius_to_fahrenheit(temp)
return {
'original': f"{temp}°C",
'converted': f"{fahrenheit:.2f}°F"
}
elif unit.lower() == 'f':
celsius = fahrenheit_to_celsius(temp)
return {
'original': f"{temp}°F",
'converted': f"{celsius:.2f}°C"
}
# 使用例
result = temperature_converter(25, 'C')
print(f"{result['original']} = {result['converted']}")def check_password_strength(password: str) -> dict:
"""パスワードの強度をチェック"""
checks = {
'length': len(password) >= 8,
'uppercase': any(c.isupper() for c in password),
'lowercase': any(c.islower() for c in password),
'digit': any(c.isdigit() for c in password),
'special': any(c in "!@#$%^&*" for c in password)
}
score = sum(checks.values())
if score >= 4:
strength = "強い"
elif score >= 3:
strength = "普通"
else:
strength = "弱い"
return {
'strength': strength,
'score': score,
'checks': checks
}
# テスト
result = check_password_strength("MyPass123!")
print(f"パスワード強度: {result['strength']}")
print(f"スコア: {result['score']}/5")# 通常の関数
def square(x):
return x ** 2
# ラムダ関数(無名関数)
square_lambda = lambda x: x ** 2
print(f"通常の関数: {square(5)}")
print(f"ラムダ関数: {square_lambda(5)}")
# ラムダ関数の応用
numbers = [1, 2, 3, 4, 5]
# map() でラムダ関数を使用
squared = list(map(lambda x: x ** 2, numbers))
print(f"二乗: {squared}")
# filter() でラムダ関数を使用
evens = list(filter(lambda x: x % 2 == 0, numbers))
print(f"偶数: {evens}")基本的な計算機能を持つ関数を作成してください:
文字列を処理する関数を作成してください:
数値リストの統計を計算する関数を作成してください:
今日学んだ関数の概念:
基本概念: - 関数の定義と呼び出し - 引数と戻り値 - デフォルト引数 - キーワード引数 - 可変長引数
高度な概念: - スコープと名前空間 - ドキュメント文字列 - タイプヒント
ベストプラクティス: - 関数は1つのことを行う - 説明的な名前を使用 - ドキュメンテーションを書く - 適切な引数を設計 - 戻り値を明確にする
応用: - ラムダ関数 - 関数型プログラミング - 実践的な例
次回のセッションでは: - クラスとオブジェクト指向プログラミング - クラスの定義 - インスタンスとメソッド - 継承とポリモーフィズム
今日の復習として: 1. 練習問題をすべて完成させる 2. 自分で新しい関数を作成する 3. ドキュメント文字列を書く練習 4. ラムダ関数を使った例を試す
関数はプログラミングの基礎です。
しっかりマスターしましょう!
次回もお楽しみに! 🐍⚙️
Python チュートリアル