Chuyển đến nội dung chính

Hướng dẫn Hàm Python range()

Tìm hiểu về hàm Python range() và các khả năng của nó với sự trợ giúp của các ví dụ.
Đã cập nhật 5 thg 6, 2026  · 7 phút đọc

Hàm range() là một hàm rất phổ biến và được sử dụng rộng rãi trong Python, đặc biệt khi bạn làm việc với vòng lặp for, và đôi khi cả với vòng lặp while. Đáng để bạn nắm vững hàm range() vì điều đó sẽ mở ra rất nhiều cánh cửa: range() được dùng cho mọi việc từ điều khiển luồng chương trình đến lặp qua các tập dữ liệu dùng cho phân tích dữ liệu. 

Nếu bạn mới bắt đầu với Python và muốn học thêm, hãy tham gia khóa Giới thiệu Khoa học Dữ liệu bằng Python của DataCamp.

Hàm range() trong Python là gì?

Hàm range() trả về một dãy số và là bất biến (immutable), nghĩa là giá trị của nó cố định. Hàm range() nhận một, hoặc nhiều nhất là ba đối số, cụ thể là giá trị start (bắt đầu) và stop (kết thúc) cùng với kích thước step (bước nhảy).

range() được giới thiệu trong Python3. Trong Python2, một hàm tương tự là xrange() được dùng, với hành vi hơi khác. Trong số đó, xrange() trả về một đối tượng generator và tiêu tốn ít bộ nhớ hơn, trong khi range() lại trả về một danh sách hoặc dãy số.

Một phần lý do khiến hàm range() hữu ích là vì nó chỉ lưu trữ các giá trị start, stopstep, nên tiêu tốn ít bộ nhớ hơn so với một list hay tuple.

Cú pháp hàm range() trong Python

Hàm range() có thể được biểu diễn theo ba cách khác nhau, hay bạn cũng có thể xem đó là ba tham số của range():

  • range(stop_value): Theo mặc định, điểm bắt đầu ở đây là số không.
  • range(start_value, stop_value): Tạo ra dãy số dựa trên giá trị bắt đầu và kết thúc.
  • range(start_value, stop_value, step_size): Tạo dãy bằng cách tăng dần giá trị bắt đầu theo bước nhảy cho đến khi chạm giá trị kết thúc.
Ví dụ hàm range của Python
Hàm range() trong Python. Ảnh: Tác giả. 

Chúng ta cũng có thể kiểm tra kiểu của đối tượng do range() trả về bằng cách bọc range() trong type().

my_range = range(100)
print(type(my_range))

# Expected output: <class 'range'>

Ví dụ về hàm range() trong Python

Giờ hãy xem một vài ví dụ để bạn có thể luyện tập và thành thạo cách dùng range().

Dùng Python range() để in một dãy số

Bắt đầu với ví dụ đơn giản in ra một dãy mười số, qua đó bao quát tham số đầu tiên của range(). Để làm điều này, bạn chỉ cần truyền vào giá trị stop. Vì Python dùng chỉ mục bắt đầu từ 0, nên dãy sẽ bắt đầu từ số 0 và dừng tại số được chỉ định, tức là n-1, trong đó n là số được chỉ định trong hàm range().

my_range = range(10)

for num in my_range:
	print(num)

# Expected output:
# 0
# 1
# 2
# 3
# 4
# 5
# 6
# 7
# 8
# 9

Đúng như mong đợi, ô trên trả về một dãy số bắt đầu từ 0 và kết thúc ở 9.

Dùng Python range() với list()

Bạn cũng có thể dùng hàm range làm đối số cho list; khi đó, nó sẽ tạo ra một danh sách số với độ dài bằng giá trị dừng như dưới đây:

my_range = list(range(10))
print(my_range)

range_length = len(my_range)
print(range_length)

# Expected output:
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 10

Sử dụng start, stop và step trong Python range()

Tiếp theo, hãy xem một cách khác để làm việc với hàm range(). Lần này bạn sẽ chỉ định cả giá trị startstop.

my_range = range(5, 10)
print(my_range)

# Expected output: range(5, 10)
for num in range(5,10):
    print(num)

# Expected output:
# 5
# 6
# 7
# 8
# 9

Tương tự, bạn cũng có thể dùng hàm range() để in ra các giá trị nguyên âm.

for num in range(-5,0):
    print(num)

# Expected output:
# -5
# -4
# -3
# -2
# -1

Giờ hãy thêm tham số thứ ba, tức kích thước step, vào hàm range() và xem nó ảnh hưởng đến đầu ra thế nào. Bạn sẽ đặt điểm start là 50, giá trị stop là 1000 với step bằng 100. Hàm range dưới đây sẽ tạo ra một dãy bắt đầu từ 50 và tăng dần với bước 100.

my_range = range(50,1000,100)
print(my_range)

# Expected output: range(50, 1000, 100)

Bạn sẽ nhận thấy rằng nó in ra toàn số chẵn.

for num in range(50,1000,100):
    print(num)

# Expected output:
# 50
# 150
# 250
# 350
# 450
# 550
# 650
# 750
# 850
# 950

Lưu ý về Python range() và giá trị float

