Trang chủ Lập trình Python Ngày đầu học Python

Ngày đầu học Python

1

Việc học một ngôn ngữ lập trình không phải là dễ, nó không giống như việc chúng ta cứ mua sách về đọc là có thể bắt tay vào làm ngay được. Cần phải có một chút khả năng, thật nhiều đam mê thì mới có thể theo ngành này được. Dưới đây là một vài cảm nhận của mình trong ngày đầu tiên gõ code, đó “thật là phê”. H mình mới hiểu tại sao cái tụi lập trình viên nó hay “vò đầu bứt tai” nhiều đến như vậy.

1. Cắp sách tới trường

Đầu tiên mình hiểu ra rằng, việc lập trình chính là viết ra những dòng lệnh cho máy tính xử lý trình tự theo thời gian. Còn sâu xa hơn thì mình cũng không rõ lắm, cần phải mất rất nhiều thời gian nữa để làm rõ vấn đề này. Nôm na thì lập trình nó là một con đường đầy đau khổ, chỉ có hoa thơm và cỏ dại thôi, cok có trái ngọt đâu (tự trấn an bản thân). Ngày trước khi còn mài mông trên ghế nhà trường thì cũng có chút thời gian để làm quen với anh Pascal. Nhưng có lẽ chỉ có mình là biết anh ấy, còn anh ấy thì không thèm để ý tới mình luôn nên cái gọi là khả năng tư duy lập trình của mình hồi đó nó gần như là một con số 0 to tướng. Đến nay đi làm, thật ra nghề nào cũng có nỗi khổ riêng của nó, nhưng mà nhìn mấy đứa bạn xung quanh thấy chúng nó ngoài làm phần cứng, phần mềm ra còn biết thêm chút ít lập trình. Nghe nói là có thể lên mấy trang web nước ngoài để nhận việc về làm thêm cũng kiếm được nên mình đương nhiên cũng không thể bỏ qua một cơ hội như thế. Sẵn còn độc thân lại chưa có người iu nên dành chút ít thời gian để học lập trình cũng không phải là không có lý.

Nhưng mà nó đâu có đơn giản như thế, để hiểu và nắm bắt được một ngôn ngữ lập trình bạn cần phải có tư duy của một cỗ máy. Tức là ở đây mình muốn nói tới logic trong mọi ngóc ngách của vấn đề. Bạn biết đấy, để đi từ A đến C thì nó đương nhiên phải đi qua B, hay là đơn giản hơn nếu bạn không phải là con trai thì có thể bạn là con gái, còn không thì chắc chắn bạn thuộc thế giới thứ 3. Vậy thôi, logic nó là như vậy, đơn giản và chính xác như một cái máy. Nếu mọi thứ bạn làm đều hợp logic thì phần mềm bạn tạo ra sẽ chạy một cách trơn chu, ngon lành cành đào. Nói tóm lại, cố gắng làm ít lỗi nhất có thể để không phải cắm đầu vào đi sửa cho người ta.

Dài dòng văn tự như thế cũng chỉ là mở màn cho một con đường sắp tới đây mà mình tin tưởng đi theo, đó là sử dụng ngôn ngữ Python để xây dựng ra những phần mềm ăn khách nhất. Thế thôi nhỉ?

2. Chào mừng đến với Python

# Python 3: Simple arithmetic
>>> 1 / 2
0.5
>>> 2 ** 3
8
>>> 17 / 3  # classic division returns a float
5.666666666666667
>>> 17 // 3  # floor division
5

Nhìn đoạn mã trên, hẳn các bạn sẽ cùng suy nghĩ giống mình “Python đây sao? Thật đơn giản”. Đúng vậy, Python đơn giản cũng như cái tên của nó. Việc đầu tiên là mình vào trang chủ Python, cài đặt python3 và sau đó là cố gắng làm theo những ví dụ trên sách. Để làm gì nhỉ? Để mình hiểu môi trường làm việc của Python, cách viết và chạy mã Python trên máy tính nó ra làm sao.

Enter là xong thôi chứ gì? Ah ha! Hẳn như thế, vì Python có cấu trúc sáng sủa, rõ ràng, cú pháp của Python dễ đọc, dễ học và dễ thuộc nên rất thích hợp cho mình là những người mới bắt đầu học lập trình. Và tính đến này Python cũng có 30 năm tuổi đời rồi đấy nhé. Vậy trước hết chúng ta hãy cùng tìm hiểu xem ông tướng Python này làm được những gì nhé.

3. 7 Ứng dụng của Python trong thực tế

7 ứng dụng này mình copy từ nordiccoder, mặc dù vậy mình đọc cũng thấy khả dễ hiểu về những gì Python đã và đang làm được. Xin mạn phép chia sẻ bên dưới:

1. Scripting language

Ứng dụng đầu tiên là dùng ngôn ngữ Python để viết ngôn ngữ lập trình kịch bản. Nếu bạn đang có ý định viết một chương trình mẫu (miniature) hay một chương trình tùy biến (ad-hoc) để tự động hóa những việc bạn làm trên máy tính, hãy nghĩ tới việc ứng dụng Python! Người ta hay dùng nó với mục đích này.

