Leaderboard ads banner

Hàm

Trong các bài học trước chúng ta đã từng sử dụng một số hàm có trong Python như print(), max(), range()...

Hàm Là Gì

Trong lập trình, hàm là một nhóm bao gồm một hoặc nhiều câu lệnh và được dùng để thực hiện một số tác vụ nhất định.

Hàm được chia thành hai nhóm:

  • Hàm có sẵn (built-in function): là những hàm được cung cấp sẵn bởi ngôn ngữ Python. Ví dụ như các hàm print(), range(), max()... Chúng ta không sửa đổi logic bên trong các hàm này.
  • Hàm tự định nghĩa (user-defined function): là những hàm được định nghĩa bởi các lập trình viên. Lập trình viên sẽ tự khai báo logic bên trong các hàm tự định nghĩa.

Ví dụ một hàm tự định nghĩa helloPython() như sau:

def helloPython():
    print("Hello, Python!")

helloPython() # Hiển thị: Hello, Python!

Định Nghĩa Hàm

Trong Python các hàm (tự định nghĩa) được định nghĩa sử dụng cú pháp sau:

def <function_name>(<parameters>):
    <statements>

Trong đó:

  • <function_name> là tên của hàm được định nghĩa.
  • <parameters> (tham số) là danh sách các biến số đặc biệt được sử dụng bên trong hàm. Giá trị của từng tham số được xác định khi chúng ta sử dụng hàm (hay gọi hàm). Một hàm được định nghĩa với một hoặc nhiều hoặc không có tham số nào.
  • <statement> bao gồm các câu lệnh sẽ được thực thi khi gọi hàm.

Ví dụ hàm hello() dưới đây được định nghĩa với một tham số đầu vào với tên là language:

def hello(language):
    print("Hello, %s!" %(language))

Gọi Hàm

Sau khi được định nghĩa thì để sử dụng hàm chúng ta sẽ thực hiện việc gọi hàm. Gọi hàm được thực hiện đơn giản thông qua cú pháp sau:

<function_name>(<arguments>)

Trong đó:

  • <function_name> là tên hàm được gọi.
  • <arguments> (đối số) là các giá trị truyền vào tương ứng với các tham số được định nghĩa bởi hàm được gọi.

Ví dụ sau sẽ gọi hàm hello() được định nghĩa ở ví dụ trên với đối số truyền vào là Python:

hello("Python") # Hiển thị: Hello, Python!

Số lượng đối số truyền vào khi gọi hàm cần phải tương ứng với số lượng tham số sử dụng khi định nghĩa hàm. Nếu như số lượng tham số và đối số không khớp nhau thì Python sẽ báo lỗi khi chạy.

Ví dụ nếu bạn gọi hàm hello() được định nghĩa ở trên như sau:

hello()

Bạn sẽ thấy Python báo về lỗi:

Traceback (most recent call last):
  File "function.py", line 4, in <module>
    hello()
TypeError: hello() takes exactly 1 argument (0 given)

Đối Số Mặc Định

Khi định nghĩa một hàm có sử dụng tham số chúng ta có thể gán giá trị mặc định (hay đối số mặc định) cho các tham số.

Trong ví dụ dưới đây thì hàm hello() được định nghĩa với một tham số language có giá trị mặc định là Python:

def hello(language = "Python"):
    print("Hello, %s!" %(language))

Khi gọi hàm hello() ở ví dụ trên, nếu như bạn không truyền vào đối số nào thì đối mặc định sẽ được sử dụng:

hello() # Hiển thị: Hello, Python!

Giá Trị Trả Về

Ở các ví dụ phía trước thì hàm hello() được định nghĩa để thực hiện tác vụ hiển thị thông báo ra màn hình. Tuy nhiên trong nhiều trường hợp chúng ta lại không muốn hiển bất kỳ thông báo nào khi gọi hàm, thay vào đó chúng ta cần lấy ra giá trị trả về từ hàm. Để thực hiện việc này chúng ta sẽ sử dụng từ khoá return.

Ví dụ:

def sum(a, b):
    return a + b;

Ở ví dụ trên hàmsum() sẽ trả về giá trị tổng của hai tham số ab. Chúng ta có thể sử dụng giá trị trả về này để hiển thị một thông báo hoặc gán cho một biến khác...

number_1 = 3
number_2 = 4

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

total = sum(number_1, number_2)
print("Tổng của %s và %s là %s" %(number_1, number_2, total))

Giá trị trả về khi gọi hàm sum() ở trên được gán vào biến total. Và như vậy khi chạy đoạn code trên khi chạy sẽ hiển thị kết quả:

Tổng của 3 và 4 là 7

Các hàm không sử dụng return hoặc sử dụng return (không có giá trị nào tiếp theo sau từ khoá) sẽ trả về giá trị là None:

def hello_1():
    print("Hello 1!")

def hello_2():
    print("Hello 2!")
    return

returnValue = hello_1()
print(returnValue) # Hiển thị: None
print(type(returnValue)) # Hiển thị: <type 'NoneType'>

return_value = hello_2()
print(returnValue) # Hiển thị: None
print(type(returnValue)) # Hiển thị: <type 'NoneType'>

Một lưu ý khác khi sử dụng return trong hàm đó là một khi hàm đã return (trả về giá trị) thì Python sẽ chấm dừng quá trình chạy hàm. Ví dụ:

def hello():
    print("Hello!")
    return
    print("Nice to meet you!")

hello() # Hiển thị: Hello!

Trong đoạn code trên khi gọi hàm hello() thì chỉ có câu lệnh print("Hello!") đầu tiên được chạy.

Nội dung không được để trống

Hướng Dẫn Liên Quan