Các kiểu dữ liệu trong Python

Table of Content

Kiểu dữ liệu Python được dùng để xác định kiểu của một biến. Trong bài viết này, chúng ta sẽ đi qua tất cả các loại dữ liệu và thảo luận về chức năng của từng loại.

Python không yêu cầu khai báo biến với kiểu dữ liệu xác định. Bạn chỉ cần gán giá trị cho một biến, lập tức nó được tạo, kiểu dữ liệu của biến được tự động suy ra từ giá trị đã được gán cho biến ấy. Do vậy Python là một ngôn ngữ lập trình có kiểu động.

Để xem kiểu giá trị mà một biến đang giữ, chúng ta có thể sử dụng hàm type().

Python tích hợp sẵn một các kiểu dữ liệu sau đây:

  1. Kiểu dữ liệu số: int, float, complex
  2. Kiểu dữ liệu chuỗi: str
  3. Kiểu dữ liệu có trình tự: list, tuple, range
  4. Kiểu nhị phân: bytes, bytearray
  5. Kiểu dữ liệu ánh xạ: dict
  6. Kiểu lôgic: bool
  7. Kiểu tập hợp: set, frozenset.
  8. Kiểu None

Kiểu dữ liệu số

Kiểu số nguyên: int

Kiểu số nguyên int được dùng để biểu diễn một số nguyên.

# a biến được gán giá trị là số nguyên
>>> a = 10
>>> type(a)
<class 'int'>

Ta có thể viết số nguyên trong các hệ cơ số khác nhau như:

  1. Hệ thập phân (mặc định): các số được viết sử dụng các chữ số từ 0 đến 9.
  2. Hệ nhị phân: các số được viết sử dụng hai chữ số 0 hoặc 1, với tiền tố 0b hoặc 0B.
  3. Hệ bát phân: các số được viết sử dụng các chữ số từ 0 đến 7, với tiền tốc 0o hoặc 0O.
  4. Hệ thập lục phân: các số được viết sử dụng các chữ số từ 0 đến 9 và các chữ cái từ a đến f hoặc A đến F, với tiền tốc 0x hoặc 0X.

Ví dụ:

>>> 0b1111
15
>>> 0B111
7
>>> 0o123
83
>>> 0O765
501
>>> 0xFACE
64206
>>> 0xface
64206

Ta có thể chuyển một số nguyên từ hệ cơ số này sang hệ cơ số khác bằng những hàm chuyển đổi cơ số sau:

  1. bin(): chuyển đối sang hệ nhị phân.
  2. oct(): chuyển đổi sang hệ bát phân.
  3. hex(): chuyển đổi sang hệ thập lục phân.

Ví dụ:

>>> bin(15)
'0b1111'
>>> bin(0o11)
'0b1001'
>>> bin(0x10)
'0b10000'
>>> oct(10)
'0o12'
>>> oct(0b1111)
'0o17'
>>> oct(0x123)
'0o443'
>>> hex(100)
'0x64'
>>> hex(0b111111)
'0x3f'
>>> hex(0o12345)
'0x14e5'

Chú ý rằng, kết quả trả về của các hàm trên là một chuỗi chứ không phải số!!!

Kiểu số thực: float

Kiểu số thực float dùng để biểu diễn các số thực (vị trí dấu chấm có thể thay đổi).

# f là biến được gán giá trị là số thực
>>> f = 1.234
>>> type(f)
<class 'float'>

Khi cần viết một số thực rất nhỏ hoặc rất lớn, chúng ta có thể sử dụng ký hiệu e hoặc E. Khi ta viết e3 có nghĩa là 1000 (103).

# Hằng số hấp dẫn G là một số rất nhỏ
>>> G = 6.67e-11
>>> G
6.67e-11
# Khối lượng Trái Đất là một số rất lớn
>>> M = 6e24
>>> M
6e+24

Kiểu số phức: complex

Một số phức được viết theo dạng: a + bj trong đó a là phần thực còn b là phần ảo của số phức.