Trên thực tế, bạn có thể viết script bằng những ngôn ngữ khác, không chỉ riêng ngôn ngữ Python. Nhưng nếu bạn muốn viết những đoạn script có liên quan tới thư viện toán các hàm toán học Math, để phân tích dữ liệu, nghiên cứu dữ liệu thì Python là ứng cử viên sáng giá.

Khả năng khai thác những nguồn thư viện đa dạng của loại ngôn ngữ này sẽ cho phép bạn làm được rất nhiều thứ thú vị.

Nhiều người đã ứng dụng Python để viết ra một đoạn script mà bạn có thể đưa vào bất cứ một video nào và chương trình sẽ cho ra hàng loạt các bản ghi (transcript) đã được chuyển ngữ ngẫu nhiên. Những bản này cũng không mấy hoàn hảo nguyên nhân là do cách dùng từ và ngữ điệu của người Châu Á chúng ta, tuy nhiên ít nhất thì nó cũng được miễn phí.

2. Nghiên cứu mang tính học thuật với dữ liệu lớn

Ngôn ngữ Python là một nguồn mở và miễn phí. Điều này có nghĩa là nếu nghiên cứu của bạn thành công và bạn muốn dùng cái bạn vừa tạo ra vào mục đích thương mại thì bạn không cần phải chi trả gì cả.

Luis Otavio Martins có chia sẻ một câu chuyện , rằng, một người bạn của anh đã dùng phần mềm MATLAB để làm nghiên cứu. Khi anh này muốn xin cấp bằng sáng chế cho công trình nghiên cứu của mình, anh phát hiện ra rằng anh cần phải trả rất nhiều tiền bản quyền cho công ty Mathworks, chủ sở hữu phần mềm trên.

Không phải ai cũng là một nhà nghiên cứu, cũng có thể bạn hoàn toàn không có nhu cầu để nhận bằng cái bằng sáng chế nào. Tuy nhiên, có những ngành nghề, lĩnh vực mà dữ liệu là vấn đề quan trọng.

Ví dụ, nhà báo luôn cần dữ liệu lưu trữ những câu chuyện của mình, nhà thuốc của các bệnh viện cần dữ liệu để theo dõi xem loại thuốc nào có hiệu quả nhất với bệnh nhân của họ.

Nếu bạn là một nhà nghiên cứu, thì đã đến lúc bạn cần xắn tay áo lên để làm quen với loại ngôn ngữ lập trình này. Việc nghiên cứu sẽ đòi hỏi bạn phải tổng hợp, xử lý, hình dung và phân tích dữ liệu khá nhiều.

Gregory Saxton, người đã và đang tiến hành nghiên cứu về truyền thông xã hội (social media) đã viết các đoạn script bằng ứng dụng Python để phục vụ việc nghiên cứu của mình. Đoạn script mà anh viết có thể tự động tải xuống các bài tweet (có API) hoặc các dữ liệu trích xuất (nếu không có API), rồi chuyển những thông tin thô sang các định dạng có thể đọc được và thậm chí là có thể phân tích ngôn ngữ luôn.

3. Ứng dụng web

Bạn có biết rằng một số đơn vị đình đám đã được xây dựng nhờ vào ngôn ngữ lập trình Python không?

Ứng dụng web Instagram bằng Python

Dưới đây là một danh sách lướt nhanh những công ty này:

  • Dropbox
  • Netflix
  • Spotify
  • Instagram
  • 21% cơ sở hạ tầng dữ liệu của Facebook
  • Youtube

Trong lĩnh vực phát triển ứng dụng web, khi nói đến ngôn ngữ Python, ta có thể kể tới các framework như DjangoFlask. Nếu bạn có một sự hiểu biết nhất định về lập trình và các framework cho web, bạn có thể xây dựng rất nhiều loại ứng dụng Python.

4. Data science: Ngành khoa học dữ liệu

Các nhà khoa học dữ liệu (data scientist) có 3 nhiệm vụ chính là phân tích, tổng hợp và tối ưu hóa dữ liệu cho các công ty.

Nếu bạn biết bất cứ một nhà khoa học dữ liệu nào, họ sẽ đều nói cho bạn nghe về R, một loại ngôn ngữ lập trình khác. R là ngôn ngữ tuyệt để phân tích dữ liệu, thống kế dữ liệu và các mô hình đồ họa.

Tuy nhiên, ngôn ngữ Python cũng đã tiến một bước dài trong lĩnh vực này. Nhìn vào biểu đồ bên dưới bạn sẽ thấy, Python ứng dụng đang đóng vai trò một loại ngôn ngữ lập trình phổ biến nhất trong ngành khoa học dữ liệu và nó đang dần nuốt chửng thị phần của R.

Data science: Ngành khoa học dữ liệu

Có rất nhiều thư viện Python mà bạn có thể dùng cho các bộ dữ liệu lớn. Một số thư viện đáng chú ý như NumPy (cho những thứ thuộc về toán học), SciPy (thư viện tin học kỹ thuật cao), Pandas (dành cho phân tích dữ liệu) và Matplotlib (dành cho mô hình hóa dữ liệu – data visualization).

