22/08/2018, 11:22

Tham số hàm Python

Trong bài trước chúng ta đã tìm hiểu về hàm Python tích hợp sẵn và hàm Python do người dùng định nghĩa với số lượng tham số tùy biến. Bạn sẽ biết cách để định nghĩa hàm bằng cách sử dụng tham số mặc định, keyword và tham số tùy biến trong bài này. Tùy vào việc ...

Trong bài trước chúng ta đã tìm hiểu về hàm Python tích hợp sẵn và hàm Python do người dùng định nghĩa với số lượng tham số tùy biến. Bạn sẽ biết cách để định nghĩa hàm bằng cách sử dụng tham số mặc định, keyword và tham số tùy biến trong bài này.

Tùy vào việc bạn định nghĩa hàm Python theo cách nào mà chúng ta có thể gọi hàm khác nhau, tất nhiên, dù gọi hàm theo cách nào thì kết quả cuối cùng vẫn hợp lý và giống nhau.

Tham số của hàm Python

Trong bài hàm Python do người dùng định nghĩa, chúng ta đã biết cách định nghĩa và gọi một hàm, giống như ví dụ dưới đây:

def Xin_chao(ten,loi_chao):
"""Hàm Xin_chao chào một người
với thông điệp cho trước """
print("Xin chào",ten + ', ' + loi_chao)

Xin_chao("Nam","đọc bài trên Quantrimang.com vui vẻ nha!")

Khi chạy code trên, ta sẽ nhận được dòng chữ trên màn hình như sau:

Xin chào Nam, đọc bài trên Quantrimang.com vui vẻ nha!

Như bạn thấy, hàm Xin_chao() này có 2 tham số. Do đó, nếu chúng ta gọi hàm với 2 tham số, nó sẽ chạy "ngon lành" và không gặp phải thông báo lỗi nào.

Nếu gọi hàm với số tham số khác 2, trình thông dịch sẽ hiển thị thông báo lỗi. Nếu muốn, bạn có thể thử gọi hàm Xin_chao() trên với 1 tham số và không có tham số. 

#Thông báo lỗi khi gọi hàm Xin_chao() với 1 tham số
TypeError: Xin_chao() missing 1 required positional argument: 'loi_chao'

#Thông báo lỗi khi gọi hàm Xin_chao() mà không có tham số
TypeError: Xin_chao() missing 2 required positional arguments: 'ten' and 'loi_chao'

Bên cạnh việc định nghĩa hàm với số tham số cố định, bạn có thể dùng những cách mà chúng tôi giới thiệu dưới đây để tạo số tham số tùy biến cho hàm:

Tham số mặc định trong hàm Python

Trong Python, tham số của hàm có thể có giá trị mặc định. Chúng ta có thể cung cấp giá trị mặc định này cho một tham số bằng cách sử dụng toán tử gán (=) như ví dụ dưới đây:

def Xin_chao(ten, loi_chao = "đọc bài Quantrimang.com vui nha!"):
  """
  Hàm này chào một người với thông điệp cho trước.

   Nếu thông điệp không được cung cấp,
nó sẽ được mặc định là "đọc bài Quantrimang.com vui nha!"
"""
print("Xin chào",ten + ', ' + loi_chao)

Xin_chao("Hải")
Xin_chao("Dũng","bạn khỏe không?")

Khi chạy code trên, ta có kết quả đầu ra như sau:

Xin chào Hải, đọc bài Quantrimang.com vui nha!
Xin chào Dũng, bạn khỏe không?

Trong hàm này, tham số ten không có giá trị mặc định và bắt buộc phải có khi gọi hàm. Tham số loi_chao có giá trị mặc định là "đọc bài Quantrimang.com vui nha!". Vì vậy, khi gọi hàm bạn có thể cung cấp tham số này hoặc không. Nếu cung cấp tham số loi_chao, nó sẽ ghi đè lên giá trị mặc định.

Trong một hàm, số lượng tham số có giá trị mặc định không bị giới hạn, nhưng một khi có tham số mặc định, tất cả các tham số nằm bên phải của tham số mặc định cũng phải có giá trị mặc định. Nghĩa là, các tham số không mặc định không thể nằm sau các tham số mặc định. Ví dụ, nếu bạn định nghĩa hàm Xin_chao() như sau:

def Xin_chao(loi_chao = "đọc bài Quantrimang.com vui nha!",ten):

Thì sẽ nhận được thông báo lỗi:

SyntaxError: non-default argument follows default argument

Tham số keyword trong Python

Khi gọi một hàm với vài giá trị, những giá trị này sẽ được gán cho các tham số theo vị trí của chúng. Ví dụ, trong hàm Xin_chao() ở trên, khi gọi Xin_chao("Dũng","bạn khỏe không?"), giá trị "Dũng" được gán cho tham số ten và giá trị "bạn khỏe không?" được gán cho loi_chao.

Python cho phép gọi hàm bằng các tham số keyword. Khi gọi hàm theo cách nay, thứ tự (vị trí) của tham số có thể thay đổi, nhưng kết quả vẫn hợp lệ và tương tự các cách gọi hàm khác.

# 2 tham số keyword
Xin_chao(ten = "Dũng",loi_chao = "bạn khỏe không?")
# 2 tham số keyword, thứ tự tham số thay đổi
Xin_chao(loi_chao = "bạn khỏe không?",ten = "Dũng")
# 1 tham số keyword, 1 theo vị trí
Xin_chao("Dũng",loi_chao = "bạn khỏe không?")

Như bạn thấy bên trên, có thể kết hợp các tham số theo keyword hoặc vị trí khi gọi hàm. Nhưng phải nhớ rằng các tham số keyword phải đi sau tham số theo vị trí. Nếu tham số theo vị trí ở sau tham số keyword bạn sẽ nhận được thông báo lỗi:

Xin_chao(ten = "Dũng","bạn khỏe không?")

Thông báo lỗi:

SyntaxError: non-keyword argument after keyword argument

Tham số tùy biến trong hàm Python

Đôi khi, ta không biết trước số lượng tham số sẽ được truyền vào hàm, đó là lúc cần phải sử dụng cách gọi hàm với số lượng tham số tùy biến.

Trong định nghĩa hàm, ta sử dụng dấu hoa thị * trước tên tham số để biểu thị loại tham số, như ví dụ dưới đây:

def Xin_chao(*ten_chao):
    """
    Hàm này sẽ chào một danh sách người cho trước
    """
    for ten in ten_chao:
       print("Xin chào",ten)

Xin_chao("Hải","Hoa","Công","Sơn")

Khi chạy code trên ta được kết quả như sau:

Xin chào Hải
Xin chào Hoa
Xin chào Công
Xin chào Sơn

Ở đây, ta gọi hàm với nhiều tham số. Tham số này được "gói" lại thành một tuple trước khi truyền vào hàm. Bên trong hàm, chúng ta sử dụng vòng lặp for để lấy tất cả các tham số trong tuple.

Trong bài tới, chúng ta sẽ tìm hiểu về đệ quy trong Python.

Bài tiếp: Hàm đệ quy trong Python

Bài trước: Hàm Python do người dùng tự định nghĩa

Đừng quên làm bài tập Python bạn nhé.

0