5 Hàm là gì? cách sử dụng hàm trong python

Chuyên mục: Python
Cập nhật: 27/11/2024
5 Hàm là gì? cách sử dụng hàm trong python

Trong Python, hàm (function) là một khối mã độc lập, được định nghĩa để thực hiện một tác vụ cụ thể nào đó. Python cung cấp cú pháp đơn giản để định nghĩa và sử dụng hàm. Dưới đây là các đặc trưng nổi bật của hàm trong Python:

Định nghĩa hàm bằng def:

Hàm trong Python được định nghĩa bằng từ khóa def, theo sau là tên hàm và danh sách tham số (nếu có), cuối cùng là dấu hai chấm : và một khối mã thụt vào (indentation) để xác định thân hàm.

Cú pháp:

def ten_ham(tham_so1, tham_so2):
    # Thực hiện các tác vụ
    return gia_tri

Không cần khai báo kiểu dữ liệu

Python là một ngôn ngữ lập trình dynamically typed, có nghĩa là bạn không cần phải chỉ định kiểu dữ liệu của tham số và giá trị trả về. Python tự động xác định kiểu dữ liệu của tham số và giá trị trả về khi chương trình chạy.

Ví dụ:

def sum(a, b):
    return a + b
#Không cần khai báo a và b là kiểu số nguyên hay kiểu số thực. Python sẽ tự động nhận diện.

Trả về giá trị bằng return

Hàm trong Python có thể trả về một giá trị sử dụng câu lệnh return. Nếu không có return, hàm sẽ trả về giá trị mặc định là None.

def tong(a, b):
    return a + b

result = tong(3, 5)  # result = 8

Có thể có tham số mặc định:

Python cho phép bạn chỉ định giá trị mặc định cho tham số của hàm. Nếu khi gọi hàm mà không truyền tham số cho tham số đó, giá trị mặc định sẽ được sử dụng.

def greet(name="John"):
    print("Chào", name)

greet()        # Chào John
greet("Alice") # Chào Alice

Hỗ trợ tham số biến (variable-length arguments):

Python cung cấp khả năng nhận số lượng tham số không xác định thông qua *args (tham số không có tên) và **kwargs (tham số có tên).

  • *args cho phép bạn truyền một số lượng tham số bất kỳ mà không cần chỉ định tên tham số.
  • **kwargs cho phép bạn truyền tham số dưới dạng từ điển (key-value pair).
def sum_all(*args):
    return sum(args)

print(sum_all(1, 2, 3, 4))  # 10
#####
def print_info(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

print_info(name="John", age=30)
#name: John  
#age: 30

Hàm là đối tượng bậc nhất (First-class objects):

Trong Python, hàm là đối tượng bậc nhất (first-class objects), có nghĩa là bạn có thể:

  • Gán hàm vào biến.
  • Truyền hàm như một tham số cho hàm khác.
  • Trả về hàm từ một hàm.
def greet():
    return "Chào bạn!"

hello = greet  # Gán hàm greet vào biến hello
print(hello())  # Gọi hàm thông qua biến hello

Hàm lambda (Anonymous functions):

Python cũng hỗ trợ các hàm lambda, hay còn gọi là hàm ẩn danh, là các hàm không cần khai báo tên. Hàm lambda thường được dùng khi cần một hàm ngắn gọn để truyền vào các hàm khác.

lambda tham_so: biểu_thức
####
# Hàm lambda để cộng 2 số
add = lambda x, y: x + y
print(add(2, 3))  # 5

Hỗ trợ hàm đệ quy (Recursion)

Python hỗ trợ hàm đệ quy, tức là hàm có thể gọi chính nó để giải quyết các bài toán phức tạp theo cách chia nhỏ vấn đề.

Ví dụ hàm tính giai thừa:

def factorial(n):
    if n == 0:
        return 1
    else:
        return n * factorial(n-1)

print(factorial(5))  # 120

Hàm được gọi trực tiếp (Call by Object Reference):

Python sử dụng cơ chế call by object reference (hoặc call by reference đối với các đối tượng có thể thay đổi và call by value đối với kiểu dữ liệu bất biến). Điều này có nghĩa là:

  • Nếu tham số là kiểu dữ liệu bất biến (như số nguyên, chuỗi), giá trị của nó sẽ không bị thay đổi bên trong hàm.
  • Nếu tham số là kiểu dữ liệu có thể thay đổi (như danh sách, từ điển), các thay đổi trong hàm sẽ ảnh hưởng đến đối tượng bên ngoài hàm.

Ví dụ (kiểu dữ liệu bất biến):

def change_value(a):
    a = 10
x = 5
change_value(x)
print(x)  # 5, không thay đổi

Ví dụ (kiểu dữ liệu có thể thay đổi):

def change_list(lst):
    lst.append(4)

my_list = [1, 2, 3]
change_list(my_list)
print(my_list)  # [1, 2, 3, 4]