5. Machine Learning và Trí thông minh nhân tạo (AI)

Ngày nay, Machine Learning (tạm gọi là Học Máy) và Ai (Trí thông minh nhân tạo hay Trí tuệ nhân tạo) là những thuật ngữ hết sức thông dụng, ta thấy ở khắp mọi nơi. Người ta cho rằng Machine Learning và AI cùng chỉ một thứ nhưng ở sắc thái khác nhau. Dưới đây là một bức hình thể hiện mối quan hệ giữa A.I và Deep Learning (Học Sâu)

Nguồn: StepUp Analytics

AI là một chương trình mô phỏng quá trình nhận thức của con người.

Machine Learning hay là Học Máy là khả năng máy móc có thể tiếp nhận một bộ dữ liệu và tự tìm hiểu, học hỏi từ bộ dữ liệu này rồi thay đổi thuật toán cho phù hợp. Trong phạm trù Deep Learning hay Học Sâu, khả năng học hỏi của máy là nhờ vào mạng lưới nơ-ron thần kinh nhân tạo đa dạng. Một mạng lưới nơ-ron thần kinh hay còn gọi là Neural Network là một hệ thống máy tính mô phỏng bộ não và hệ thống thần kinh của con người.

Rất nhiều thư viện Python có thể và đang được sử dụng cho lĩnh vực Machine Learning, Deep Learning và AI. Có thể kể tới: Tensorflow, Theano và PyTorce. Càng nhiều lập trình viên làm việc trong lĩnh vực này thì số lượng nguồn (resources) và thư viện (libraries) lại càng tăng lên.

Một trong những học viên đã tốt nghiệp của chúng tôi hiện giờ đang khởi động dự án Nurture.ai tại Singapore với mục tiêu tối ưu hiệu quả cho những nghiên cứu về AI, giúp những nghiên cứu này phát triển và  dễ tiếp cận hơn.

6. Lĩnh vực IoT – Internet Vạn Vật

IoT là một trong những thuật ngữ thông dụng nữa thường được dùng ở khắp nơi. Bất kể đâu, người ta cũng đề cập tới Internet Vạn Vật và Công nghệ 4.0

Bạn muốn khởi động trong lĩnh vực này? Bạn không cần phải trả một khoản tiền quá lớn hay mua từ cửa hàng nào cho việc ứng dụng Python vào Internet Vạn Vật. Ngày nay, người ta chỉ cần đầu tư một cái máy tính Raspberry Pi để khởi động những dự án DIY IoT của riêng mình.

Bạn có thể tham khảo thêm dự án Lock n’ Roll, hệ thống khóa của nhà từ xa do một trong những học viên của chúng tôi xây dựng nên.

Tin hay không tùy bạn, cậu ta và nhóm của mình đã xây dựng một ứng dụng và lập trình thiết bị trong khoảng 2 tuần lễ. Họ thậm chí còn làm được cả một nguyên mẫu.  Rất nhiều thư viện Python liên quan tới IoT – Internet Vạn Vật đang được xây dựng và phát triển.

Nếu bạn không tin,hãy xem qua website Zerynth này để thấy hơn 100 kho chứa của nó.

Tính ứng dụng Python trong thực tế mở ra rất nhiều khả năng. Bên cạnh việc lập trình các thiết bị IoT, bạn có thể dùng Python để tạo ra các ứng dụng web giúp điều khiển, kiểm soát các thiết bị, thu thập dữ liệu và phân tích chúng.

7. Lập trình game

Dù Python không mạnh như là Unity trong lĩnh vực lập trình game nhưng nó cho phép bạn xây dựng dăm ba thứ khá thú vị.

Game 2D

Super Potato Bruh một dạng game nhái của game Super Mario Brothers

Nếu bạn có dùng PyGame, bạn có thể tạo ra một game như kiểu Super Potato Bruh (một dạng game nhái của game Super Mario Brothers)

Text-based game (còn gọi là game text)

Nhờ vào Python ứng dụng vào nhiều ngành nghề nên Python được nhiều công ty, trường học sử dụng để dạy lập trình cho trẻ em và những người mới lần đầu học lập trình. Bên cạnh những tính năng và khả năng tuyệt vời thì cú pháp đơn giản và dễ sử dụng của nó là lý do chính cho việc này.

Hiện tại Nordic Coder đang có khóa học Data Analysis với Python đang được đào tạo trực tiếp từ các giảng viên đến từ các công ty công nghệ hàng đầu cũng như nhiều năm kinh nghiệm trong lĩnh vực Data Analysis/Data Science.

4. Viết chương trình đầu tiên

