Trong bất kỳ ngôn ngữ lập trình nào, các hàm tạo điều kiện khả năng sử dụng lại mã. Nói một cách đơn giản, khi bạn muốn làm điều gì đó lặp đi lặp lại, bạn có thể định nghĩa điều đó như một chức năng và gọi chức năng đó bất cứ khi nào bạn cần.
Trong hướng dẫn này, chúng ta sẽ tìm hiểu về các hàm do người dùng định nghĩa trong Python.
Khi bạn bắt đầu viết mã bằng Python, bạn đã sử dụng công cụ tích hợp sẵn print()
chức năng trong của bạn Hello World!
chương trình 😀 và input()
chức năng đọc đầu vào từ người dùng.
Miễn là bạn biết cách sử dụng các chức năng này, bạn không phải lo lắng về cách chúng được triển khai.
Trong lập trình, điều này được gọi là sự trừu tượng hóa. Nó cho phép bạn sử dụng các hàm bằng cách gọi hàm với các đối số bắt buộc mà không phải lo lắng về cách chúng thực sự hoạt động.
Có rất nhiều hàm tích hợp sẵn trong Python. Trong bài đăng này, chúng ta sẽ xem cách chúng ta có thể định nghĩa và sử dụng các chức năng của riêng mình. Bắt đầu nào!
Cú pháp hàm Python
Đoạn mã sau hiển thị cú pháp chung để xác định một hàm trong Python:
def function_name(parameters):
# What the function does goes here
return result
- Bạn cần sử dụng
def
từ khóa, hãy đặt tên cho hàm của bạn, theo sau là một cặp dấu ngoặc đơn và kết thúc dòng bằng dấu hai chấm (:). - Nếu hàm của bạn nhận đối số, tên của đối số (tham số) được đề cập bên trong dấu ngoặc đơn mở và đóng.
- Xin lưu ý rằng trong định nghĩa hàm, các đối số mà chức năng của bạn tiêu thụ được gọi là thông số.
- Khi bạn gọi hàm với các giá trị cụ thể cho các tham số này, chúng được gọi là tranh luận hoặc tham số thực tế. Điều này là do tranh luận bên trong gọi hàm là các giá trị được sử dụng cho các tham số của hàm.
- Sau đó, bạn bắt đầu một khối thụt lề. Đây là phần thân của hàm mô tả chức năng của bạn làm gì.
- Có một
return
câu lệnh trả về kết quả của thao tác trên các đối số. Cácreturn
câu lệnh trả về quyền điều khiển đến điểm ban đầu hàm được gọi.
Lưu ý rằng arguments
và return
tuyên bố là tùy chọn. Điều này có nghĩa là bạn có thể có một hàm nhận Không có đối sốvà không trả lại gì. 😀
Bây giờ chúng ta hãy cố gắng hiểu các tuyên bố trên bằng các ví dụ đơn giản.
Cách tạo một hàm đơn giản trong Python
Bây giờ chúng ta hãy tạo một hàm đơn giản trong Python để chào người dùng, như hình bên dưới:
def my_func():
print("Hello! Hope you're doing well")
Như bạn có thể thấy, chức năng my_func()
:
- không có đối số,
- không trả lại gì, và
- in ra
"Hello! Hope you're doing well"
bất cứ khi nào nó gọi điện.
Lưu ý rằng định nghĩa hàm trên là trơ cho đến khi chức năng được kích hoạt hoặc được gọi. Hãy tiếp tục và gọi hàm my_func()
và kiểm tra đầu ra.
my_func()
# Output
Hello! Hope you're doing well
Cách tạo một hàm có đối số trong Python
Bây giờ, chúng ta sẽ sửa đổi chức năng my_func()
để bao gồm name
và place
của người dùng.
def my_func(name,place):
print(f"Hello {name}! Are you from {place}?")
Bây giờ chúng ta có thể gọi my_func()
bằng cách chuyển vào hai chuỗi cho name
và place
của người dùng, như hình bên dưới.
my_func("Jane","Paris")
# Output
Hello Jane! Are you from Paris?
Điều gì xảy ra nếu bạn chỉ định place
đầu tiên và sau đó là name
? Hãy cùng tìm hiểu.
my_func("Hawaii","Robert")
# Output
Hello Hawaii! Are you from Robert?
Chúng tôi nhận được Hello Hawaii! Are you from Robert?
– và điều này không có ý nghĩa. 🙂Điều gì gây ra vấn đề này?
Các đối số trong lời gọi hàm là đối số vị trí. Điều này có nghĩa là đối số đầu tiên trong lệnh gọi hàm được sử dụng làm giá trị của tham số đầu tiên (name
) và đối số thứ hai trong lệnh gọi hàm được sử dụng làm giá trị của tham số thứ hai ( place
)
Xem đoạn mã dưới đây. Thay vì chỉ xác định các đối số, chúng tôi đã đề cập đến các tham số và giá trị mà chúng nhận.
my_func(place="Hawaii",name="Robert")
# Output
Hello Robert! Are you from Hawaii?
Chúng được gọi là đối số từ khóa. Thứ tự của các đối số trong lệnh gọi hàm không quan trọng miễn là tên của các tham số là chính xác.
Cách tạo một hàm với các đối số mặc định trong Python
Điều gì sẽ xảy ra nếu chúng ta có một số tham số nhận một giá trị cụ thể hầu hết thời gian trong khi gọi hàm?
Chúng ta có thể làm gì tốt hơn là gọi hàm có cùng giá trị cho một tham số cụ thể không?
Vâng, chúng tôi có thể làm tốt hơn, và đó là những gì default arguments
là cho! 😀
Hãy tạo một chức năng total_calc()
giúp chúng tôi tính toán và in ra tổng số tiền phải thanh toán tại một nhà hàng. Đưa ra bill_amount
và tỷ lệ phần trăm của bill_amount
bạn chọn thanh toán dưới dạng tiền boa (tip_perc
), hàm này tính toán tổng số tiền bạn phải trả.
Lưu ý cách định nghĩa hàm bao gồm giá trị mặc định của tham số tip_perc
được sử dụng khi người dùng không chỉ định phần trăm tiền boa.
Chạy đoạn mã bên dưới.👇🏽 Bây giờ, chức năng của bạn đã sẵn sàng!
def total_calc(bill_amount,tip_perc=10):
total = bill_amount*(1 + 0.01*tip_perc)
total = round(total,2)
print(f"Please pay ${total}")
Bây giờ chúng ta hãy gọi hàm theo một vài cách khác nhau. Đoạn mã dưới đây hiển thị như sau:
- Khi bạn gọi hàm
total_calc
chỉ vớibill_amount
theo mặc định, phần trăm tiền boa là 10 được sử dụng. - Khi bạn chỉ định rõ ràng phần trăm tiền boa, phần trăm tiền boa được đề cập trong lệnh gọi hàm sẽ được sử dụng.
# specify only bill_amount
# default value of tip percentage is used
total_calc(150)
# Output
Please pay $165.0
# specify both bill_amount and a custom tip percentage
# the tip percentage specified in the function call is used
total_calc(200,15)
# Output
Please pay $230.0
total_calc(167,7.5)
# Output
Please pay $179.53
Cách tạo một hàm trả về một giá trị trong Python
Cho đến nay, chúng tôi chỉ tạo các hàm có thể có hoặc không có đối số và không trả về bất kỳ thứ gì. Bây giờ, hãy tạo một hàm đơn giản để trả về thể tích của một hình khối cho trước length
các width
và height
.
def volume_of_cuboid(length,breadth,height):
return length*breadth*height
Nhớ lại rằng return
từ khóa trả về quyền kiểm soát đến điểm mà hàm được gọi. Lời gọi hàm được thay thế bằng return value
từ chức năng.
Hãy gọi hàm volume_of_cuboid()
với các đối số thứ nguyên cần thiết, như được hiển thị trong đoạn mã bên dưới. Lưu ý cách chúng tôi sử dụng biến volume
để lấy giá trị trả về từ hàm.
volume = volume_of_cuboid(5.5,20,6)
print(f"Volume of the cuboid is {volume} cubic units")
# Output
Volume of the cuboid is 660.0 cubic units
Cách tạo một hàm trả về nhiều giá trị trong Python
Trong ví dụ trước của chúng ta, hàm volume_of_cuboid()
chỉ trả về một giá trị, cụ thể là thể tích của một hình khối với các kích thước của nó. Hãy xem cách chúng ta có thể trả về nhiều giá trị từ một hàm.
- Để trả về nhiều giá trị từ một hàm, chỉ cần chỉ định các giá trị được trả về, phân tách bằng dấu phẩy.
- Theo mặc định, hàm trả về các giá trị dưới dạng một bộ. Nếu có
N
trả về giá trị, chúng tôi nhận được mộtN-
tuple.
Hãy tạo một chức năng đơn giản cube()
trả về thể tích và tổng diện tích bề mặt của một hình lập phương, cho biết độ dài cạnh của nó.
def cube(side):
volume = side **3
surface_area = 6 * (side**2)
return volume, surface_area
Để xác minh rằng một bộ dữ liệu được trả về, hãy thu thập nó trong một biến returned_values
như hình dưới đây:
returned_values = cube(8)
print(returned_values)
# Output
(512, 384)
Bây giờ, chúng ta sẽ giải nén tuple và lưu trữ các giá trị trong hai biến khác nhau.
volume, area = cube(6.5)
print(f"Volume of the cube is {volume} cubic units and the total surface area is {area} sq. units")
# Outputs
Volume of the cube is 274.625 cubic units and the total surface area is 253.5 sq. units
Cách tạo một hàm nhận số lượng đối số thay đổi trong Python
Hãy bắt đầu bằng cách hỏi một vài câu hỏi:
- Điều gì xảy ra nếu chúng ta không biết trước chính xác số lượng đối số?
- Chúng ta có thể tạo các hàm hoạt động với số lượng đối số thay đổi không?
Câu trả lời là có! Và chúng ta sẽ tạo ngay một hàm như vậy.
Hãy tạo một chức năng đơn giản my_var_sum()
trả về tổng của tất cả các số được truyền vào làm đối số. Tuy nhiên, số lượng đối số có thể khác nhau mỗi khi chúng ta gọi hàm.
Lưu ý cách định nghĩa hàm bây giờ có *args
thay vì chỉ tên của tham số. Trong phần thân của hàm, chúng ta lặp qua args
cho đến khi chúng tôi đã sử dụng tất cả các đối số. Chức năng my_var_sum
trả về tổng của tất cả các số được truyền vào dưới dạng đối số.
def my_var_sum(*args):
sum = 0
for arg in args:
sum += arg
return sum
Bây giờ chúng ta hãy gọi hàm my_var_sum()
với số lượng đối số khác nhau mỗi lần và nhanh chóng kiểm tra xem các câu trả lời được trả về có đúng không! 🙂
# Example 1 with 4 numbers
sum = my_var_sum(99,10,54,23)
print(f"The numbers that you have add up to {sum}")
# Output
The numbers that you have add up to 186
# Example 2 with 3 numbers
sum = my_var_sum(9,87,45)
print(f"The numbers that you have add up to {sum}")
# Output
The numbers that you have add up to 141
# Example 3 with 6 numbers
sum = my_var_sum(5,21,36,79,45,65)
print(f"The numbers that you have add up to {sum}")
# Output
The numbers that you have add up to 251
⌛ Tóm tắt nhanh
Hãy nhanh chóng tóm tắt những gì chúng tôi đã đề cập. Trong hướng dẫn này, chúng ta đã học được:
- làm thế nào để xác định chức năng,
- cách truyền đối số cho hàm,
- cách tạo các hàm với số lượng đối số mặc định và thay đổi, và
- cách tạo một hàm có (các) giá trị trả về.
Hy vọng tất cả các bạn thích đọc bài viết này. Cảm ơn bạn đã đọc. Như mọi khi, cho đến lần sau! 😀