Giới thiệu về ngôn ngữ lập trình Python
thôi bỏ qua lí do cá nhân miềng xin nổ một ít về Python
Lịch sử phát triển và vài nét
- Python là một ngôn ngữ lập trình thông dịch do Guido van Rossum tạo ra năm 1990. Hiện tại Guido van Rossum đang làm việc cho Google.
- Python được phát triển trong một dự án mã mở, do tổ chức phi lợi nhuận Python Software Foundation quản lý.
- Trang web chính thức là http://www.python.org
- Python là một ngôn ngữ dễ học, và mạnh mẽ. Nó có những cấu trúc dữ liệu cấp cao hiệu quả và hướng lập trình đối tượng đơn giản. Cú pháp tao nhã và kiểu dữ liệu động của Python, cùng với bản chất thông dịch biến nó thành một ngôn ngữ bậc nhất để viết kịch bản (scripting) và phát triển ứng dụng nhanh trong nhiều lĩnh vực và trên hầu hết mọi hệ thống.
- CPython: là phiên bản chính của Python 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.
- JyThon: là phiên bản viết dành cho java người dùng có thể tương tác được với các class của java và sử dụng được thư viện java khi biên dịch sẽ chuyển qua byte-code của java.
- IronPython: là phiên bản Python mà bạn có thể tương tác với .NET Frameworks của Microsoft.
- PyPy: là một bộ compiler mới với khả năng biên dịch trực tiếp không cần qua bytecode vì vậy nó nhanh hơn CPython và đang được phát triển.
- 2.x phiên bản mới nhất của nó là 2.7 tính tợi thời điểm viết bài
- 3.x phiên bản mới nhất là 3.2
3.x là có cấu trúc một số khác so với 2.x nhưng đa số là giống vì vậy nếu bạn chắc 2.x rồi thì lên 3.x không phải là chuyện to tác gì.
Mình vẫn khuyên học và dùng Python 2.7 vì các lí do sau
- đa số python framework đều base-on 2.x
- 2.x chỉ thua 3.x về khả năng xử lí floating point
- web-framework như django base-on 2.x
3.x ra đời để xử lí vấn đề mà python gặp phải đó là xử lí floating point tốt hơn vì so với java thì python 2.x xử lí kém hơn.
và so với 3.x thì Python nhanh hơn java.
Cấu trúc của 3.x với 2.x chúng ta sẽ tìm hiểu ở các bài viết sau.
Hiện tại Python đang được ứng dụng như sau:
- Google sử dụng Python vào web search system
- YouTube dịch vụ chia sẻ video số 1 thế giới phần lớn viết bằng Python
- Hệ thông Bit-Torrent P2P là 1 Python Program
- Intel, Cisco, HP, IBM … sử dụng Python để dùng vào quá trình hardware-testing
- Pixar hãng phim hoạt hình nổi tiếng sử dụng Python vào việc Production of movie amination
- NASA sử dụng Python vào scientific programming tasks.
và còn nhiều nữa …..
Với Python bạn có thể viết web với tính năng rất mạnh mẽ và hiện tại đã có nhiều Frameworks cho Python như Django, Turbo Gear, CherryPy…
Bạn có thể viết phần mềm, game chạy trên mọi hệ điều hành bằng các thư viện như wxPython, GTK
Bạn cũng thể viết application cho smartphone chạy WindowMobie, Symbian, Adroid….
VÀ nó là một ngôn ngữ hộ trợ lập trình mạng rất mạnh mẽ.
Hướng dẫn học Python
Cài đặt Python và chạy là bước đầu tiên. Nó có thể rất dễ dàng. Nếu bạn đang sử dụng Gentoo GNU/Linux, bạn đã có sẵn Python 2.4 được cài đặt. Hệ thông packaging cho Gentoo, Portage, được viết bằng Python .
Nếu bạn đang chạy Debian GNU/Linux, Ubuntu, Kubuntu và MEPIS, hãy chạy lệnh sau :
Code:
sudo apt-get install python
Nếu bạn đang sử dụng các Linux distro khác, có thể Python là các package được chuẩn bị trước cho nó. Sử dụng tài nguyên và công cụ thông thường bạn sử dụng cho các package khác để tìm Python package
Nếu bạn không làm được tất cả các điều trên, bạn cần phải cài đặt bằng tay. Nó không khó, nhưng cần phải chú ý là dễ làm hỏng hệ thống của bạn trừ khi bạn làm theo hướng dẫn đơn giản này : cài đặt Python vào một vị trí độc lập, ví dụ /opt/python/2.4.3 hay gì đó tuỳ phiên bản Python ...
Để thực hiện cài đặt, download Python , unpack và chạy lênh sau :
Code:
./configure --prefix=/opt/python2.4/ make make install
Cùng bắt đầu
Chúng ta bắt đầu tìm hiểu về phần lập trình, để khởi đầu, ta xây dựng một công cụ blog đơn giản, không có giao diện như Web, nhưng nó là một bài tập tốt.
Python đi kèm với REPL - một phát minh của cộng đồng Lisp. REPL là viết tắt của cụm từ Real Eval Print Loop, và nó có nghĩa là đây là chương trình có thể đọc được các biểu thức và câu lệnh, đánh giá, in kết quả và đợi . Giờ ta chạy REPL ( nhớ điều chỉnh được dẫn của bạn theo vị trí bạn đã cài đặt Python trước đây )
Code:
$ python Python 2.4.3 (#1, Sep 1 2006, 18:35:05) [GCC 4.1.1 (Gentoo 4.1.1)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>>
3 dấu lớn hơn ( >>> ) là dấu nhắc của Python, bạn sẽ viết các câu lệnh và biểu thức vào đây. Để thoát khỏi chương trình, nhấn Ctrl-D
Thử một vài biểu thức đơn giản:
Code:
>>> 5 5
Giá trị của 5, tất nhiên = 5.
Code:
>>> 10 + 4 14
Thú vị hơn không nào?
Có các kiểu biểu thức khác, như là một chuỗi:
>>> "Xin chao"
'Xin chao'
Dấu nháy được sử dụng để tạo chuỗi. Dấu nháy đơn hay kép đều như nhau. Trong thực tế, bạn có thể thấy ta đã sử dụng nháy kép, nhưng Python trả lại là nháy đơn.
Giờ ta thử một danh sách
Code:
>>> [1,3,2] [1, 3, 2]
Dấu ngoặc vuông được sử dụng để tạo các danh sách, mỗi item được phân cách bởi một dấu phẩy. Và như có thể cộng các số, ta có thể cộng ( hay ghép) các danh sách :
Code:
>>> [1,3,2] + [11,3,2] [1, 3, 2, 11, 3, 2]
Giờ, chúng ta chuyển sang một thứ thú vị hơn , blog. Blog là một chuỗi các bài viết, và danh sách Python là một cách tốt để tái hiện một blog, với bài viết và chuỗi. Trong REPL, chúng ta có thể làm một blog đơn giản thế này :
Code:
>>> ["Entry thu nhat", "Python that tuyet"] ['Entry thu nhat', 'Python that tuyet'] >>>
Đó là một danh sách các chuỗi. Bạn có thể tạo một danh sách bất cứ cái gì bạn muốn, bao gồm cả danh sách của danh sách. Hạn chế là tất cả các biểu thức sẽ được đánh giá, trình bày và biến mất. Chúng ta không có cách nào để gọi blog lại và thêm cho chúng các item khác hay xem lại chúng.Do đó, ta thực hiện phép gán :
Code:
>>> blog = ["Entry thu nhat", "Python that tuyet"] >>>
Giờ blog là một biến chứa danh sách. Không giống các ví dụ trước, không có gì được in ra tại thời điểm này, vì nó chỉ là một phép gán. Phép gán là một câu lệnh, và câu lệnh không trả lại giá trị. Đơn giản đánh giá biến cho chúng ta thấy nội dung :
Code:
>>> blog ['Entry thu nhat', 'Python that tuyet']
Truy cập blog của bạn thật dễ dàng. Chúng ta nhận biết mỗi bài viết bằng 1 số :
Code:
>>> blog[0] 'Entry thu nhat' >>> blog[1] 'Python that tuyet'
Chú ý rằng Python bắt đầu đếm từ 0 .
Tóm lược cách hoạt động
Một blog sẽ không phải là một blog nếu bạn không thể thêm bài viết mới, do đó, bạn làm thế này:
Code:
>>> blog = blog + ["Entry moi"] >>> blog ['Entry dau tien', 'Python that tuyet', 'Entry moi']
Ở đây ta thêm cho blog một giá trị mới, là blog cũ , và một entry mới. Chúng ta có thể rút gọn trong một hàm :
Code:
>>> def add_entry(blog, new_entry): ... return blog + [new_entry] ... >>>
def là từ khóa được sử dụng để định nghĩa một hàm hoặc một phương thức mới ( chúng ta sẽ nói nhiều hơn về các hàm trong lập trình có cấu trúc và phương thức trong lập trình hướng đội tượng trong chủ đề này ) , tiếp theo là tên hàm. Trong dấu ngoặc đơn, chúng ta có các tham số chính thức.Sau dấu hai chấm, dấu nhắc đã chuyển từ >>> sang ... để cho thấy ta đang ở trong 1 hàm. Một hàm được bao gồm tất cả các dòng được lùi vào (theo bậc) so với dòng def.
Khi các ngôn ngữ lập trình khác sử dụng các dấu ngoặc hoặc từ khoá begin/end, Python sử dụng sự lùi vào ở đầu dòng. Ý tưởng ở đây là nếu bạn là lập trình viên giỏi, bạn sẽ tự làm việc đó.Đây là một vấn đề gây tranh luận; có thể bạn không thích nó lúc ban đầu, nhưng bạn phải học để làm việc đó
Khi làm việc với REPL, bạn có thể an toàn nhấn Tab để tạo một bậc lùi vào, và cho dù phím Tab có thể làm việc đó, sử dụng 4 lần space là một cách giới thiệu nhiều hơn. Nhiều text editor biết cách đặt 4 lần space khi bạn nhấn Tab khi chỉnh sửa file Python. Nhưng bạn đừng bao giờ kết hợp giữa Tab và space.Trong các ngôn ngữ lập trình khác, nó có thể làm cộng đồng không thích bạn, nhưng trong Python, nó có thể làm chương trình gặp những thông báo lỗi khó hiểu
Để luyện tập, chúng ta cùng tiếp tục làm, nhập header của lớp def add_entry(blog, new_entry):, nhấn Enter, nhấn Tab, nhập return blog + [new_entry] , nhấn Enter, nhấn Enter lần nữa.Chúng ta sẽ thấy :
Code:
>>> blog = add_entry(blog, "Entry thu 4") >>> blog ['Entry dau tien', 'Python that tuyet', 'Entry moi', 'Entry thu 4'] >>>
add_entry sử dụng 2 tham số. Đầu tiên là chính blog, và nó được gán vào blog. Đó là một mánh khoé. Cái blog bên trong hàm không giống với blog bên ngoài hàm. Chúng ở các phạm vi khác nhau. Do đó
Code:
>>> def add_entry(blog, new_entry): ... blog = blog + [new_entry]
không làm việc, blog chỉ được chỉnh sửa bên trong hàm.
Blog của chúng ta lớn dần lên, và trước đây bài viết chỉ là những chuỗi đơn giản, giờ chúng ta muốn nó có cả tiêu đề và thân. Chúng ta có thể làm thế này :
Code:
>>> blog = [] >>> blog = add_entry(blog, ("Blog moi", "Entry dau tien")) >>> blog = add_entry(blog, ("Tuyet ", "Python that tuyet")) >>> blog [('Blog moi', 'Entry dau tien'), ('Tuyet', 'Python that tuyet')] >>>
Ở dòng thứ nhất, ta reset blog thành một danh sách trống. Sau đó, thêm 2 bài viết.
Danh sách các bài viết được tạo ra bởi các dấu ngoặc, và các thành phần được phân cách bởi các dấu phẩy. Nó tương tự với một danh sách, nhưng chúng khác nhau. Nó được gọi là tuple. Bạn có thể cập nhật thành phần của một tuple. Các tuple được sử dụng để xây dựng một vài kiểu cấu trúc với các thành phần cố định. Lấy ví dụ
Code:
>>> (1,2,3) (1, 2, 3)
Truy cập từng phần của bài viết cũng tương tự truy cập từng phần của blog
>>> blog[0][0]
'Blog moi'
>>> blog[0][1]
'Entry dau tien'
Đây có thể là một giải pháp tốt nếu bạn muốn lưu giữ chỉ tiêu đề và nội dung bài viết. Nhưng , khi ta muốn thêm vào ngày và thời gian, trích dẫn, tag hay tin nhắn ? Bạn có thể bắt đầu nghĩ bạn cần treo một tờ giấy lên tường, để nhớ mục lục của từng trường, như thế này :
Thật không dễ chịu chút nào . Để giải quyết vấn đề này. Python đưa đến cho chúng ta lập trình hướng đối tượng ..
(St)