Sau khi vọc một đống tài liệu ở trên mạng nó khiến cái đầu tôi bung bung lên nhiều thứ “âm thanh” hỗn tạp khó mà nghe cho được. Tôi như bị lạc vào một ma trận Python vì nhận thấy có quá nhiều tài liệu, quá nhiều người viết chia sẻ về cách học. Tôi thử vào trang web Python của học để nghiên cứu thì ôi thôi hoá ra rằng nó viết bằng tiếng Anh các bạn ah. Lật đật đi tìm cuốn từ điển, ah không bây giờ đã có anh Google anh ấy dịch hộ cho rồi nên không phải mất thời gian tra từ nữa. Nào, những công cụ cần thiết của mình đâu hết rồi, hiện hình lên đi chứ.

1. Tải và cài đặt Python

Nói dông nói dài cũng phải bắt đầu từ cái gọi là Ứng dụng Python. Nếu không có nó, bạn sẽ không thể viết mã lệnh Python và biên dịch cho nó chạy ngon lành cành đào được. Bạn có thể tải xuống Python tại đây nhé. Tìm tới phiên bản mới nhất, hỗ trợ cho hệ điều hành máy tính của bạn và tải nó về máy. Sau khi tải xong, bấm vào nó để tiến hành cài đặt như bình thường. Python rất dễ tải và dễ cài đặt nên việc này mình làm trong nháy mắt.

Chương trình đầu tiên của mình đây

Hình ảnh trên là chương trình đầu tiên mình thực hiện sau khi đã cài đặt thành công python3, các bạn hãy thử phát xem sao nhé. Đương nhiên, đây không phải là một chương trình khó, nó là bước đầu mình chỉ muốn kiểm tra xem Python của mình đã hoạt động chưa thôi. Phần sau mới mông lung nè các bạn.

Lưu ý: mình chạy python3 trên máy Macbook nên sử dụng phần mềm Terminal, nếu bạn chạy Window thì phải sử dụng phần mềm Command

Ah mà tại sao lại là python3? Vì mình tải bản Python mới nhất, mà Python có lịch sử như sau nên các bạn lưu ý, cài phiên bản nào thì gõ lệnh python đó nha. Sự phát triển Python đến nay có thể chia làm các giai đoạn:

  • Python 1: bao gồm các bản phát hành 1.x. Giai đoạn này, kéo dài từ đầu đến cuối thập niên 1990. Từ năm 1990 đến 1995, Guido làm việc tại CWI (Centrum voor Wiskunde en Informatica – Trung tâm Toán-Tin học tại Amsterdam, Hà Lan). Vì vậy, các phiên bản Python đầu tiên đều do CWI phát hành. Phiên bản cuối cùng phát hành tại CWI là 1.2.
    • Vào năm 1995, Guido chuyển sang CNRI (Corporation for National Research Initiatives) ở Reston, Virginia. Tại đây, ông phát hành một số phiên bản khác. Python 1.6 là phiên bản cuối cùng phát hành tại CNRI.
    • Sau bản phát hành 1.6, Guido rời bỏ CNRI để làm việc với các lập trình viên chuyên viết phần mềm thương mại. Tại đây, ông có ý tưởng sử dụng Python với các phần mềm tuân theo chuẩn GPL. Sau đó, CNRI và FSF (Free Software Foundation – Tổ chức phần mềm tự do) đã cùng nhau hợp tác để làm bản quyền Python phù hợp với GPL. Cùng năm đó, Guido được nhận Giải thưởng FSF vì Sự phát triển Phần mềm tự do (Award for the Advancement of Free Software).
    • Phiên bản 1.6.1 ra đời sau đó là phiên bản đầu tiên tuân theo bản quyền GPL. Tuy nhiên, bản này hoàn toàn giống bản 1.6, trừ một số sửa lỗi cần thiết.
  • Python 2: vào năm 2000, Guido và nhóm phát triển Python dời đến BeOpen.com và thành lập BeOpen PythonLabs team. Phiên bản Python 2.0 được phát hành tại đây. Sau khi phát hành Python 2.0, Guido và các thành viên PythonLabs gia nhập Digital Creations.
    • Python 2.1 ra đời kế thừa từ Python 1.6.1 và Python 2.0. Bản quyền của phiên bản này được đổi thành Python Software Foundation License. Từ thời điểm này trở đi, Python thuộc sở hữu của Python Software Foundation (PSF), một tổ chức phi lợi nhuận được thành lập theo mẫu Apache Software Foundation.
  • Python 3, còn gọi là Python 3000 hoặc Py3K: Dòng 3.x sẽ không hoàn toàn tương thích với dòng 2.x, tuy vậy có công cụ hỗ trợ chuyển đổi từ các phiên bản 2.x sang 3.x. Nguyên tắc chủ đạo để phát triển Python 3.x là “bỏ cách làm việc cũ nhằm hạn chế trùng lặp về mặt chức năng của Python”. Trong PEP (Python Enhancement Proposal) có mô tả chi tiết các thay đổi trong Python. Các đặc điểm mới của Python 3.0 sẽ được trình bày phần cuối bài này.

Mình thì mình chỉ biết tải bản mới nhất để sử dụng thôi…

2. Đặc điểm

Dưới đây là 11 đặc điểm của Python mình tổng hợp được. Để có cái nhìn tổng quan, dễ hiểu về Python thì 11 đặc điểm sau sẽ giúp bạn rất nhiều.

