Khai Báo Biến Và Hằng Trong Python

Biến và hằng trong Python

Trong bài này chúng ta sẽ cùng tìm hiểu cách khai báo biến và hằng trong Python: biến là gì, cách kiểm tra kiểu dữ liệu, biến toàn cục và cục bộ, hằng số, cách gán biến và in biến ra màn hình.

Nếu bạn đã học C thì sẽ thấy biến trong Python “thoáng” hơn rất nhiều: không cần khai báo kiểu, gán là dùng được luôn. Nhưng chính sự thoáng đó cũng có vài cạm bẫy, mình sẽ chỉ ra trong bài nhé.

Biến trong Python là gì?

Có 2 cách để hiểu biến trong Python.

Cách thứ nhất, biến giống như một cái hộp để chứa dữ liệu, ví dụ số hay chuỗi. Kết quả của phép tính hay chuỗi đã xử lý được cất vào biến để dùng lại nhiều lần sau đó.

Cách thứ hai, chính xác hơn với Python: biến giống như một cái nhãn dán lên dữ liệu. Dữ liệu nằm ở một vị trí nào đó trong bộ nhớ, còn biến chỉ là cái tên trỏ tới vị trí đó. Hiểu theo kiểu nhãn dán sẽ giúp bạn hiểu phần gán biến ở cuối bài dễ hơn.

Các loại biến trong Python
Hình 1. Các loại biến trong Python

Có bao nhiêu kiểu biến trong Python?

Dữ liệu lưu trong bộ nhớ có nhiều kiểu khác nhau. Python có 5 kiểu dữ liệu chuẩn hay dùng nhất: string (chuỗi), number (số), list (danh sách), dictionary (từ điển) và tuple.

Làm sao để kiểm tra kiểu dữ liệu của biến?

Một tình huống rất hay gặp: người dùng nhập dữ liệu vào, và chúng ta cần biết họ nhập số hay nhập chữ. Có 2 cách phổ biến để kiểm tra.

Kiểm tra kiểu dữ liệu của biến
Hình 2. Kiểm tra kiểu dữ liệu của biến

1. Dùng hàm Isdigit để xem kiểu biến là string hay number

Chuỗi trong Python có sẵn hàm isdigit(), trả về True nếu chuỗi chỉ gồm chữ số.

num = input("Nhập số của bạn ")
print("\n")

if num.isdigit():
    print("Dữ liệu nhập vào là số ")
else:
    print("Dữ liệu nhập vào là chuỗi ")

Lưu ý: isdigit() chỉ đúng với số nguyên dương. Nhập -5 hay 3.14 thì nó vẫn báo là chuỗi, vì dấu “-” và dấu “.” không phải chữ số. Muốn kiểm tra cả số âm và số thực thì dùng cách thứ 2 bên dưới.

2. Chuyển đổi thành kiểu dữ liệu float/int

Ý tưởng là cứ thử ép kiểu bằng int() hoặc float(). Nếu ép được thì đó là số, còn nếu chuỗi không phải dạng số thì Python sẽ báo lỗi ValueError. Chúng ta dùng try-except để bắt lỗi đó, bắt được lỗi nghĩa là người dùng nhập chữ.

user_input = input("Nhập tuổi của bạn ")
print("\n")

try:
    val = int(user_input)
    print("Dữ liệu nhập vào là int = ", val)
except ValueError:
    try:
        val = float(user_input)
        print("Dữ liệu nhập vào là float = ", val)
    except ValueError:
        print("Dữ liệu nhập vào không phải là number")

Thử int trước, không được thì thử float, vẫn không được thì kết luận không phải số.

Biến Global

Biến khai báo bên ngoài hàm gọi là biến global (biến toàn cục). Biến này đọc được ở cả bên trong lẫn bên ngoài hàm.

Ví dụ:

x = "Biến toàn cục" # khai báo biến x

# Gọi x từ trong hàm vidu()
def vidu():
    print("x trong hàm vidu() :", x)

vidu()

# Gọi x ngoài hàm vidu()
print("x ngoài hàm vidu():", x)

Lưu ý: Bên trong hàm chỉ đọc được biến global. Nếu bạn gán x = … bên trong hàm thì Python sẽ tạo ra một biến cục bộ mới tên x, biến global bên ngoài vẫn không đổi. Muốn sửa biến global thì phải khai báo global x ở đầu hàm.

Biến cục bộ

Biến khai báo bên trong hàm gọi là biến cục bộ (local). Nó chỉ tồn tại trong hàm đó, ra khỏi hàm là không dùng được nữa.

Ví dụ:

def vidu():
    y = "Biến cục bộ"
    print(y)