Lưu ý rằng hàm range() chỉ hoạt động khi giá trị truyền vào là số nguyên. Nó không hỗ trợ kiểu dữ liệu float hay chuỗi. Tuy vậy, bạn có thể truyền cả số nguyên dương lẫn âm. Hãy xem điều gì xảy ra khi bạn thử truyền giá trị float.

for num in range(0.2,2.4):
    print(num)

# Expected output:
# TypeError: 'float' object cannot be interpreted as an integer

Có thể bạn đã từng đau đầu khi thử đảo ngược một danh sách liên kết các giá trị nguyên trong ngôn ngữ C. Tuy nhiên, trong Python, có thể làm được điều đó với hàm range() chỉ bằng cách hoán đổi startstop cùng với thêm một bước âm. Đơn giản phải không? Hãy xem nhé!

for num in range(100,10,-10):
    print(num)

# Expected output:
# 100
# 90
# 80
# 70
# 60
# 50
# 40
# 30
# 20

Dùng range() để tìm tổng của một danh sách

Giả sử bạn có một danh sách các giá trị nguyên và muốn tìm tổng của danh sách đó, nhưng dùng hàm range(). Hãy xem cách thực hiện.

Trước hết, bạn sẽ định nghĩa danh sách gồm các giá trị nguyên. Sau đó khởi tạo một biến đếm để lưu giá trị mỗi lần bạn lặp qua danh sách và cộng giá trị hiện tại của danh sách với giá trị đếm trước đó.

Để truy cập các phần tử trong danh sách, bạn sẽ áp dụng hàm range() trên độ dài của danh sách rồi truy cập phần tử bằng cách truyền vào chỉ số i, bắt đầu từ 0 và dừng ở độ dài của danh sách.

list1 = [2,4,6,8,10,12,14,16,18,20]
count = 0

for i in range(len(list1)):
    count = count + list1[i]
    print(count)
print('sum of the list:', count)

# Expected output:
# 2
# 6
# 12
# 20
# 30
# 42
# 56
# 72
# 90
# 110
# sum of the list: 110

Dùng range() với itertools để nối các dãy

Bạn cũng có thể nối hai hoặc nhiều hàm range() bằng lớp chain trong gói itertools. Và không chỉ hàm range, bạn còn có thể nối list, tuple, v.v. Hãy nhớ rằng phương thức chain trả về một đối tượng generator; để truy cập các phần tử từ generator đó, bạn có thể dùng vòng lặp for hoặc dùng list và truyền generator làm đối số.

from itertools import chain

a1 = range(10,0,-2)
a2 = range(30,20,-2)
a3 = range(50,40,-2)

final = chain(a1,a2,a3)

print(final) #generator object

# Expected output: <itertools.chain object at 0xae6330>
print(list(final))

# Expected output:
# [10, 8, 6, 4, 2, 30, 28, 26, 24, 22, 50, 48, 46, 44, 42]

Python range() và so sánh bằng nhau

Bạn có thể áp dụng so sánh bằng nhau giữa các hàm range(). Với hai hàm range(), nếu chúng biểu diễn cùng một dãy giá trị, thì chúng được xem là bằng nhau. Nói vậy có nghĩa là hai hàm range() bằng nhau không nhất thiết phải có cùng thuộc tính start, stopstep. Hãy hiểu bằng ví dụ.

# range(0, 10, 3) = [0, 3, 6, 9]
# range(0, 11, 3) = [0, 3, 6, 9]

print(range(0, 10, 3) == range(0, 11, 3))

# Expected output: True
# range(0, 10, 3) = [0, 3, 6, 9]
# range(0, 11, 2) = [0, 2, 4, 6, 8, 10]

print(range(0, 10, 3) == range(0, 11, 2))

# Expected output: False

Như bạn thấy từ các kết quả trên, dù các tham số của hàm range() khác nhau, chúng vẫn được coi là bằng nhau nếu dãy của cả hai là như nhau. Ở ví dụ thứ hai, thay đổi kích thước step khiến phép so sánh cho kết quả False.

Kết luận

Chúc mừng bạn đã hoàn thành hướng dẫn. Bạn có thể thử nghiệm thêm với hàm range() và tìm cách tùy biến để chấp nhận các kiểu dữ liệu khác ngoài số nguyên.

Nếu sau khi đọc xong, bạn nghĩ rằng mình sẽ có lợi khi luyện tập các hàm Python, hãy xem các hướng dẫn Hàm PythonHướng dẫn Vòng lặp for trong Python cho người mới bắt đầu của chúng tôi. Để học theo lộ trình có cấu trúc, hãy xem khóa Viết mã Python hiệu quả trên DataCamp, khóa này không chỉ trình bày chi tiết về hàm range() mà còn giúp bạn nắm các khái niệm lập trình tổng quát để viết mã thực sự hiệu quả mà không tốn nhiều chi phí phụ trợ. 

Chủ đề

Tìm hiểu thêm về Python

Courses

Hộp Công Cụ Python

4 giờ
317.8K
Tiếp tục phát triển kỹ năng Khoa học Dữ liệu hiện đại của bạn bằng cách tìm hiểu về các cấu trúc lặp (iterators) và biểu thức danh sách (list comprehensions).
Xem chi tiếtRight Arrow
Bắt đầu khóa học
Xem thêmRight Arrow