Triết lý căn bản của ngôn ngữ Python được trình bày trong tài liệu The Zen of Python (PEP 20), có dạng thơ Haiku, tóm gọn như sau:

  • Đẹp đẽ tốt hơn xấu xí
  • Minh bạch tốt hơn che đậy
  • Đơn giản tốt hơn phức tạp
  • Phức tạp tốt hơn rắc rối
  • Dễ đọc

Dễ học, dễ đọc

Python được thiết kế để trở thành một ngôn ngữ dễ học, mã nguồn dễ đọc, bố cục trực quan, dễ hiểu, thể hiện qua các điểm sau:

Từ khóa

  • Python tăng cường sử dụng từ khóa tiếng Anh, hạn chế các ký hiệu và cấu trúc cú pháp so với các ngôn ngữ khác.
  • Python là một ngôn ngữ phân biệt kiểu chữ HOA, chữ thường.
  • Như C/C++, các từ khóa của Python đều ở dạng chữ thường.
anddelforisraise
asserteliffromlambdareturn
breakelseglobalnottry
classexceptiforwhile
continueexecimportpassyield
deffinallyinprint

Khối lệnh

Trong các ngôn ngữ khác, khối lệnh thường được đánh dấu bằng cặp ký hiệu hoặc từ khóa. Ví dụ, trong C/C++, cặp ngoặc nhọn { } được dùng để bao bọc một khối lệnh. Python, trái lại, có một cách rất đặc biệt để tạo khối lệnh, đó là thụt các câu lệnh trong khối vào sâu hơn (về bên phải) so với các câu lệnh của khối lệnh cha chứa nó.

Ví dụ, giả sử có đoạn mã sau trong C/C++:

#include <math.h>
//...
delta = b * b – 4 * a * c;
if (delta > 0)
{
    // Khối lệnh mới bắt đầu từ ký tự { đến }
    x1 = (- b + sqrt(delta)) / (2 * a);
    x2 = (- b - sqrt(delta)) / (2 * a);
    printf("Phuong trinh co hai nghiem phan biet:\n");
    printf("x1 = %f; x2 = %f", x1, x2);
}

Đoạn mã trên có thể được viết lại bằng Python như sau:

import math
#...
delta = b * b – 4 * a * c
if delta > 0:
    # Khối lệnh mới, thụt vào đầu dòng
    x1 = (- b + math.sqrt(delta)) / (2 * a)
    x2 = (- b – math.sqrt(delta)) / (2 * a)
    print "Phuong trinh co hai nghiem phan biet:"
    print "x1 = ", x1, "; ", "x2 = ", x2

Ta có thể sử dụng dấu tab hoặc khoảng trống để thụt các câu lệnh vào.

Như trên thì mình thấy để viết ngôn ngữ Python có vẻ trong sáng, rõ ràng dễ hiểu hơn rồi đấy. Một điều cực quan trọng là mình phải biết sử dụng Tab (thụt lùi) để phân biệt những đoạn code “ông – cha – con” thứ tự ưu tiên thực thi code rất quan trọng nha các bạn. Cái này khi vào viết chi tiết từng ứng dụng nho nhỏ các bạn sẽ dễ hiểu ngay thôi. Nhớ nhé, Tab rất là quan trọng trong việc viết code Python.

Các bản hiện thực

Python được viết từ những ngôn ngữ khác, tạo ra những bản hiện thực khác nhau. Bản hiện thực Python chính, còn gọi là CPython, được viết bằng C, và được phân phối kèm một thư viện chuẩn lớn được viết hỗn hợp bằng C và Python. CPython có thể chạy trên nhiều nền và khả chuyển trên nhiều nền khác. Dưới đây là các nền trên đó, CPython có thể chạy.

Ngoài CPython, còn có hai hiện thực Python khác: Jython cho môi trường JavaIronPython cho môi trường .NETMono.

Khả năng mở rộng

Python có thể được mở rộng: nếu ta biết sử dụng C, ta có thể dễ dàng viết và tích hợp vào Python nhiều hàm tùy theo nhu cầu. Các hàm này sẽ trở thành hàm xây dựng sẵn (built-in) của Python. Ta cũng có thể mở rộng chức năng của trình thông dịch, hoặc liên kết các chương trình Python với các thư viện chỉ ở dạng nhị phân (như các thư viện đồ họa do nhà sản xuất thiết bị cung cấp). Hơn thế nữa, ta cũng có thể liên kết trình thông dịch của Python với các ứng dụng viết từ C và sử dụng nó như là một mở rộng hoặc một ngôn ngữ dòng lệnh phụ trợ cho ứng dụng đó.

Trình thông dịch