vidu()

Chạy đoạn code này sẽ in ra:

Biến cục bộ

Nếu bạn gọi print(y) ở ngoài hàm thì sẽ bị lỗi NameError vì y không tồn tại ở đó.

Thế nào là biến hằng?

Trước khi nói về hằng, nhắc lại cách khai báo biến trong Python. Cú pháp rất đơn giản:

<tên biến> = <giá trị gán cho biến>

Không cần khai báo kiểu dữ liệu trước như C. Gán giá trị gì thì Python tự hiểu biến có kiểu đó.

Ví dụ:

number = 10
number = 1.1
print(number)
input()

Biến number lúc đầu là 10, sau đó được gán lại thành 1.1, nên kết quả in ra là 1.1. Dòng input() cuối chỉ để giữ cửa sổ không bị tắt ngay khi bạn chạy file bằng cách click đúp.

Hằng (constant) là biến mà giá trị không đổi trong suốt chương trình. Theo quy ước, tên hằng viết in hoa toàn bộ, các từ cách nhau bằng dấu gạch dưới.

Ví dụ:

PI = 3.14 # đây là hằng
bankinh = 20 # đây là biến

Lưu ý: Python không có hằng thật sự như const trong C. Viết in hoa chỉ là quy ước để người đọc biết đây là hằng, bạn vẫn gán lại PI = 4 được và Python không báo lỗi gì cả. Vậy nên tự giác đừng gán lại nhé.

Với dự án lớn, các hằng số thường được gom vào một module riêng (một file .py riêng), rồi import vào file chính khi cần dùng.

Biến hằng
Hình 3. Biến hằng

Cách gán biến trong Python

Có 2 kiểu gán biến hay gặp: gán giá trị của biến này cho biến khác, và gán lại một giá trị mới cho biến đã có.

1. Gán giá trị một biến cho biến khác

num1 = 100
num2 = num1

print("num1", num1)
#>> num1 100
print("num2", num2)
#>> num2 100

Quay lại ví dụ nhãn dán: lúc này num1 và num2 là 2 cái nhãn cùng dán lên một giá trị 100 trong bộ nhớ. Vậy nếu gán num1 thành giá trị khác thì num2 có bị đổi theo không?

num1 = 100
num2 = num1
num1 = 200

print("num1", num1)
#>> num1 200
print("num2", num2)
#>> num2 100

Câu trả lời là không. Gán num1 = 200 chỉ là bóc nhãn num1 ra dán sang giá trị 200, còn nhãn num2 vẫn dán ở 100. Kết quả in ra:

num1 200
num2 100

2. Gán giá trị khác với giá trị khởi tạo lúc đầu cho biến

Biến đã có giá trị rồi thì vẫn gán lại giá trị mới được bình thường.

price = 100
price = 200
print(price)
#>> 200

Thêm nữa, biến tự nhận kiểu theo giá trị được gán, nên bạn có thể gán một giá trị khác hẳn kiểu ban đầu.

Ví dụ:

name = "Kiyoshi"
name = 30
print(name)
#>> 30

Biến name lúc đầu là chuỗi, sau đó thành số. Python cho phép, nhưng trong code thật thì các bạn nên hạn chế, đọc lại rất dễ nhầm.

Cách in biến ra màn hình

Để in biến ra màn hình trong ngôn ngữ lập trình Python, chúng ta dùng hàm print().

Ví dụ 1: dùng hàm print() để in ra màn hình

print("Học Python rất thú vị.")

a = 5
# 2 object
print("a =", a)

b = a
# 3 object
print('a =', a, '= b')

Kết quả:

Học Python rất thú vị.
a = 5
a = 5 = b

print() nhận bao nhiêu đối tượng (object) cũng được, ngăn cách bằng dấu phẩy, và mặc định in cách nhau một dấu cách.

Ví dụ 2: print() với các tham số sep và end

a = 5
print("a =", a, sep='00000', end='\n\n\n')
print("a =", a, sep='0', end='')

Kết quả:

a =000005


a =05

Tham số sep thay dấu cách mặc định giữa các object, còn end thay ký tự xuống dòng mặc định ở cuối.

Kết luận

Biến trong Python dễ dùng hơn C nhiều vì không phải khai báo kiểu. Đổi lại, các bạn cần nhớ 2 điểm: biến chỉ là nhãn dán lên dữ liệu, và hằng chỉ là quy ước viết in hoa chứ Python không cấm gán lại.

Nếu thấy bài viết này hay, hãy chia sẻ tới bạn bè đang học Python nhé. Hẹn gặp lại trong bài tiếp theo.

Rate this post

Để lại một bình luận

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 *