1. Định nghĩa hàm trong Python

Trong Python, hàm là một khối các câu lệnh liên quan được xây dựng để thực hiện một tác vụ tính toán, xử lý logic hoặc kiểm tra điều kiện trong chương trình.

Sử dụng hàm trong Python nhằm mục đích gọi và sử dụng một tác vụ, hành động nhiều lần mà trong hàm đã được định nghĩa.

Trong ngôn ngữ lập trình Python, ta có thể bắt gặp hoặc đã sử dụng nhiều hàm có sẵn. Ví dụ như hàm len(), range()… Ngoài những hàm có sẵn trong thư viện chuẩn Python, ta còn có thể tự định nghĩa một hàm mới để phục vụ phù hợp với công việc đang thực hiện ở chương trình.

Chúng ta có thể tạo một hàm Python bằng từ khóa def. Ví dụ tạo một hàm có tên là “hello” – trong hàm này sẽ có câu lệnh hiển thị ra màn hình “Xin chao, laptrinhtudau.com!” thông qua từ khóa def như sau:

# Khai bao ham hello
def hello():
    print("Xin chao, laptrinhtudau.com!")

Ở trên chỉ là bước khai báo hàm qua thông qua từ khóa def, để gọi hàm và hiển thị kết quả ta cần có lời gọi đến tên của hàm trong chương trình như sau:

# Khai bao ham hello
def hello():
    print("Xin chao, laptrinhtudau.com!")

# Goi va thuc thi ham hello()
hello()

Kết quả:

Xin chao, laptrinhtudau.com!

Chú ý: Khi gọi hàm cần sử dụng thêm hai dấu ngoặc tròn “()” để báo hiệu một hàm được gọi. Ví dụ gọi hàm hello() ở chương trình trên!

2. Hàm có đối số trong Python

2.1 Truyền đối số vào hàm trong Python

Một hàm có đối số là việc truyền các giá trị vào bên trong dấu ngoặc tròn “()” của hàm. Trong một hàm mà ta định nghĩa, hoàn toàn có thể có bất kỳ số lượng đối số nào được phân tách bằng dấu phẩy “,”. Trong một số trường hợp, đối số còn được hiểu là các giá trị đầu vào cho một hàm.

Trong ví dụ này, chúng ta sẽ tạo một hàm có đối số đầu vào là biến name và sử dụng hàm print() để hiển thị giá trị của đối số đó sau khi truyền vào hàm hello(name)

# Khai bao bien name
name = "Laptrinhtudau.com"

# Khai bao ham hello(name)
def hello(name):
    # Hien thi gia tri doi so name 
    print("Xin chao, " + name)

# Goi ham va truyen vao bien name
hello(name)

Kết quả:

Xin chao, Laptrinhtudau.com

Ví dụ tiếp theo, chúng ta sẽ tạo một hàm đơn giản để kiểm tra xem số được truyền làm đối số cho hàm là chẵn hay lẻ.

# Khai bao ham chanle(x)
def chanle(x):
    if (x % 2 == 0):
        print("X la so chan")
    else:
        print("X la so le")
 
# Goi ham va truyen cac gia tri 
chanle(2)
#chanle(3)

Kết quả:

X la so chan

Có thể cùng lúc truyền vào hàm với 2 hoặc nhiều đối số. Ví dụ truyền vào hàm hello(ho,ten) với hai đối số là hoten như sau:

# Khai bao bien hai bien ho, ten 
ho = "Laptrinhtudau"
ten = ".com"

# Khai bao ham hello(ho,ten)
def hello(ho,ten):
    # Hien thi gia tri doi so truyen vao ham
    print("Xin chao, " + ho + ten)
    
# Goi ham va truyen vao hai bien ho,ten
hello(ho,ten)

Kết quả:

Xin chao, Laptrinhtudau.com

2.2 Đối số mặc định của hàm trong Python

Hàm trong Python có thể được khởi tạo một đối số mặc định. Đối số mặc định là một tham số giả định một giá trị mặc định nếu một giá trị không được cung cấp trong lệnh gọi hàm cho đối số đó. Ví dụ sau sử dụng đối số mặc định y = 20 cho hàm

# Khai bao ham myFun() voi doi so mac dinh y = 20
def myFun(x, y=20):
    print("x: ", x)
    print("y: ", y)

# Goi ham va chi truyen gia tri x = 10
myFun(10)

Kết quả:

x: 10
y: 20