Python là một ngôn ngữ lập trình dạng thông dịch, do đó có ưu điểm tiết kiệm thời gian phát triển ứng dụng vì không cần phải thực hiện biên dịchliên kết. Trình thông dịch có thể được sử dụng để chạy file script, hoặc cũng có thể được sử dụng theo cách tương tác. Ở chế độ tương tác, trình thông dịch Python tương tự shell của các hệ điều hành họ Unix, tại đó, ta có thể nhập vào từng biểu thức rồi gõ Enter, và kết quả thực thi sẽ được hiển thị ngay lập tức. Đặc điểm này rất hữu ích cho người mới học, giúp họ nghiên cứu tính năng của ngôn ngữ; hoặc để các lập trình viên chạy thử mã lệnh trong suốt quá trình phát triển phần mềm. Ngoài ra, cũng có thể tận dụng đặc điểm này để thực hiện các phép tính như với máy tính bỏ túi.

Lệnh và cấu trúc điều khiển

Mỗi câu lệnh trong Python nằm trên một dòng mã nguồn. Ta không cần phải kết thúc câu lệnh bằng bất kì ký tự gì. Cũng như các ngôn ngữ khác, Python cũng có các cấu trúc điều khiển. Chúng bao gồm:

  • Cấu trúc rẽ nhánh: cấu trúc if (có thể sử dụng thêm elif hoặc else), dùng để thực thi có điều kiện một khối mã cụ thể.
  • Cấu trúc lặp, bao gồm:
  • Lệnh while: chạy một khối mã cụ thể cho đến khi điều kiện lặp có giá trị false.
  • Vòng lặp for: lặp qua từng phần tử của một dãy, mỗi phần tử sẽ được đưa vào biến cục bộ để sử dụng với khối mã trong vòng lặp.
  • Python cũng có từ khóa class dùng để khai báo lớp (sử dụng trong lập trình hướng đối tượng) và lệnh def dùng để định nghĩa hàm.

Hệ thống kiểu dữ liệu

Python sử dụng hệ thống kiểu duck typing, còn gọi là latent typing (tự động xác định kiểu). Có nghĩa là, Python không kiểm tra các ràng buộc về kiểu dữ liệu tại thời điểm dịch, mà là tại thời điểm thực thi. Khi thực thi, nếu một thao tác trên một đối tượng bị thất bại, thì có nghĩa là đối tượng đó không sử dụng một kiểu thích hợp.

Python cũng là một ngôn ngữ định kiểu mạnh. Nó cấm mọi thao tác không hợp lệ, ví dụ cộng một con số vào chuỗi ký tự.

Sử dụng Python, ta không cần phải khai báo biến. Biến được xem là đã khai báo nếu nó được gán một giá trị lần đầu tiên. Căn cứ vào mỗi lần gán, Python sẽ tự động xác định kiểu dữ liệu của biến. Python có một số kiểu dữ liệu thông dụng sau:

  • int, long: số nguyên (trong phiên bản 3.x long được nhập vào trong kiểu int). Độ dài của kiểu số nguyên là tùy ý, chỉ bị giới hạn bởi bộ nhớ máy tính.
  • float: số thực
  • complex: số phức, chẳng hạn 5+4j
  • list: dãy trong đó các phần tử của nó có thể được thay đổi, chẳng hạn [8, 2, 'b', -1.5]. Kiểu dãy khác với kiểu mảng (array) thường gặp trong các ngôn ngữ lập trình ở chỗ các phần tử của dãy không nhất thiết có kiểu giống nhau. Ngoài ra phần tử của dãy còn có thể là một dãy khác.
  • tuple: dãy trong đó các phần tử của nó không thể thay đổi.
  • str: chuỗi ký tự. Từng ký tự trong chuỗi không thể thay đổi. Chuỗi ký tự được đặt trong dấu nháy đơn, hoặc nháy kép.
  • dict: từ điển, còn gọi là “hashtable”: là một cặp các dữ liệu được gắn theo kiểu {từ khóa: giá trị}, trong đó các từ khóa trong một từ điển nhất thiết phải khác nhau. Chẳng hạn {1: "Python", 2: "Pascal"}
  • set: một tập không xếp theo thứ tự, ở đó, mỗi phần tử chỉ xuất hiện một lần.

Ngoài ra, Python còn có nhiều kiểu dữ liệu khác. Xem thêm trong phần “Các kiểu dữ liệu” bên dưới.

Module

Python cho phép chia chương trình thành các module để có thể sử dụng lại trong các chương trình khác. Nó cũng cung cấp sẵn một tập hợp các modules chuẩn mà lập trình viên có thể sử dụng lại trong chương trình của họ. Các module này cung cấp nhiều chức năng hữu ích, như các hàm truy xuất tập tin, các lời gọi hệ thống, trợ giúp lập trình mạng (socket),…

Đa năng

Python là một ngôn ngữ lập trình đơn giản nhưng rất hiệu quả.

  • So với Unix shell, Python hỗ trợ các chương trình lớn hơn và cung cấp nhiều cấu trúc hơn.
  • So với C, Python cung cấp nhiều cơ chế kiểm tra lỗi hơn. Nó cũng có sẵn nhiều kiểu dữ liệu cấp cao, ví dụ như các mảng (array) linh hoạt và từ điển (dictionary) mà ta sẽ phải mất nhiều thời gian nếu viết bằng C.

