INTRODUCTION
FLOW CONTROL
FUNCTIONS
DATATYPES
OBJECT & CLASS
Bài tập Python: Lập trình hướng đối tượng (OOP) trong Python Lập trình hướng đối tượng trong Python Class Variables trong Python Tìm hiểu về Methods trong Python Cách sử dụng phương thức __init__() trong Python Các biến Instance trong Python Tìm hiểu về Class Attributes trong Python Hàm Static Methods trong Python Phương thức __str__ trong Python Phương thức __repr__ trong Python Phương thức eq trong Python Tìm hiểu phương thức __hash__ trong Python Phương thức __bool__ trong Python Phương thức del trong Python Tìm hiểu về lớp Property trong Python Tìm hiểu về nạp chồng toán tử trong Python Trình Decorator Property trong Python Thuộc tính chỉ đọc trong Python Thuộc tính Delete trong Python Sử dụng super() trong Python Sử dụng __slots__ trong Python Cách sử dụng Protocol trong Python Sử dụng Enum aliases và @enum.unique trong Python Tùy chỉnh và mở rộng lớp Enum trong Python Cách sử dụng hàm Auto() của Python Single Responsibility Principle trong Python Nguyên tắc Đóng-Mở trong Python Nguyên tắc thay thế Liskov - LSP trong Python Interface Segregation Principle - ISP trong Python. Nguyên tắc đảo ngược sự phụ thuộc trong Python Đa kế thừa trong Python Tìm hiểu về các lớp mixin trong Python Mô tả Descriptors trong Python Phân biệt Data Descriptor và Non-data Descriptor trong Python Phương thức __new__ trong Python Tìm hiểu về Class Type trong Python Lớp Metaclass trong Python Ví dụ sử dụng metaclass trong Python Tìm hiểu về decorator dataclass trong Python Tìm hiểu về các ngoại lệ trong Python Ngoại lệ Raise trong Python Sử dụng câu lệnh raise from trong Python Ngoại lệ tùy chỉnh trong Python Module trong Python Package trong Python Class trong Python Hàm khởi tạo trong Python Kế thừa trong Python Đa kế thừa trong Python Setter và Getter trong Python Override trong Python Interface trong Python Bài tập Python: Module và Class
ADVANCED TOPICS
BỔ SUNG
PYTHON CĂN BẢN
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

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.

test php

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

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 function
  • function_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 function
  • parameters là các tham số truyền vào của function
Ví dụ
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!

chay function python JPG

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!

docstring JPG

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ả:

chia het cho 7 JPG

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ả:

tong so nguyen to JPG

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.

Ví dụ
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 so function JPG

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.

Cùng chuyên mục:

Hướng dẫn xây dựng Command-Line Interface (CLI) bằng Quo trong Python

Hướng dẫn xây dựng Command-Line Interface (CLI) bằng Quo trong Python

Hướng dẫn toàn diện về module datetime trong Python

Hướng dẫn toàn diện về module datetime trong Python

Cách truy cập và thiết lập biến môi trường trong Python

Cách truy cập và thiết lập biến môi trường trong Python

Lớp dữ liệu (Data Classes) trong Python với decorator @dataclass

Lớp dữ liệu (Data Classes) trong Python với decorator @dataclass

Từ khóa yield trong Python

Từ khóa yield trong Python

Sự khác biệt giữa sort() và sorted() trong Python

Sự khác biệt giữa sort() và sorted() trong Python

Sử dụng Poetry để quản lý dependencies trong Python

Sử dụng Poetry để quản lý dependencies trong Python

Định dạng chuỗi Strings trong Python

Định dạng chuỗi Strings trong Python

Một tác vụ phổ biến khi làm việc với danh sách trong Python

Một tác vụ phổ biến khi làm việc với danh sách trong Python

Làm việc với các biến môi trường trong Python

Làm việc với các biến môi trường trong Python

Sự khác biệt giữa set() và frozenset() trong Python

Sự khác biệt giữa set() và frozenset() trong Python

Sự khác biệt giữa iterator và iterable trong Python

Sự khác biệt giữa iterator và iterable trong Python

Cách làm việc với file tarball/tar trong Python

Cách làm việc với file tarball/tar trong Python

Chuyển đổi kiểu dữ liệu trong Python

Chuyển đổi kiểu dữ liệu trong Python

Sự khác biệt giữa toán tử == và is trong Python

Sự khác biệt giữa toán tử == và is trong Python

Làm việc với file ZIP trong Python

Làm việc với file ZIP trong Python

Cách sử dụng ThreadPoolExecutor trong Python

Cách sử dụng ThreadPoolExecutor trong Python

Sự khác biệt giữa byte objects và string trong Python

Sự khác biệt giữa byte objects và string trong Python

Xử lý độ chính xác các hàm floor, ceil, round, trunc, format  trong Python

Xử lý độ chính xác các hàm floor, ceil, round, trunc, format trong Python

Cách lặp qua nhiều list với hàm zip() trong Python

Cách lặp qua nhiều list với hàm zip() trong Python

Top