Việc sử dụng default arguments trong Python giúp bạn thiết lập giá trị mặc định cho các tham số của hàm. Tạo sự linh hoạt khi gọi hàm, cho phép bỏ qua việc cung cấp giá trị cho những tham số này nếu không cần thiết. Trong bài viết này mình sẽ giúp bạn tìm hiểu chi tiết hơn về default arguments trong Python.
Default arguments trong Python là gì?
Python cho phép định nghĩa một hàm với các giá trị mặc định gán cho một hoặc nhiều tham số hình thức. Khi một hàm được gọi, nếu không có giá trị nào được truyền vào cho một tham số có giá trị mặc định, Python sẽ sử dụng giá trị mặc định đó. Ngược lại, nếu một giá trị được truyền vào cho tham số, giá trị mặc định sẽ bị thay thế bằng giá trị được truyền vào.
Các default arguments trong Python là các tham số của hàm sẽ được sử dụng nếu không có đối số nào được truyền vào trong khi gọi hàm.
Ví dụ về default arguments trong Python trong Python
Ví dụ dưới đây minh họa cách sử dụng tham số mặc định trong Python. Trong lời gọi hàm thứ hai, giá trị cho tham số “city” không được truyền vào, vì vậy giá trị mặc định của tham số này là “Hyderabad” sẽ được sử dụng.
# Định nghĩa hàm
def showinfo(name, city = "Hyderabad"):
"Hàm này in ra thông tin được truyền vào"
print ("Tên:", name)
print ("Thành phố:", city)
return
# Gọi hàm showinfo
showinfo(name = "Ansh", city = "Delhi")
showinfo(name = "Shrey")
Đoạn mã trên sẽ cho ra kết quả như sau:
Tên: Ansh
Thành phố: Delhi
Tên: Shrey
Thành phố: Hyderabad
Giải thích code:
def showinfo(name, city = "Hyderabad"):
: Dòng này định nghĩa một hàm có tênshowinfo
với hai tham số:name
vàcity
. Tham sốcity
có một giá trị mặc định là"Hyderabad"
.print ("Tên:", name)
vàprint ("Thành phố:", city)
: Các câu lệnh này in ra tên và thành phố tương ứng, sử dụng giá trị của các tham số được truyền vào.showinfo(name = "Ansh", city = "Delhi")
: Lời gọi hàm này truyền cả giá trị choname
vàcity
, giá trị"Delhi"
được ưu tiên sử dụng thay vì giá trị mặc định"Hyderabad"
.showinfo(name = "Shrey")
: Lần gọi hàm này chỉ truyền giá trị cho tham sốname
, giá trị củacity
không được cung cấp, vì vậy giá trị mặc định"Hyderabad"
được sử dụng.
Ví dụ: Gọi hàm không cần Keyword Arguments
Hãy xem xét một ví dụ khác về việc gán giá trị mặc định cho tham số của hàm. Hàm percent()
có một default arguments trong Python tên là maxmarks, được thiết lập giá trị là 200. Do đó, chúng ta có thể bỏ qua việc truyền giá trị cho tham số thứ ba khi gọi hàm này.
# Định nghĩa hàm
def percent(phy, maths, maxmarks=200):
val = (phy + maths) * 100/maxmarks
return val
phy = 60
maths = 70
# Gọi hàm với tham số mặc định
result = percent(phy, maths)
print ("Tỉ lệ phần trăm:", result)
phy = 40
maths = 46
result = percent(phy, maths, 100)
print ("Tỉ lệ phần trăm:", result)
Khi chạy đoạn code trên, kết quả sẽ hiển thị như sau:
Tỉ lệ phần trăm: 65.0
Tỉ lệ phần trăm: 86.0
Giải thích code:
def percent(phy, maths, maxmarks=200):
: Dòng này định nghĩa một hàm tên làpercent
, nhận ba tham số:phy
,maths
vàmaxmarks
. Tham sốmaxmarks
có một giá trị mặc định là200
. Hàm này tính phần trăm dựa trên tổng củaphy
,maths
vàmaxmarks
.val = (phy + maths) * 100/maxmarks
: Câu lệnh này tính phần trăm, sau đó kết quả được gán cho biếnval
.return val
: Câu lệnh này trả về giá trị đã tính toán ở trên.phy = 60, maths = 70
: Hai dòng này gán các giá trị cho biếnphy
vàmaths
để sử dụng trong lần gọi hàm đầu tiên.result = percent(phy, maths)
: Lời gọi hàm này chỉ truyền hai giá trị làphy
vàmaths
. Vì tham sốmaxmarks
không được chỉ định giá trị trong lúc gọi hàm, hàmpercent()
sẽ sử dụng giá trị mặc định200
.print ("Tỉ lệ phần trăm:", result)
: Dòng này in ra kết quả của phép tính tỉ lệ phần trăm ở trên.phy = 40, maths = 46
: Hai dòng này gán lại giá trị mới cho hai biếnphy
vàmaths
.result = percent(phy, maths, 100)
: Lần này khi gọi hàmpercent()
, giá trị100
đã được cung cấp cho tham sốmaxmarks
thay cho giá trị mặc định200
.print ("Tỉ lệ phần trăm:", result)
: Tương tự, câu lệnh này sẽ in ra giá trị tính toán được.
Sử dụng Mutable Objects làm default arguments trong Python
Trong Python, các tham số mặc định chỉ được đánh giá một lần duy nhất khi hàm được định nghĩa, chứ không phải mỗi khi hàm được gọi. Do đó, nếu bạn sử dụng một đối tượng có thể thay đổi (mutable object) làm tham số mặc định và sửa đổi đối tượng đó bên trong hàm, các lần gọi hàm tiếp theo sẽ tiếp tục sử dụng tham chiếu đến cùng một đối tượng đã được thay đổi.
Các đối tượng Python mà có thể được thay đổi sau khi được tạo ra được gọi là các đối tượng có thể thay đổi (mutable objects).
Ví dụ
Đoạn code dưới đây giải thích cách sử dụng đối tượng có thể thay đổi làm default arguments trong Python:
def fcn(nums, numericlist = []):
numericlist.append(nums + 1)
print(numericlist)
# Gọi hàm
fcn(66)
fcn(68)
fcn(70)
Khi chạy đoạn code trên, kết quả sẽ là:
[67]
[67, 69]
[67, 69, 71]
Giải thích code:
def fcn(nums, numericlist = [])
: Hàmfcn
được định nghĩa với một tham số bắt buộcnums
và một tham số tùy chọnnumericlist
, tham số này được gán một danh sách rỗng làm giá trị mặc định. Đây là điểm quan trọng cần lưu ý, vì danh sách rỗng là một đối tượng có thể thay đổi.numericlist.append(nums + 1)
: Trong mỗi lần gọi hàm, câu lệnh này thêm giá trịnums + 1
vào cuối danh sáchnumericlist
.print(numericlist)
: Câu lệnh này in danh sáchnumericlist
ra màn hình sau mỗi lần thêm giá trị mới vào.fcn(66), fcn(68), fcn(70)
: Đây là ba lần gọi hàmfcn
, lần lượt với các giá trị66
,68
và70
.
Lời kết
Chúng ta vừa cùng nhau tìm hiểu chi tiết về đối số mặc định trong Python, từ định nghĩa, cách hoạt động đến những lưu ý quan trọng khi sử dụng. Hy vọng những kiến thức này sẽ giúp bạn viết code Python hiệu quả hơn, tránh được những lỗi không đáng có.