Python là một ngôn ngữ lập trình cấp cao có thể đáp ứng phần lớn yêu cầu của lập trình viên:

Multiple paradigms (đa biến hóa)

Python là một ngôn ngữ đa biến hóa (multiple paradigms). Có nghĩa là, thay vì ép buộc mọi người phải sử dụng duy nhất một phương pháp lập trình, Python lại cho phép sử dụng nhiều phương pháp lập trình khác nhau: hướng đối tượng, có cấu trúc, chức năng, hoặc chỉ hướng đến một khía cạnh. Python kiểu kiểu động và sử dụng bộ thu gom rác để quản lý bộ nhớ. Một đặc điểm quan trọng nữa của Python là giải pháp tên động, kết nối tên biến và tên phương thức lại với nhau trong suốt thực thi của chương trình.

5. Cú pháp

Mặc dù mới làm quen với ngôn ngữ lập trình Python nhưng mình hiểu việc học và tuân thủ cú pháp của một ngôn ngữ là điều tối thượng. Giống như bạn chơi một trò chơi, bạn phải tuân thủ luật của trò chơi đó. Cho nên, dù là Python hay bất kì ngôn ngữ sau này bạn học thì cú pháp “đã viết là phải chuẩn” nhé.

Sau đây là cú pháp cơ bản nhất của ngôn ngữ Python:

Khối lệnh

Khác với đa số ngôn ngữ họ C sử dụng cặp ngoặc ngọn { } để phân chia khối lệnh, Python sử dụng lùi đầu dòng (indentation) như dấu cách hay tab để biểu thị khối lệnh. Các lệnh nằm cùng mức lùi đầu dòng sẽ cùng thuộc một khối. Để biểu thị một khối rỗng Python có từ khoá “pass”.

Toán tử

+ - * / // (phép chia số nguyên) % (chia lấy dư) ** (lũy thừa)
~ (not) & (and) | (or) ^ (xor)
<< (left shift) >> (right shift)
== (bằng) <= >=  != (khác)

Python sử dụng ký pháp trung tố thường gặp trong các ngôn ngữ lập trình khác.

Các kiểu dữ liệu

Kiểu số

1234585396326 (số nguyên dài vô hạn)  -86.12   7.84E-04
2j     3 + 8j

Kiểu chuỗi (string)

Kiểu bộ (tuple)

(1, 2.0, 3)   (1,)    ("Hello",1,())

Kiểu danh sách (list)

[4.8, -6]    ['a','b']

Kiểu từ điển (dictionary)

{"Hanoi":"Vietnam", "Haiphong":"Vietnam", "Hochiminh":"Vietnam", "Amsterdam":"Netherlands", "Paris":"France"}

Chú thích

# dòng chú thích
"" " đa chú thích
    đa chú thích
    đa chú thích " ""

Lệnh gán

tên biến = biểu thức
x = 23.8
y = -x ** 2
z1 = z2 = x + y
loiChao = "Hello!"

i += 1    # tăng biến i thêm 1 đơn vị

In giá trị

print biểu thức
print (7 + 8) / 2.0
print (2 + 3j) * (4 - 6j)

Nội suy chuỗi (string interpolation)

print "Hello %s" %("world!")
print "i = %d" %i
print "a = %.2f and b = %.3f" %(a,b)

Cấu trúc rẽ nhánh

Dạng 1:

if biểu_thức_điều_kiện:
    # lệnh...

Dạng 2:

if biểu_thức_điều_kiện:
    # lệnh...
else:
    # lệnh...

Dạng 3:

if biểu_thức_điều_kiện_1:
    # lệnh... (được thực hiện nếu biểu_thức_điều_kiện_1 là đúng/true)
elif biểu_thức_điều_kiện_2:
    # lệnh... (được thực hiện nếu biểu_thức_điều_kiện_1 là sai/false, nhưng biểu_thức_điều_kiện_2 là đúng/true)
else:
    # lệnh... (được thực hiện nếu tất cả các biểu thức điều kiện đi kèm if và elif đều sai)

Cấu trúc lặp

while biểu_thức_đúng:
    # lệnh...
for phần_tử in dãy:
    # lệnh...
L = ["Ha Noi", "Hai Phong", "TP Ho Chi Minh"]
for thanhPho in L:
    print thanhPho

for i in range(10):
    print i

Hàm

def tên_hàm (tham_biến_1, tham_biến_2, tham_biến_n):
    # lệnh...
    return giá_trị_hàm
def binhPhuong(x):
    return x*x

Hàm với tham số mặc định:

def luyThua(x, n=2):
   """Lũy thừa với số mũ mặc định là 2"""
   return x**n

print luyThua(3)   # 9
print luyThua(2,3) # 8

Lớp

class Tên_Lớp_1:
    #...

class Tên_Lớp_2(Tên_Lớp_1):
    """Lớp 2 kế thừa lớp 1"""
    x = 3  # biến thành viên của lớp
    #
    def phương_thức(self, tham_biến):
        #...

# khởi tạo
a = Tên_Lớp_2()
print a.x
print a.phương_thức(m)  # m là giá trị gán cho tham biến

