🎛️ Functions Parameters - Làm Functions Linh Hoạt Hơn
🎛️ Ví Dụ Dễ Hiểu
Hãy tưởng tượng Function như một máy nướng bánh thông minh! Parameters là những nút điều chỉnh giúp bạn tùy chỉnh: nhiệt độ, thời gian, loại bánh. Có thể đặt mặc định, hoặc điều chỉnh theo ý muốn!
🤔 Tại Sao Cần Parameters Linh Hoạt?
Trong cuộc sống, chúng ta thường cần tùy chỉnh theo tình huống:
- 🍕 Đặt pizza: Size (S/M/L), topping, độ cay
- 🚗 Gọi taxi: Điểm đi, điểm đến, loại xe
- 📚 Mượn sách: Tên sách, thời gian, có cần gia hạn không
- 🎮 Chơi game: Độ khó, nhân vật, chế độ chơi
Python functions cũng cần khả năng linh hoạt tương tự!
🎯 Default Values - Giá Trị Mặc Định
📌 Cú Pháp Cơ Bản
def function_name(param1, param2=default_value):
"""Function với giá trị mặc định"""
# Code thực hiện
return result
🌟 Ví Dụ Thực Tế
def greet_user(name, greeting="Xin chào", emoji="👋"):
"""Chào với lời chào tùy chỉnh"""
print(f"{emoji} {greeting} {name}!")
# Sử dụng giá trị mặc định
greet_user("An") # 👋 Xin chào An!
greet_user("Bình", "Chào mừng") # 👋 Chào mừng Bình!
greet_user("Châu", "Hẹn gặp lại", "👋") # 👋 Hẹn gặp lại Châu!
# Tất cả đều hoạt động!
def calculate_rectangle_area(length, width=1):
"""Tính diện tích hình chữ nhật với chiều rộng mặc định"""
return length * width
# Hình vuông (chiều rộng = chiều dài)
square_area = calculate_rectangle_area(5) # 5 * 1 = 5
print(f"Diện tích hình vuông: {square_area}")
# Hình chữ nhật
rectangle_area = calculate_rectangle_area(5, 3) # 5 * 3 = 15
print(f"Diện tích hình chữ nhật: {rectangle_area}")
⚠️ Lưu Ý Quan Trọng
# ✅ ĐÚNG - Default values ở cuối
def good_function(param1, param2, param3="default"):
pass
# ❌ SAI - Default values ở giữa
def bad_function(param1, param2="default", param3):
pass # SyntaxError!
🏷️ Keyword Arguments - Tham Số Tên
📌 Cú Pháp
# Gọi function với tên tham số
function_name(param1=value1, param2=value2)
🌟 Ví Dụ Thực Tế
def create_student_info(name, age, class_name, average_score=0.0, gender="Không xác định"):
"""Tạo thông tin học sinh với keyword arguments"""
student_info = {
"name": name,
"age": age,
"class_name": class_name,
"average_score": average_score,
"gender": gender
}
return student_info
# Sử dụng keyword arguments - thứ tự không quan trọng!
student_an = create_student_info(
name="Nguyễn Văn An",
age=16,
class_name="9A",
average_score=8.5,
gender="Nam"
)
student_binh = create_student_info(
class_name="9B", # Thứ tự khác nhau
name="Trần Thị Bình",
gender="Nữ",
age=15,
average_score=7.8
)
print("Thông tin An:", student_an)
print("Thông tin Bình:", student_binh)
🎯 Kết Hợp Positional và Keyword
def calculate_interest(principal, rate, years, frequency=12):
"""Tính lãi suất với keyword arguments"""
periods = years * frequency
final_amount = principal * (1 + rate/frequency) ** periods
return final_amount
# Positional arguments trước
amount_1 = calculate_interest(1000000, 0.05, 3)
# Keyword arguments sau
amount_2 = calculate_interest(1000000, 0.05, 3, frequency=6)
# Tất cả keyword arguments
amount_3 = calculate_interest(
principal=2000000,
rate=0.06,
years=2,
frequency=4
)
print(f"Lãi suất 1: {amount_1:,.0f} VNĐ")
print(f"Lãi suất 2: {amount_2:,.0f} VNĐ")
print(f"Lãi suất 3: {amount_3:,.0f} VNĐ")
📦 *args - Nhiều Tham Số
📌 Cú Pháp
def function_name(*args):
"""Function nhận nhiều tham số"""
# args là một tuple chứa tất cả tham số
pass
🌟 Ví Dụ Thực Tế
def calculate_sum(*numbers):
"""Tính tổng của nhiều số"""
if not numbers:
return 0
return sum(numbers)
# Có thể truyền bao nhiêu số cũng được!
sum_1 = calculate_sum(1, 2, 3) # 6
sum_2 = calculate_sum(1, 2, 3, 4, 5) # 15
sum_3 = calculate_sum(10, 20, 30, 40, 50, 60) # 210
sum_4 = calculate_sum() # 0
print(f"Tổng 1: {sum_1}")
print(f"Tổng 2: {sum_2}")
print(f"Tổng 3: {sum_3}")
print(f"Tổng 4: {sum_4}")
def create_friends_list(*friend_names):
"""Tạo danh sách bạn bè"""
if not friend_names:
return "Chưa có bạn nào"
friends_list = []
for name in friend_names:
friends_list.append(f"👋 {name}")
return "\n".join(friends_list)
# Có thể thêm bao nhiêu bạn cũng được!
friends_1 = create_friends_list("An", "Bình")
friends_2 = create_friends_list("An", "Bình", "Châu", "Dung", "Em")
print("Danh sách bạn bè 1:")
print(friends_1)
print("\nDanh sách bạn bè 2:")
print(friends_2)
🎯 Kết Hợp *args Với Tham Số Khác
def calculate_average_score(student_name, *subject_scores):
"""Tính điểm trung bình của học sinh"""
if not subject_scores:
return f"{student_name}: Chưa có điểm nào"
average_score = sum(subject_scores) / len(subject_scores)
return f"{student_name}: {average_score:.1f}"
# Sử dụng
score_an = calculate_average_score("An", 8.5, 7.0, 9.0, 8.0)
score_binh = calculate_average_score("Bình", 9.0, 8.5, 7.5)
score_chau = calculate_average_score("Châu") # Chưa có điểm
print(score_an)
print(score_binh)
print(score_chau)
📋 **kwargs - Tham Số Từ Điển
📌 Cú Pháp
def function_name(**kwargs):
"""Function nhận tham số dạng từ điển"""
# kwargs là một dictionary chứa tất cả tham số
pass
🌟 Ví Dụ Thực Tế
def create_student(**info):
"""Tạo học sinh với thông tin linh hoạt"""
student = {
"name": info.get("name", "Chưa có tên"),
"age": info.get("age", 0),
"class_name": info.get("class_name", "Chưa xếp lớp"),
"average_score": info.get("average_score", 0.0),
"hobbies": info.get("hobbies", []),
"address": info.get("address", "Chưa có địa chỉ")
}
return student
# Có thể truyền bất kỳ thông tin nào!
student_an = create_student(
name="Nguyễn Văn An",
age=16,
class_name="9A",
average_score=8.5,
hobbies=["lập trình", "đọc sách"]
)
student_binh = create_student(
name="Trần Thị Bình",
age=15,
class_name="9B",
address="123 Phố Huế, Hà Nội",
average_score=7.8
)
print("Học sinh An:", student_an)
print("Học sinh Bình:", student_binh)
def calculate_travel_cost(**costs):
"""Tính tổng chi phí du lịch"""
total_cost = 0
cost_details = []
for cost_type, amount in costs.items():
total_cost += amount
cost_details.append(f" {cost_type}: {amount:,} VNĐ")
return total_cost, cost_details
# Tính chi phí du lịch
total, details = calculate_travel_cost(
hotel=2000000,
food=1500000,
transport=800000,
shopping=1000000,
entertainment=500000
)
print("💰 CHI PHÍ DU LỊCH")
print("=" * 30)
for detail in details:
print(detail)
print("-" * 30)
print(f"Tổng cộng: {total:,} VNĐ")