Ví dụ tiếp theo, khai báo một hàm có các đối số mang các giá trị mặc định tương ứng. Khi gọi hàm và không có giá trị đối số nào truyền vào hàm thì các giá trị mặc định của đối số sẽ được sử dụng:

# Khai bao ham myFun() voi doi so mac dinh x =30, y = 20
def myFun(x = 30, y=20):
    print("Gia tri mac dinh x: ", x)
    print("Gia tri mac dinh y: ", y)

# Goi ham va khong truyen doi so
myFun()

Kết quả:

Gia tri mac dinh x trong ham: 30
Gia tri mac dinh y trong ham: 20

2.3 Đối số **kwargs của hàm trong Python

Nếu bạn không biết chính xác sẽ có bao nhiêu đối số sẽ được truyền vào hàm, khi đó hãy sử dụng hai dấu sao “**” trước tên đối số trong định nghĩa hàm. Ví dụ def myFunc(**kwargs)

Bằng cách truyền đối số **kwargs này vào hàm, hàm sẽ nhận giá trị đầu vào là một Dict  và có thể truy cập các mục tương ứng như truy cập các phần tử có trong Dict

# Khai bao ham hello(**info)
def hello(**info):
    # Hien thi gia tri doi so info["fname"], info["lname"]
    print("Xin chao, " + info["fname"] + info["lname"])

# Goi ham va truyen vao ba doi so: fname, lname, age
hello(fname = "Laptrinhtudau", lname=".com", age = 20)

Kết quả:

Xin chao, Laptrinhtudau.com

3. Truyền List vào hàm Python

Bạn có thể truyền bất kỳ kiểu dữ liệu nào của đối số tới một hàm như: một chuỗi, số, List, Dict, Set, Tuple… và nó sẽ được coi là cùng một kiểu dữ liệu bên trong hàm.

Ví dụ: Nếu bạn truyền một List dưới dạng một đối số vào hàm, khi truyền vào hàm nó sẽ vẫn là một kiểu List khi nó đến hàm. Và khi đó ta hoàn toàn có thể thao tác với List này như bên ngoài hàm.

# Khai bao list gom 3 phan tu
vehicle = ["oto", "xe may", "may bay"]

# Khai bao ham myFun(vehicle)
def myFun(vehicle):
    # Duyet list dau vao    
    for x in vehicle:
        print(x)

# Goi ham myFun(vehicle) va truyen vao list
myFun(vehicle)

Tương tự, ta cũng có thể truyền một kiểu Set làm đối số đầu vào cho hàm như sau:

# Khai bao set gom 3 phan tu
vehicle = {"oto", "xe may", "may bay"}

# Khai bao ham myFun(vehicle)
def myFun(vehicle):
    # Duyet set dau vao    
    for x in vehicle:
        print(x)

# Goi ham myFun(vehicle) va truyen vao set
myFun(vehicle)

Kết quả:

oto
xe may
may bay

4. Hàm có giá trị trả về trong Python

Để cho phép một hàm trả về một giá trị, ta cần sử dụng câu lệnh return. Câu lệnh return được sử dụng trong hàm với mục đích thoát khỏi một hàm và quay lại trình gọi hàm và trả về giá trị hoặc mục dữ liệu được chỉ định cho trình gọi.

Ví dụ sử dụng câu lệnh return để trả về kết quả của phép tính a + b cho hàm sum(a,b) – với a, b là hai đối số đầu vào của hàm sum()

# Khai bao hai bien a, b
a = 5
b = 2

# Khai bao ham sum(a,b)
def sum(a,b):
    # Tra ve gia tri a + b cho ham sum(a,b)
    return a + b

# Hien thi gia tri tra ve cua ham sum(5,2)
print(sum(5,2))

Kết quả:

7

Ở ví dụ trên, ta thực hiện tính toán a + b và trả về một giá trị cho câu lệnh return. Tuy nhiên, ta cũng có thể đồng thời trả về hai hoặc nhiều giá trị trong câu lệnh return như sau:

# Khai bao hai bien a, b
a = 5
b = 2

# Khai bao ham square(a,b)
def square(a,b):
    # Binh phuong gia tri a, b
    a = a ** 2
    b = b ** 2
    # Tra ve 2 gia tri a, b binh phuong
    return a,b

# Khai bao 2 bien a_square, b_square de nhan 2 gia tri tra ve cua ham square(a,b)
(a_square,b_square) = square(a,b)

# Hien thi gia tri a_square, b_square 
print("A binh phuong: {0}".format(a_square))
print("B binh phuong: {0}".format(b_square))

Kết quả:

A binh phuong: 25
B binh phuong: 4