List Comprehension

List Comprehension là dạng cú pháp đặc biệt (syntactic sugar) (mới có từ Python 2.x) cho phép thao tác trên toàn bộ dãy (list) mà không cần viết rõ vòng lặp. Chẳng hạn y là một dãy mà mỗi phần tử của nó bằng bình phương của từng phần tử trong dãy x:

y = [xi**2 for xi in x]

Xử lý ngoại lệ

try:
    câu_lệnh
except Loại_Lỗi:
    thông báo lỗi

6. Tốc độ thực hiện

Là một ngôn ngữ thông dịch, Python có tốc độ thực hiện chậm hơn nhiều lần so với các ngôn ngữ biên dịch như Fortran, C,… Trong số các ngôn ngữ thông dịch, Python được đánh giá nhanh hơn RubyTcl, nhưng chậm hơn Lua.

7. Các đặc điểm mới trong Python 3.x

Vì mình đang sử dụng phiên bản Python 3.x nên giới thiệu luôn trong bài viết này. Nội dung phần này được trích từ tài liệu của Guido van Rossum. Phần này không liệt kê đầy đủ tất cả các đặc điểm; chi tiết xin xem tài liệu nói trên.

Một số thay đổi cần lưu ý nhất

Lệnh print trở thành hàm print(). Theo đó sau print() ta cần nhớ gõ vào cặp ngoặc ():

print("Goodbye")
print(2+3)

Trả lại kết quả không còn là list trong một số trường hợp:

  • dict.keys(), dict.items(), dict.values() kết quả cho ra các “view” thay vì list.
  • mapfilter trả lại các iterator.
  • range bây giờ có tác dụng như xrange, và không trả lại list.

So sánh:

Không còn hàm cmp, và cmp(a, b) có thể được thay bằng (a > b) - (a < b)

Số nguyên:

  • Kiểu long được đổi tên thành int.
  • 1/2 cho ta kết quả là số thực chứ không phải số nguyên.
  • Không còn hằng số sys.maxint
  • Kiểu bát phân được ký hiệu bằng 0o thay vì 0, chẳng hạn 0o26.

Phân biệt văn bản – dữ liệu nhị phân thay vì Unicode – chuỗi 8-bit

  • Tất cả chuỗi văn bản đều dưới dạng Unicode, nhưng chuỗi Unicode mã hóa lại là dạng dữ liệu nhị phân. Dạng mặc định là UTF-8.
  • Không thể viết u"a string" để biểu diễn chuỗi như trong các phiên bản 2.x

Các thay đổi về cú pháp

Cú pháp mới

  • Các tham biến chỉ chấp nhận keyword: Các tham biến phía sau *args phải được gọi theo dạng keyword.
  • Từ khóa mới nonlocal. Muốn khai báo một biến x với có phạm vi ảnh hưởng rộng hơn, nhưng chưa đến mức toàn cục, ta dùng nonlocal x.
  • Gán giá trị vào các phần tử tuple một cách thông minh, chẳng hạn có thể viết (a, *rest, b) = range(5) để có được a = 0; b = [1,2,3]; c = 4.
  • Dictionary comprehension, chẳng hạn {k: v for k, v in stuff} thay vì dict(stuff).
  • Kiểu nhị phân, chẳng hạn b110001.

Cú pháp được thay đổi

raise [biểu_thức [from biểu_thức]]except lệnh as biến Sử dụng metaclass trong đối tượng:

class C(metaclass=M):
    pass

Cách dùng biến __metaclass__ không còn được hỗ trợ.

Cú pháp bị loại bỏ

  • Không còn dấu ``, thay vì đó, dùng repr.
  • Không còn so sánh <> (dùng !=).
  • Không còn các lớp kiểu classic.

8. Tổng Kết

Phù!!! Như vậy là mình đã tổng kết được một số thứ hay ho trong quá trình bắt đầu học lập trình ngôn ngữ Python của mình. Đầu tiên là việc cài đặt, kế tiếp là chạy thử 1 chương trình đơn giản, sau đó là nghiên cứu các đặc điểm hình thành lên ngôn ngữ này. Và mình nhận thấy cú pháp là một cái cực kì quan trọng trong việc viết code, vì nếu sai cú pháp thì chương trình của mình sẽ không thể dịch chạy được.

Một số điểm mình muốn lưu ý với những bạn đang học từ đầu giống như mình là, có thể mình sẽ không thể hiểu hết nó trong một sớm một chiều nhưng hiển nhiên những gì là cơ bản của một ngôn ngữ lập trình thì mình sẽ cố gắng nắm & hiểu nó rõ ràng nhất có thể. Từ những cái cơ bản mình đã hiểu sau đó mình mới học nâng cao các vấn đề lên được. Hãy đi từ những ví dụ nhỏ, cụ thể để hiểu các tạo biến, hàm, lớp vvv… trong Python như thế nào, sau đó làm và mở rộng nó ra.

Chúc các bạn học vui vẻ!

1 BÌNH LUẬN

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Exit mobile version