Thông báo: Download 4 khóa học Python từ cơ bản đến nâng cao tại đây.
Cách dùng function trong Python
Trong bài này chúng ta sẽ tìm hiểu về function trong Python, bạn sẽ được học khái niệm về function là gì? cách khai báo và đặt tên function như thế nào? Sau đó làm một vài ví dụ đơn giản để giúp bạn hiểu rõ hơn.
Trước khi học sâu vào function thì mình đưa ra một bất cập khi sử dụng cách code từ bài đầu đến giờ nhé. Giả sử bạn viết chương trình kiểm tra số nguyên tố bằng Python, và bạn sử dụng theo cách ở bài viết này thì đã thực hiện thành công. Tuy nhiên, nếu trong một chương trình mình cần kiểm tra số nguyên tố ở 100 vị trí khác nhau thì bạn phải code 100 lần như vậy. Điều này gây ra tình trạng code bị dư thừa, khó bảo dưỡng và nâng cấp sau này.
Vậy có cách nào giải quyết không? Thật may mắn là các ngôn ngữ lập trình hiện nay đều hỗ trợ function giúp bạn xử lý nhanh gọn.
1. Function là gì trong Python?
Trong Python, function hay còn gọi là hàm, nó là tổng hợp một đoạn code gồm một hoặc nhiều lệnh nhằm giải quyết một bài toán cụ thể nào đó.
Bài viết này được đăng tại [free tuts .net]
Function ra đời giúp lập trình viên dễ dàng tối ưu chương trình hơn, bởi ta có thể sử dụng function nhiều lần mà không cần phải định nghĩa lại, ta gọi đây là hướng lập trình modun. Việc tái sử dụng này giúp code ngắn và gọn hơn rất nhiều.
Cú pháp tạo function trong Python:
def function_name(parameters): """docstring""" statement(s)
Trong đó các thành phần được giải thích như sau:
def
là từ khóa bắt buộc dùng để tạo function, nó được đặt tại vị trí đầu tiên của functionfunction_name
là tên của function mà bạn muốn đặt, ví dụ bạn viết function kiểm tra số lớn nhất thì có thể đặt tên lànumber_max
.docstring
là phần mô tả ý nghĩa của function, cái này do bạn tự nhập vào để sau này dễ dàng hiểu ý nghĩa của function mà không cần phải đọc lại toàn bộ code.statement(s)
là những dòng lệnh xử lý bên trong functionparameters
là các tham số truyền vào của function
def greet(name): """Hàm này sẽ hiển thị câu chào!""" print("Chào, " + name + ". Rất vui khi gặp bạn!")
Quy tắc đặt tên của function giống như đặt tên biến vậy, nghĩa là dùng các chữ cái không dấu, không được chứa kí tự đặc biệt, có thể chứa số nhưng nó không được đứng ở vị trí đầu tiên.
Nếu bạn tạo nhiều function thì tên của chúng không được trùng nhau.
2. Cách gọi function trong Python
Trong Python, để gọi một function thì bạn chỉ việc nhập tên của function, sau đó truyền thêm các tham số nếu có. Bạn có thể gọi đến function ở bất kì đâu, miễn là trong phạm vi tồn tại của function.
Như ở ví dụ trên mình sẽ gọi đến function greet
như sau:
greet('Cường')
Kết quả:
Chào, Cường. Rất vui khi gặp bạn!
Khác với các ngôn ngữ khác, bạn không cần khai báo kiểu dữ liệu cho các tham số truyền vào.
4. Ý nghĩa của docstring trong function
Chuỗi đầu tiên sau tên hàm được gọi là docstring
và viết tắt của document string. Nó được sử dụng để giải thích ngắn gọn ý nghĩa của function.
Mặc dù bạn có thể nhập docstring hoặc không cần cũng được. Tuy nhiên, document sẽ giúp bạn hiểu ý nghĩa của function mà không cần phải dò lại code, vì vậy với những lập trình viên có kinh nghiệm thì không bao giờ bỏ qua phần này.
Quay lại ví dụ trên, chúng ta có một docstring
bên dưới tiêu đề hàm, và mình sử dụng đoạn code sau để xem ý nghĩa của hàm này.
print(greet.__doc__) => Hàm này sẽ hiển thị câu chào!
Như bạn thấy, kết quả nó trả về chính là phần mà mình đã comment lúc khai báo hàm.
4. Hàm return trong Python
Mỗi function có thể có giá trị trả về hoặc không. Câu hỏi đặt ra là khi nào nên sử dụng hàm có giá trị trả về và khi nào thì không? Để trả lời câu hỏi này thì bạn hãy làm một vài ví dụ trước nhé.
Quay lại ví dụ ở phần 1, đó là một function không có giá trị trả về bởi không tồn tại lệnh return bên trong hàm. Nhưng với function dưới đây thì khác:
def absolute_value(num): """Hàm này sẽ trả về giá trị tuyệt đối của một số""" if num >= 0: return num else: return -num # Output: 2 print(absolute_value(2)) # Output: 4 print(absolute_value(-4))
Function này có nhiệm vụ tính giá trị truyệt đối của một số, sau đó trả kết quả về, giá trị trả về chính là giá trị mà bạn đã gắn vào lệnh return. Vậy nếu bạn muốn viết một function mà có trả kết quả về thì sử dụng lệnh return.
Ví dụ bạn cần viết chương trình kiểm tra một số có phải là số nguyên tố hay không thì bạn có sử dụng lệnh return để trả về True hoặc False.
5. Phạm vi của biến trong function
Trong function của Python bạn có thể tạo thêm bao nhiêu biến cũng được. Tuy nhiên, các biến đó chỉ tồn tại bên trong function mà thôi, bạn không thể sử dụng nó ở bên ngoài.
Hãy xem ví dụ dưới đây, mình đã tạo ra một function và biến x
ở cả bên trong function và bên ngoài:
def my_func(): x = 10 print("Giá trị bên trong function:", x) x = 20 my_func() print("Giá trị bên ngoài function:", x)
Tuy nhiên kết quả trong function sẽ trả về giá trị 10 bởi vì phạm vi của function là cục bộ, nó không nhận được biến x
ở bên ngoài. Kết quả sẽ như sau:
Giá trị bên trong function: 10 Giá trị bên ngoài function: 20
6. Thực hành hàm (function) trong Python nâng cao
Bây giờ ta sẽ làm một vài ví dụ để bạn hiểu rõ hơn về cách sử dụng hàm trong Python nhé.
Bài tập 1: Viết chương trình in ra tất cả các số chia hết cho 7 từ 1 đến 100.
# HỌC PYTHON TẠI FREETUTS.NET # TÁC GIẢ: CƯỜNG NGUYỄN # Function trong Python # Tìm các số chia hết cho 7 từ 1 đến 100 def chia_het_cho_7(number): if number % 7 == 0: return True else: return False for i in range(1, 101): if chia_het_cho_7(i): print(i, end=' ')
Kết quả:
Bài tập 2: Đếm tổng và in ra các số nguyên tố từ 1 đến 100.
# HỌC PYTHON TẠI FREETUTS.NET # TÁC GIẢ: CƯỜNG NGUYỄN # Function trong Python # Sử dụng hàm để kiểm tra SNT def la_SNT(n): if (n < 2): return False elif (n == 2): return True elif (n % 2 == 0): return False else: # Lặp qua các số lẻ nên bắt đầu từ 3 với bước nhảy là 2 for i in range(3, n, 2): if (n % i == 0): return False return True counter = 0; for i in range(1, 101): if la_SNT(i): counter += 1 print(i, end=' ') print("______________") print("Tổng SNT trong phạm vi này là: ", counter)
Kết quả:
7. Hiểu rõ về tham số của Function trong Python
Trong phần này chúng ta sẽ học kỹ hơn về tham số truyền vào của hàm Python.
Trong Python bạn có thể tạo một hàm với nhiều tham số. Khi gọi hàm thì bắt buộc phải nhập giá trị cho tham số, tuy nhiên với những tham số có giá trị mặc định thì không cần.
Giá trị mặc định của tham số
Giá trị mặc định tức là nếu bạn không nhập giá trị lúc gọi hàm thì tham số sẽ lấy giá trị mặc định đó. Để tạo giá trị mặc định thì bạn dùng toán tử =
và gán ngay lúc tạo hàm.
def greet(msg = "Good morning!"):
Biến msg
sẽ có giá trị mặc định là 'Good morning!". Hãy xem ví dụ đầy đủ sau để hiểu rõ hơn.
def greet(name, msg = "Chào buổi sáng!"): print("Xin chào ",name + ', ' + msg) greet("Kate") greet("Bruce","Bạn có khỏe không?")
Ở đoạn gọi hàm mình đã gọi với hai cách khác nhau,
greet("Kate")
là cách gọi chỉ truyền vào một tham số nên function sẽ lấy giá trị mặc định cho tham số thứ hai.greet("Bruce","Bạn có khỏe không?")
là các gọi đầy đủ nên giá trị mặc định không được sử dụng.
Chạy chương trình này thì kết quả sẽ như sau:
Xin chào Kate, Chào buổi sáng! Xin chào Bruce, Bạn có khỏe không?
Lưu ý: Bạn không thể đặt một tham số có giá trị mặc định đằng trước những tham số không có giá trị mặc định, như ví dụ dưới đây là sai.
def greet(msg = "Đặt tại đây là sai!", name):
Truyền tham số theo key name
Truyền tham số theo key name tức là lúc gọi hàm và truyền tham số bạn sẽ nhập thêm tên của tham số, cách này có ưu điểm ở chỗ là bạn không cần phải nhớ chính xác thứ tự của các tham số, nhưng bù lại bạn phải nhớ tên của tham số.
Như ở ví dụ trên mình có thể gọi các cách như sau:
def greet(name, msg): print("Chào ", name, ', ', msg) greet(name = "Bruce", msg = "Bạn có khỏe không?") greet(msg = "Bạn có khỏe không?", name = "Bruce")
Chạy đoạn code này thì có kết quả giống nhau.
Tham số không giới hạn
Tham số không giới hạn hay còn gọi là tham số Arbitrary. Khi sử dụng tham số này thì bạn có thể truyền bao nhiêu cũng được lúc gọi hàm.
Để tạo một tham số không giới hạn thì bạn thêm ký tự *
đằng trước tham số đó. Hãy xem ví dụ dưới đây.
def greet(*names): """This function greets all the person in the names tuple.""" # names is a tuple with arguments for name in names: print("Hello",name) greet("Monica","Luke","Steve","John")
Như bạn thấy, mình phải sử dụng vòng lặp để lặp qua từng tham số, và lúc gọi hàm thì nhập bao nhiêu cũng được.
Chạy lên thì kết quả chương trình sẽ là:
Hello Monica Hello Luke Hello Steve Hello John
Đây là cách gọi hàm với nhiều đối số, khi bạn truyền vào thì nó sẽ tạo thành một Tuple nên bắt buộc phải sử dụng vòng lặp để lặp qua từng giá trị.
8. Lời kết
Như vậy là bạn đã học được sơ lược về cách tạo hàm (function) trong Python. Vẫn còn rất nhiều vấn đề liên quan đến function nhưng mình sẽ viết nó ở một bài khác, việc phân tán bài học như vậy sẽ giúp bạn dễ dàng năm bắt hơn. Chúc bạn học tốt và hẹn gặp lại ở bài tiếp theo.