Search…

Hàm trong Python - Nâng Cao

29/09/20203 min read
Hướng dẫn sử dụng hàm có sử dụng tham số mặc định, tham số sử dụng từ khoá (Keyword Arguments) trong Python

Tham số mặc định

Đặt vấn đề

Định nghĩa hàm tính tổng của 4 số nguyên:

#!/usr/bin/python

def TinhTong(num1, num2, num3, num4):
   return (num1 + num2 + num3 + num4)
   
print(TinhTong(3, 4, 2, 1))

Vấn đề được nảy sinh khi chỉ muốn tính tổng của 2 hoặc 3 số nguyên.

Có nhiều cách để giải quyết vấn đề này như định nghĩa thêm một hàm mới để tính tổng của 2 hoặc 3 số nguyên, hoặc sử dụng lại hàm trên bằng cách gọi hàm và truyền vào các tham số không cần thiết với giá trị là 0. Tuy nhiên cách giải quyết vấn đề như thế là chưa thật sự tối ưu.

Python hỗ trợ lập trình viên khai báo hàm với tham số mặc định nhằm giải quyết các vấn đề trên. Hàm có tham số mặc định giúp cho lập trình viên truyền ít tham số hơn khi gọi hàm.

Lưu ý: Một lưu ý nhỏ là vấn đề nêu trên chỉ là một trong các vấn đề có thể gặp phải khi không sử dụng hàm có tham số mặc định. Có thể tồn tại nhiều vấn đề khác mà tham số mặc định trong hàm sẽ giúp giải quyết nó.

Cú pháp

def function_name(arg1, arg2,..., argn, arg_df1 = value1, arg_df2 = value2,..., arg_dfn = valuen):
       function_body 

Trong đó:

  • arg1, arg2,..., argn là các tham số được khai báo bình thường.
  • arg_df1, arg_df2, ..., arg_dfn là các tham số có giá trị mặc định lần lượt là value1, value2,..., valuen.

Một số lưu ý

Một lời gọi bất kỳ đến hàm này đều phải có đầy đủ các tham số ứng với arg1, arg2,..., argn (không phải tham số có giá trị mặc định). Nhưng có thể có hoặc không các tham số có giá trị mặc định ứng với arg_df1, arg_df2, ..., arg_dfn. Nếu tham số nào không có thì nó sẽ tự động gán với giá trị ngầm định đã khai báo.

Các tham số có giá trị mặc định phải được khai báo liên tục và xuất hiện cuối cùng trong danh sách tham số.

Giải quyết  vấn đề

Sử dụng hàm có tham số mặc định.

#!/usr/bin/python

def TinhTong(num1, num2, num3 = 0, num4 = 0):
   return (num1 + num2 + num3 + num4)
   
print('Tong 4 so: ', TinhTong(3, 4, 2, 1))
print('Tong 3 so: ', TinhTong(3, 4, 2))
print('Tong 2 so: ', TinhTong(3, 4))

Kết quả in ra màn hình

Tong 4 so:  10
Tong 3 so:  9
Tong 2 so:  7

Một ví dụ khác

#!/usr/bin/python

def printHello(str = 'World'):
   print ('Hello ' + str + '!')
   
printHello()
printHello('Python')

Kết quả in ra màn hình

Hello World!
Hello Python!

Tham số sử dụng từ khoá (keyword arguments)

Khi sử dụng hàm có tham số mặc định ở cách trên sẽ tồn tại một điểm hạn chế là không thể truyền tham số mặc định thứ n vào được nếu như không truyền tham số mặc định thứ n - 1, n - 2,... Hiểu được sự hạn chế này, Python cho phép lập trình viên truyền bất kỳ tham số nào trong danh sách các tham số mặc định mà không cần phải truyền vào các tham số mặc định còn lại.

Ví dụ

#!/usr/bin/python

def print_infomation(name = 'STDIO Training', email = 'N/A', messenger = 'm.me/training.stdio.vn'):
	info =  \
			'Name: ' + name + '\n' +\
			'Email: ' + email + '\n' +\
			'Messenger: ' + messenger
	print(info)
			
print_infomation(email = 'training@stdio.vn')

Kết quả in ra màn hình

Name: STDIO Training
Email: training@stdio.vn
Messenger: m.me/training.stdio.vn

Ví dụ trên thực hiện truyền giá trị vào tham số email mà không cần phải truyền vào tham số trước nó là name

IO Stream

IO Stream Co., Ltd

30 Trinh Dinh Thao, Hoa Thanh ward, Tan Phu district, Ho Chi Minh city, Vietnam
+84 28 22 00 11 12
developer@iostream.co

383/1 Quang Trung, ward 10, Go Vap district, Ho Chi Minh city
Business license number: 0311563559 issued by the Department of Planning and Investment of Ho Chi Minh City on February 23, 2012

©IO Stream, 2013 - 2024