# c là một biến gán giá trị là số phức
>>> c = 0.5 + 0.1j
>>> type(c)
<class 'complex'>

Bạn có thể thực hiện một số phép toán đối với các số phức:

>>> a = 10 + 1.5j
>>> b = 20 + 2.5j
>>> c = a + b
>>> c
(30+4j)

Phần thực và phần ảo của số phức c có thể truy cập qua thuộc tính c.realc.imag:

>>> c = 10.5 + 3.6j
>>> c.real
10.5
>>> c.imag
3.6

Kiểu lôgic: bool

Kiểu lôgic dùng để biểu diễn các giá trị lôgic. Các giá tri lôgic trong Python gồm TrueFalse. Ở sâu bên trong Python coi giá trị True như số nguyên 1 và giá trị False như số nguyên 0.

>>> True + True
2
>>> True - False
1

Kiểu chuỗi: str

Kiểu chuỗi dùng để biểu diễn một chuỗi. Một chuỗi là một dãy kí tự đặt giữa hai dấu nháy đơn ('‘) hoặc hai dấu nháy kép ("").

# s1 và s2 là hai chuỗi có nội dung như nhau
>>> s1 = 'Chuỗi giữa hai dấu nháy đơn'
>>> s2 = "Chuỗi giữa hai dấy nháy kép"

Cũng có thể tạo một chuỗi bằng cách đặt giữa cặp ba dấu nháy đơn (''') hoặc ba dấu nháy kép (""").

# chuỗi tạo bởi ba dấu nháy
>>> s1 = '''Chuối giữa cặp ba
dấu nháy đơn'''
>>> s2 = """Chuỗi giữa cặp ba
dấu nháy kép"""

Khác với chuỗi đặt giữa hai dấu nháy, chuỗi tạo bởi ba dấu nháy có thể xuống dòng.

Python không có kiểu kí tự, chúng ta có thể biểu diễn một ký tự bằng cách sử dụng kiểu chuỗi.

# Kí tự cũng là một chuỗi
>>> c = 'a'
>>> type(c)
<class 'str'>

Kiểu danh sách: list

Kiểu danh sách được dùng để biểu diễn nhóm các phần tử được sắp xếp có trình tự và có thể lặp lại. Các phần tử trong danh sách có thể có kiểu dữ liệu khác nhau.

Một danh sách được viết bằng cách liệt kê các phần tử và đặt giữa hai dấu ngoặc vuông:

>>> l = [10, 10.5, 'Hung', True, 10]
>>> l
[10, 10.5, 'Hung', True, 10]
>>> type(l)
<class 'list'>

Ta có thể truy cập và thay đổi một phần tử của danh sách thông qua chỉ số của nó bằng cách sử dụng toán tử []. Chỉ số bắt đầu từ 0 – ứng với phần tử đầu tiên.

>>> numbers = [10, 20, 30, 40]
>>> numbers[0]
10
>>> numbers[1] = 50
>>> numbers
[10, 50, 30, 40]

Ta cũng có thể thêm và xóa một phần tử.

# Thêm phần tử vào cuối danh sách
>>> numbers = [10, 20, 30, 40]
>>> numbers.append(50)
>>> numbers
[10, 20, 30, 40, 50]
>>> numbers.remove(20)
>>> numbers
[10, 30, 40, 50]

Kiểu tuple

Kiểu tuple giống hệt như kiểu danh sách. Điểm khác biệt là ta không thể thay đổi, thêm, xóa phần tử của một tuple được.

Một tuple được viết bằng cách liệt kê các phần tử.

>>> numbers = 10,20,30,40
>>> numbers
(10, 20, 30, 40)
>>> type(numbers)
<class 'tuple'>

Nhưng để rõ ràng hơn, ta nên đặt danh sách trong dấu ngoặc đơn.

>>> numbers = (10,20,30,40)
>>> numbers
(10, 20, 30, 40)
>>> type(numbers)
<class 'tuple'>

Ta có thể truy cập một phần tử qua chỉ số bằng toán tử [] nhưng không thể thay đổi phần tử này. Tuple cũng không hỗ trợ khả năng thêm hay xóa phần tử.

>>> numbers = (10, 20, 30, 40)
>>> numbers[1]
20
>>> numbers[1] = 100
TypeError: 'tuple' object does not support item assignment
>>> numbers.append('Hung')
 AttributeError: 'tuple' object has no attribute 'append'
>>> number.remove(10)
AttributeError: 'tuple' object has no attribute 'remove'

Kiểu từ điển: dict

Kiểu từ điển dùng để biểu diễn nhóm các phần tử được sắp xếp không theo trình tự cố định. Mỗi phần tử của từ điển là cặp giá trị có dạng key: value, trong đó key là khóa, còn value là giá trị ứng với khóa này. Khóa và giá trị có thể có bất cứ kiểu dữ liệu nào.

Ta có thể hiểu mỗi từ điển là một ánh xạ giữa khóa và giá trị.

Hai phần tử không thể có hai khóa giống nhau. Nói cách khác, mỗi phần tử phải có một khóa duy nhất. Tuy nhiên, hai khóa khác nhau có thể có cùng một giá trị.

Một từ điển được viết bằng cách liệt kê các phần tử và đặt giữa hai dấu ngoặc nhọn {}.

>>> my_info = {'name': 'Hung', 'country': 'Vietnam', 'age': 35}
>>> my_info
{'name': 'Hung', 'country': 'Vietnam', 'age': 35}
>>> type(my_info)
<class 'dict'>

Ta có thể truy cập một phần tử qua khóa của nó. Từ điển cho phép bạn thay đổi cũng như thêm một phần tử mới.

>>> my_info = {'name': 'Hung', 'country': 'Vietnam', 'age': 35}
>>> my_info['name']
'Hung'
>>> my_info['age'] = 36
>>> my_info
{'name': 'Hung', 'country': 'Vietnam', 'age': 36}
>>> my_info['married'] = False
>>> my_info
{'name': 'Hung', 'country': 'Vietnam', 'age': 36, 'married': False}

Kiểu tập hợp: set

Kiểu tập hợp dùng để biểu diễn nhóm các phần tử được sắp xếp không theo trình tự cố định, không lặp lại. Nó tương tự như khái niệm tập hợp trong Toán học.

Các phần tử của tập hợp có thể có kiểu khác nhau.

Một tập hợp được viết bằng cách liệt kê các phần tử và đặt giữa hai dấu ngoặc nhọn {}. Cách viết này giống cách viết một từ điển, điểm khác là các phần tử của từ điển là cặp khóa-giá trị, còn của tập hợp chỉ là một giá trị đơn lẻ.

>>> s = {100, 0, 10, 200, 10, 'Hung'}
>>> s
{0, 100, 200, 'Hung', 10}
>>> type(s)
<class 'set'>

Tập hợp hỗ trợ thêm, xóa một phần tử.

>>> s = {100, 0, 10, 200, 10, 'Hung'}
>>> s
{0, 100, 200, 'Hung', 10}
>>> s.remove(100)
>>> s
{0, 200, 'Hung', 10}
>>> s.add(60)
>>> s
{0, 200, 'Hung', 10, 60}

Kiểu tập hợp bất biến frozenset

Kiểu tập hợp bất biến frozenset giống hệt kiểu tập hợp set, ngoại trừ việc frozenset không hỗ trợ thêm, xóa phần tử.

Không có cách viết trực tiếp một frozenset, ta có thể chuyển một tập hợp thành tập hợp bất biến bằng hàm frozenset().

>>> numbers = {10, 20, 30, 40}
>>> fs_numbers = frozenset(numbers)
>>> fs_numbers
frozenset({40, 10, 20, 30})
>>> type(fs_numbers)
<class 'frozenset'>

Tập hợp bất biến không hỗ trợ thêm, xóa phần tử:

>>> numbers = {10, 20, 30, 40}
>>> fs_numbers = frozenset(numbers)
>>> fs_numbers.add(70)
AttributeError: 'frozenset' object has no attribute 'add'
>>> fs_numbers.remove(10)
AttributeError: 'frozenset' object has no attribute 'remove'

Kiểu khoảng: range

Kiểu khoảng dùng để biểu diễn một dãy số nguyên. Dãy số này tạo thành một cấp số cộng.

Một khoảng được tạo ra bằng hàm range(). Có ba dạng sử dụng hàm range().

  1. Dạng 1 đối số: range(end), tạo dãy số nguyên liên tiếp từ 0 đến end-1 trong đó end phải là số nguyên.
  2. Dạng 2 đối số: range(start,end), tạo dãy số nguyên liên tiếp từ start đến end-1 trong đó startend là các số nguyên.
  3. Dạng 3 đối số: range(start, end, step), tạo dãy số nguyên từ start đến end-1, hai số liên tiếp cách nhau step đơn vị.

Để in ra tất các số trong dãy số, ta sử dụng vòng lặp for:

>>> r1 = range(10)
>>> r1
range(0, 10)
>>> type(r1)
<class 'range'>
>>> for i in r1:
...     print(i)
...
0
1
2
3
4
5
6
7
8
9
>>> r2 = range(10,20)
>>> for i in r2:
...     print(i)
...
10
11
12
13
14
15
16
17
18
19
>>> r3 = range(10,20,2)
>>> for i in r3:
...     print(i)
...
10
12
14
16
18
>>>

Một khoảng cũng có hỗ trợ chỉ số, ta có thể truy cập một số nguyên của dãy qua chỉ số của nó.

>>> r = range(10,20,2)
>>> for i in r:
...     print(i)
...
10
12
14
16
18
>>> r[0]
10
>>> r[2]
14

Một khoảng không hỗ trợ thay đổi phần tử của nó:

>>> r = range(10,20,2)
>>> r[0] = 100
TypeError: 'range' object does not support item assignment

Kiểu bytes

Một bytes dùng để biểu diễn một mảng các byte. Mỗi byte gồm 8 bít, mỗi bít có giá trị 0 hoặc 1. Ta có thể biểu diễn một byte như một số nguyên có giá trị từ 0 đến 255.

Một bytes không thể viết trực tiếp được. Ta có thể tạo bytes từ một danh sách các số nguyên có giá trị từ 0 đến 255 bằng hàm bytes().

>>> bytes_list = [10, 20, 30, 40]
>>> bytes_variable = bytes(bytes_list)
>>> bytes_variable
b'\n\x14\x1e('
>>> type(bytes_variable)
<class 'bytes'>

Ta có thể truy cập phần tử của một bytes qua chỉ số:

>>> bytes_list = [10, 20, 30, 40]
>>> bytes_variable = bytes(bytes_list)
>>> bytes_variable[0]
10
>>> bytes_variable[1]
20

Kiểu bytes không hỗ trợ thay đối phần tử.

>>> bytes_list = [10, 20, 30, 40]
>>> bytes_variable = bytes(bytes_list)
>>> bytes_variable[0] = 255
TypeError: 'bytes' object does not support item assignment

Kiểu bytearray

Kiểu bytearray giống hệt bytes nhưng ta có thể thay đổi phần tử.

>>> bytes_list = [10,20,30,40]
>>> bytearray_variable = bytearray(bytes_list)
>>> bytearray_variable
bytearray(b'\n\x14\x1e(')
>>> type(bytearray_variable)
<class 'bytearray'>
>>> bytearray_variable[0]
10
>>> bytearray_variable[0] = 255
>>> for i in bytearray_variable:
...     print(i)
...
255
20
30
40

Kiểu None

Kiểu None chỉ gồm một giá trị duy nhất là None.

None nghĩa là không có gì hoặc không có giá trị.

None tương tự như null trong Java và JavaScript.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *