Biến, phép gán và các kiểu dữ liệu cơ sở trong Python

    2

    Biến và phép gán là những thành phần cơ bản và thường gặp nhất trong bất kỳ ngôn ngữ lập trình nào. Trong Python, biến, phép gán và kiểu dữ liệu có nhiều điểm khác biệt với C# hay Java do Python là một ngôn ngữ định kiểu động và định kiểu yếu.

    Bài học này sẽ trình bày chi tiết vấn đề sử dụng biến, phép gán trong Python. Chúng ta cũng sẽ giới thiệu sơ lược về các kiểu dữ liệu cơ bản của Python.

    Biến, phép gán, kiểu dữ liệu trong Python

    Hãy xem một số lệnh sau:

    name = 'Donald Trump' # biến kiểu chuỗi
    age = 40 # biến kiểu số
    companies = ['Apple', 'Google', 'Microsoft'] # biến kiểu danh sách
    person_tuple = ('Trump', 'USA', 40, 'President') # biến kiểu tuple
    person_dict = {'Name': 'Trump', 'Age': 40, 'Job': 'US President'} # biến kiểu từ điển
    print(name)
    print(age)
    print(companies)
    print(person_tuple)
    print(person_dict)
    

    Bạn có thể tạo file py sử dụng IDLE, PyCharm, hay Visual Studio.

    Chạy chương trình ở chế độ script bạn thu được kết quả như sau:

    ví dụ sử dụng biến trong python

    Nếu sử dụng chế độ tương tác, bạn nhập lệnh như sau trong Python Interpreter hoặc IDLE:

    >>> name = 'Donald Trump'
    >>> name
    'Donald Trump'
    >>> age = 40
    >>> age
    40
    >>> companies = ['Apple', 'Google', 'Microsoft']
    >>> companies
    ['Apple', 'Google', 'Microsoft']
    >>> person_tuple = ('Trump', 'USA', 40, 'President')
    >>> person_tuple
    ('Trump', 'USA', 40, 'President')
    >>> person_dict = {'Name': 'Trump', 'Age': 40, 'Job': 'US President'}
    >>> person_dict
    {'Name': 'Trump', 'Age': 40, 'Job': 'US President'}
    >>>

    Đây là các lệnh khai báo và gán giá trị cho biến với một số kiểu dữ liệu cơ sở của Python.

    Trong ví dụ trên, name, age, companies, person_tuple, person_dict là các biến, dấu = là dấu phép gán, bên tay phải dấu = là giá trị của biến.

    Biến trong Python

    Định nghĩa và cách hoạt động của biến trong Python có điểm khác biệt với các ngôn ngữ như C.

    Trong Python, biến là một tên gọi đại diện cho một giá trị trong bộ nhớ. Trong đó, giá trị có thể do bạn tự khai báo hoặc được Python tính toán từ một biểu thức.

    Để dễ hình dung, biến trong Python có nét tương tự như file và shortcut trong windows. Trong đó, file trên ổ đĩa tương tự như giá trị của biến trong bộ nhớ. Shortcut (lối tắt) đến file tương tự như biến trong Python.

    Với hình dung như thế, trong Python:

    • nhiều biến có thể “trỏ” đến cùng một giá trị trong bộ nhớ: giống như bạn có thể tạo nhiều lối tắt tới cùng một file, bạn có thể để cho nhiều biến khác nhau cùng trỏ tởi một giá trị chung.
    • một biến có thể trỏ sang các giá trị khác nhau: khi tạo ra biến bạn có thể để cho nó trỏ tới giá trị a, sau đó bạn có thể để cho nó trỏ tới giá trị b, trong đó a và b hoàn toàn khác kiểu nhau.

    Như vậy, biến trong Python thực tế chỉ là một tên gọi mà ta có thể sử dụng để truy xuất giá trị. Biến trong Python không trực tiếp chứa giá trị.

    Biến trong Python gần tương tự như con trỏ trong C/C++ hay kiểu tham chiếu trong C#.

    biến tham chiếu tới giá trị trong python
    Ví dụ, top_speed trỏ tới giá trị 160 (nằm đâu đó trong bộ nhớ), distance trỏ tới giá trị 300.
    chuyển tham chiếu giá trị của biến trong python
    Biến có thể trỏ sang giá trị khác (bỏ lại giá trị cũ trong bộ nhớ). Giá trị cũ không sử dụng tới sẽ bị thu dọn tự động.

    Biến trong Python bắt buộc phải tạo ra cùng phép gán. Giá trị của biến trong bộ nhớ được tự động “thu dọn” khi không sử dụng đến nhờ một tiến trình gọi là Garbage Collection.

    Nếu bạn quen thuộc với Java hay C# thì sẽ không xa lạ với Garbage Collection.

    Tên biến bắt buộc phải tuân thủ quy tắc đặt định danh trong Python. Ngoài ra có một số kiểu đặt tên biến bạn nên tuân theo.

    Kiểu 1: Ký tự đầu tiên viết thường; các chữ cái trong từ viết thường; nếu tên có nhiều từ thì viết hoa chữ cái đầu mỗi từ tiếp theo. Ví dụ companySortedList, firstName, lastName. Đây là lối đặt tên thường gặp trong các ngôn ngữ kiểu C và được gọi là kiểu camelCase.

    Kiểu 2: tất cả ký tự trong tên gọi đều viết thường; nếu tên có nhiều từ thì phân tách bằng dấu gạch chân _. Ví dụ first_name, last_name, company_sorted_list. Đây là quy ước dùng phổ biến hơn trong Python.

    Có thể hơi lạ một chút: trong Python không có khái niệm hằng như trong các ngôn ngữ khác. Nếu muốn sử dụng hằng, bạn hãy tạo một biến và đặt tên toàn bộ là chữ hoa để nhớ rằng mình không được thay đổi giá trị của “biến” này!

    Phép gán trong Python

    Như ở trên đã trình bày về cách hoạt động của biến, phép gán trong Python có nhiệm vụ “ghép đôi” biến với giá trị.

    Ví dụ, trong lệnh sau:

    a = 1000
    b = a
    c = b

    Lệnh gán a = 1000 sẽ tạo ra một giá trị số nguyên 1000 trong bộ nhớ và ‘a’ được dùng để trỏ tới giá trị này. ‘a’ đại diện cho giá trị 1000 trong bộ nhớ chứ ‘a’ không trực tiếp chứa giá trị 1000. Sử dụng ‘a’ trong chương trình tương đương với sử dụng giá trị 1000 từ bộ nhớ.

    Lệnh gán b = a tạo tiếp biến b trỏ tới cùng giá trị với a, tức là cùng trỏ tới giá trị 1000 trong bộ nhớ. Khi này b và a thực tế là như nhau. Tương tự, lệnh gán c = b tạo tiếp biến c và cùng trỏ tới giá trị của b (và cũng là giá trị của a). Như vậy, a, b và c thực tế là cùng một giá trị nhưng khác tên gọi. Giống như cùng một file nhưng bạn có thể tạo nhiều shortcut tới nó.

    Trong Python,

    1. khai báo biến luôn phải đi kèm gán giá trị;
    2. không cần chỉ định kiểu dữ liệu;
    3. không cần từ khóa nào khi khai báo biến.

    Để tiện lợi, Python cho phép ghép các phép gán như sau:

    a = b = c = 1000 # tạo ra 3 biến a, b, c và cùng trỏ tới một giá trị
    first_name, last_name, age = "Donald", "Trump", 40 # tạo 3 biến và trỏ tới 3 giá trị khác nhau (theo thứ tự)

    Bạn có thể thử ở chế độ tương tác như sau:

    gán giá trị nhiều biến trong python

    Tức là bạn có thể tạo ra nhiều biến cùng lúc và cho chúng trỏ tới cùng một giá trị, hoặc bạn cũng có thể đồng thời khai báo nhiều biến trỏ tới nhiều giá trị khác nhau.

    Lưu ý, trong phép gán a = b = c = 1000. Nếu bạn tiếp tục gán a = 2000 sau đó, Python sẽ tạo ra một giá trị mới (2000) và a trỏ sang một giá trị mới này. Tuy nhiên b và c vấn trỏ sang giá trị cũ (1000). Điều tương tự xảy ra nếu giá trị là chuỗi. Số và chuỗi là các kiểu dữ liệu bất biến (immutable) trong Python.

    Kiểu dữ liệu không ảnh hưởng đến phép gán. Nghĩa là ban đầu bạn gán cho biến giá trị số, sau này có tiếp tục gán cho biến đó giá trị chuỗi, v.v.. Ví dụ:

    >>> a = 1000 # ban đầu a trỏ tới giá trị số
    >>> a
    1000
    >>> a = "Donald Trump" # a trỏ tới giá trị chuỗi
    >>> a
    'Donald Trump'
    >>> 

    Trong ví dụ trên, ban đầu a trỏ tới giá trị số nguyên, sau đó a lại trỏ tới giá trị chuỗi ký tự.

    Các kiểu dữ liệu cơ bản của Python

    Khi khai báo và gán giá trị cho biến bạn không cần chỉ định kiểu dữ liệu. Python tự động xác định kiểu dữ liệu. Trong bài học này chúng ta chỉ điểm qua một số nét chính của các kiểu dữ liệu này. Trong các bài học sau sẽ đi vào chi tiết của từng kiểu.

    Python có các loại kiểu dữ liệu cơ bản: số, chuỗi, danh sách, tuple, từ điển, boolean.

    Kiếu số trong python chia làm 3 loại: số nguyên (int), số thực (float), số phức (complex). Dưới đây là ví dụ về biểu diễn giá trị số trong Python:

    intfloatcomplex
    100.03.14j
    10015.2045.j
    -786-21.99.322e-36j
    0o8032.3+e18.876j
    -0o490-90.-.6545+0J
    -0x260-32.54e1003e+26J
    0x6970.2-E124.53e-7j

    Số nguyên có thể viết ở cơ số 10 (mặc định), cơ số 8 (bắt đầu bằng 0o), cơ số 16 (bắt đầu bằng 0x). Kiểu float phải có dấu chấm thập phân và có thể viết ở dạng khoa học. Kiểu complex phải có ký tự ảo j (hoặc J).

    Chú ý: Python 2.x có hai kiểu số nguyên int và long. Kiểu long cần biểu diễn với hậu tố L (hoặc l). Số nguyên ở hệ cơ số 8 viết bắt đầu bằng 0. Vì vậy, khi đọc tài liệu nên lưu ý xem đó là Python 2 hay Python 3. Hai phiên bản này có nhiều điểm không tương thích.

    Kiểu boolean chỉ nhận một trong hai giá trị True hoặc False và là một kiểu con của kiểu số nguyên. Ví dụ:

    >>> b = True
    >>> b
    True
    >>> b = False
    >>> b
    False
    >>>

    Lưu ý giá trị boolean phải viết chính xác là True/False. Nếu viết true/false sẽ bị lỗi:

    >>> b = true # lưu ý giá trị phải là True hoặc False
    Traceback (most recent call last):
      File "<pyshell#0>", line 1, in <module>
        b = true
    NameError: name 'true' is not defined
    >>>

    Kiểu chuỗi ký tự được viết trong cặp dấu ngoặc đơn ”, ngoặc kép “”, trong cặp ba dấu ngoặc đơn hoặc ba dấu ngoặc kép. Ví dụ dưới đây là những cách khác nhau để viết giá trị chuỗi “Hello world” trong Python:

    s1 = 'Hello world' # trong cặp ngoặc đơn
    s2 = "Hello world" # trong cặp ngoặc kép
    s3 = '''Hello world''' # trong cặp 3 dấu ngoặc đơn
    s4 = """Hello world""" # trong cặp 3 dấu ngoặc kép.

    Mặc định chuỗi ký tự trong Python chỉ chứa ký tự Unicode. Python không có kiểu ký tự. Ký tự được coi là một chuỗi có 1 phần tử.

    Kiểu danh sách trong Python tương tự như kiểu mảng trong các ngôn ngữ như C nhưng không giới hạn kiểu dữ liệu của phần tử cũng như không cố định số phần tử. Cách viết giá trị kiểu danh sách như sau:

    companies = ['Apple', 'Google', 'Microsoft', 'IBM', 1945, 1975]

    Tuple là kiểu dữ liệu ít gặp ở các ngôn ngữ như C. Tuple tương tự như một danh sách cố định chỉ đọc. Bạn cũng có thể hình dung tuple giống như danh sách tham số của phương thức trong C. Tuple được viết như sau:

    tuple = ('Donald Trump', 40, 'USA')

    Từ điển chứa các cặp khóa : giá trị tương tự như từ điển song ngữ. Giá trị của từ điển được viết như sau:

    person = {'Name' : 'Donald', 'Age' : 40, 'Job' : 'President'}

    Trong các bài tiếp theo chúng ta sẽ học chi tiết về từng kiểu dữ liệu.

    Kết luận

    Trong bài học này chúng ta đã xem xét chi tiết việc sử dụng biến trong Python. Nếu bạn đã từng học một ngôn ngữ như C# hay Java, bạn có thể thấy biến, kiểu dữ liệu và phép gán trong Python có nhiều khác biệt.

    Những đặc điểm như chúng ta đã học ở trên khiến Python là một ngôn ngữ định kiểu động (không cần xác định kiểu của biến khi khai báo) và định kiểu yếu (có thể tự do gán giá trị cho biến mà không cần quan tâm đến kiểu). Những điểm này khác biệt với C# hay Java là những ngôn ngữ định kiểu tĩnh và định kiểu mạnh.

    + Nếu bạn thấy site hữu ích, trước khi rời đi hãy giúp đỡ site bằng một hành động nhỏ để site có thể phát triển và phục vụ bạn tốt hơn.
    + Nếu bạn thấy bài viết hữu ích, hãy giúp chia sẻ tới mọi người.
    + Nếu có thắc mắc hoặc cần trao đổi thêm, mời bạn viết trong phần thảo luận cuối trang.
    Cảm ơn bạn!

    Theo dõi
    Thông báo của
    guest

    2 Thảo luận
    Cũ nhất
    Mới nhất
    Phản hồi nội tuyến
    Xem tất cả bình luận
    cacto

    dit me may day nhu cac

    cacbe

    thang lon nay lao