1. Trang chủ
  2. » Luận Văn - Báo Cáo

NGHIÊN CỨU NGÔN NGỮ LẬP TRÌNH PYTHON VÀ ỨNG DỤNG PHÂN TÍCH MỘT SỐ CÚ PHÁP ĐƠN GIẢN

61 4,8K 62

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 61
Dung lượng 841 KB

Nội dung

Một tập hợp các chỉ thị được biểu thị nhờ ngôn ngữ lập trình để thực hiện cácthao tác máy tính nào đó thông qua một chương trình.. Người ta còn phân việc biên dịch làm hai loại tùy theo

Trang 1

NGHIÊN CỨU NGÔN NGỮ LẬP TRÌNH PYTHON VÀ ỨNG DỤNG PHÂN TÍCH MỘT

SỐ CÚ PHÁP ĐƠN GIẢN

Trang 2

GIỚI THIỆU



Sự ra đời và lịch sử phát triển của công nghệ thông tin luôn gắn liền với khái niệm về lậptrình và ngôn ngữ lập trình Các ngôn ngữ lập trình phát triển theo thời gian từ các ngônngữ thô sơ cấp thấp như ngôn ngữ máy, assembly cho tới các ngôn ngữ cấp cao hiện naynhư NET, Java, Python…

Các ngôn ngữ lập trình là những công cụ giúp lập trình viên thực hiện những công việctheo ý muốn bằng cách ra lệnh cho máy tính thực hiện Để người lập trình hiểu rõ hơn vànhờ đó nâng cao khả năng làm việc và giảng dạy, chúng ta cần phải tìm hiểu các nguyên

lý cơ bản của ngôn ngữ lập trình, từ đó có thể dễ dạng tiếp cận một ngôn ngữ mới và biếtđược các điểm mạnh yếu của nó khi sử dụng cho các ứng dụng thực tế

Được sự giảng dạy và hướng dẫn của thầy TS Nguyễn Tuấn Đăng trong môn “Nguyên

Lý và Phương Pháp Lập Trình”, em đã có thể hiểu rõ được các khái niệm cơ bản này.

Từ đó em đã thử tìm hiểu về một ngôn ngữ mới mà hiện tại google đang sử dụng làm mộttrong các ngôn ngữ để phát triển ứng dụng trên nền cloud computing Đó là ngôn ngữ

python trong đề tài “NGHIÊN CỨU NGÔN NGỮ LẬP TRÌNH PYTHON VÀ ỨNG DỤNG PHÂN TÍCH MỘT SỐ CÚ PHÁP ĐƠN GIẢN”.

Em rất chân thành cám ơn thầy, TS Nguyễn Tuấn Đăng đã định hướng và hướng dẫn

em trong suốt môn học và đặc biệt là nhận xét để giới hạn lại nội dung của đề tài này

TP HCM, Ngày 22 tháng 02 năm 2012

Đỗ Văn Cang

Trang 3

GIỚI THIỆU 2

1 NGÔN NGỮ LẬP TRÌNH 5

1.1 Định nghĩa 5

1.2 Trình biên dịch và thông dịch 6

1.3 Phân tích cú pháp của chương trình 8

(1.3.1 Phân tích từ vựng 8

(1.3.2 Phân tích cú pháp 9

(1.3.3 Phân tích ngữ nghĩa 10

1.4 Cấu trúc chung của một ngôn ngữ lập trình 11

1.5 Ngôn ngữ scripting 13

(1.5.1 Khái niệm ngôn ngữ script 13

(1.5.2 Ưu và khuyết điểm 14

2 NGÔN NGỮ PYTHON 15

2.1 Các đặc điểm tiêu biểu của Python 15

(2.1.1 Giá trị và kiểu 15

(2.1.2 Biến, sự lưu trữ và điều khiển 16

(2.1.3 Liên kết và tầm vực 17

(2.1.4 Thủ tục trừu tượng 18

(2.1.5 Dữ liệu trừu tượng 18

(2.1.6 Trình biên dịch độc lập 18

(2.1.7 Thư viện module 19

2.2 Các kiểu dữ liệu cơ bản 19

(2.2.1 Biến số (numerics) 19

(2.2.2 Biến chuỗi (Strings) 20

(2.2.3 Chuỗi Unicode 21

(2.2.4 Lists (Danh sách) 21

2.3 Các cấu trúc điều khiển 22

(2.3.1 Lệnh if 22

(2.3.2 Lệnh for 22

(2.3.3 Hàm range() 23

(2.3.4 Lệnh break, continue và else trong vòng lặp 23

(2.3.5 Lệnh pass 24

(2.3.6 Định nghĩa hàm 24

2.4 Cấu trúc dữ liệu 27

(2.4.1 Lists ( danh sách) 27

(2.4.2 Lệnh del 29

(2.4.3 Tuples và Sequences 29

(2.4.4 Sets (tập hợp) 30

(2.4.5 Dictionaries (bảng tra) 30

(2.4.6 Các kỹ thuật lặp 31

(2.4.7 Tìm hiểu thêm về điều kiện 32

(2.4.8 So sánh danh sách 32

2.5 Modules 33

(2.5.1 Thực thi module như script 34

(2.5.2 Truy xuất và biên dịch modules 34

(2.5.3 Packages 35

2.6 Lớp 35

(2.6.1 Định nghĩa lớp 35

(2.6.2 Một số nhận xét 37

Trang 4

(2.6.3 Kế thừa 38

(2.6.4 Biến private 40

(2.6.5 Cấu trúc trong python 40

(2.6.6 Lớp Exception 41

(2.6.7 Lớp duyệt ( Iterators) 41

(2.6.8 Generators 42

(2.6.9 Generator Expressions 43

2.7 Giới thiệu sơ về một số thư viện chuẩn 43

(2.7.1 Giao tiếp với hệ thống 43

(2.7.2 Ký tự thay thế tập tin 44

(2.7.3 Thông số dòng lệnh 44

(2.7.4 Khớp chuỗi mẫu 44

(2.7.5 Toán học 45

(2.7.6 Tuy cập internet 45

(2.7.7 Ngày và giờ 45

(2.7.8 Nén dữ liệu 46

(2.7.9 Đo hiệu suất 46

(2.7.10 Điều khiển chất lượng 47

(2.7.11 Đa luồng - Multi-threading 47

(2.7.12 Tham chiếu yếu - Weak References 48

(2.7.13 Làm việc với bản ghi dữ liệu nhị phân 49

3 ỨNG DỤNG PHÂN TÍCH MỘT SỐ CÚ PHÁP ĐƠN GIẢN 50

3.1 Phân tích các phép tính cơ bản 50

3.2 Phân tích cú pháp có chọn lọc : ví dụ phân tích file cấu hình DNS 53

3.3 Phân tích và thu thập các địa chỉ trên một trang web 55

3.4 Phân tích câu lệnh SELECT SQL 57

4 KẾT LUẬN 61

Tài liệu tham khảo 61

Trang 5

1 NGÔN NGỮ LẬP TRÌNH

1.1 Định nghĩa

Ngôn ngữ lập trình là một hệ thống được ký hiệu hóa để miêu tả những tính toán(qua máy tính) trong một dạng mà cả con người và máy đều có thể đọc và hiểuđược

Theo định nghĩa ở trên thì một ngôn ngữ lập trình phải thỏa mãn được hai điềukiện cơ bản là:

- Nó phải dễ hiểu và dễ sử dụng đối với người lập trình, để con người cóthể dùng nó giải quyết các bài toán khác

- Nó phải miêu tả một cách đầy đủ và rõ ràng các tiến trình (process), để cóthể chạy được trên các máy tính khác

Một tập hợp các chỉ thị được biểu thị nhờ ngôn ngữ lập trình để thực hiện cácthao tác máy tính nào đó thông qua một chương trình Các tên khác của kháiniệm này nếu không bị lầm lẫn là chương trình máy tính hay chương trình điệntoán

Chữ lập trình dùng để chỉ thao tác của con người nhằm kiến tạo nên các

chương trình máy tính thông qua các ngôn ngữ lập trình Người ta còn gọi quá

trình lập trình đó là quá trình mã hoá thông tin tự nhiên thành ngôn ngữ máy.

Trong các trường hợp xác định thì chữ lập trình còn được viết là "viết mã" (chochương trình máy tính)

Như vậy, theo định nghĩa, mỗi ngôn ngữ lập trình cũng chính là một chươngtrình, nhưng có thể được dùng để tạo nên các chương trình khác Một chươngtrình máy tính được viết bằng một ngôn ngữ lập trình thì những chỉ thị (của riêng

ngôn ngữ ấy) góp phần tạo nên chương trình được gọi là mã nguồn của

chương trình ấy

Thao tác chuyển dạng từ mã nguồn sang thành chuỗi các chỉ thị máy tính đượcthực hiện hoàn toàn tương tự như là việc chuyển dịch giữa các ngôn ngữ tự

nhiên của con người Các thao tác này gọi là biên dịch (hay ngắn gọn hơn là

dịch) Người ta còn phân việc biên dịch làm hai loại tùy theo quá trình dịch xảy

ra trước quá trình thực thi các tính toán hay nó xảy ra cùng lúc với quá trình tínhtoán:

- Một phần mềm thông dịch là một phần mềm có khả năng đọc, chuyển

dịch mã nguồn của một ngôn ngữ và ra lệnh cho máy tính tiến hành cáctính toán dựa theo cú pháp của ngôn ngữ

- Một phần mềm biên dịch hay ngắn gọn hơn trình dịch là phần mềm có

khả năng chuyển dịch mã nguồn của một ngôn ngữ ban đầu sang dạng

mã mới thuộc về ngôn ngữ cấp thấp hơn

Ngôn ngữ cấp thấp nhất là một chuỗi các chỉ thị máy tính mà có thể được thựchiện trực tiếp bởi chính máy tính (thông qua các theo tác trên vùng nhớ) Trướcđây, hầu hết các trình dịch cũ thường phải thông dịch từ mã nguồn sang bộ mãphụ (các tệp có dang *.obj), rồi sau đó, mới biên dịch tiếp sang các tập tin thihành Ngày nay, hầu hết các trình dịch đều có khả năng viên dịch mã nguồn trực

Trang 6

tiếp sang thành các tập tin thi hành hay biên dịch sang các dạng mã khác thấphơn tuỳ theo yêu cầu của người lập trình.

Điểm khác nhau giữa thông dịch và biên dịch là: Trình thông dịch sẽ dịch từng

câu lệnh một và chương trình đích sẽ không được lưu lại Còn trình biên dịch sẽdịch toàn bộ chương trình, cho ra chương trình đích được lưu lại trong máy tínhrồi mới thực hiện chương trình

Một chương trình máy tính có thể được thực thi bằng cách tổ hợp của việc biêndịch và thông dịch

1.2 Trình biên dịch và thông dịch

Chúng ta hãy tìm hiểu một số khái niệm về việc thực thi các chương trìnhđược viết bằng ngôn ngữ cấp cao Như chúng ta đã thấy, ngôn ngữ mà máy tính

có thể hiểu được gọi là ngôn ngữ máy Những ngôn ngữ này chứa tập các toán

tử cơ bản được thực thi và cài đặt bên trong phần cứng của bộ xử lý Chúng tacũng đã nhìn thấy ngôn ngữ lập trình cấp cao cung cấp một mức độ trừ tượngđộc lập với máy cao hơn ngôn ngữ máy, vì vậy nó thích nghi hơn với tương tácgiữa người và máy Nhưng điều này cũng chắc rằng có một sự truyển đổi ngầmđịnh giữa ngôn ngữ lập trình cấp cao và ngôn ngữ máy

Có hai kiểu chuyển đổi:

Trình thông dịch:

Là một chương trình cài đặt hoặc giả lặp máy ảo sử dụng tập lệnh cơ bản củangôn ngữ lập trình như là ngôn ngữ máy của nó Có thể hình dung, một trìnhthông dịch như một chương trình cài đặt thư viện có chứa việc thực hiện cáclệnh cơ bản của ngôn ngữ lập trình sang ngôn ngữ máy

Một trình thông dịch đọc những câu lệnh, phân tích và thực hiện chúng trên máy

ảo bằng cách gọi các lệnh tương ứng của thư viện

Trình biên dịch:

Là một chương trình chuyển đổi mã của ngôn ngư lập trình sang mã máy, cũngđược gọi là mã đối tượng Mã đối tượng có thể được thực hiện trực tiếp trênmáy mà nó biên dịch

Hình bên dưới so sánh cách sử dụng của trình thông dịch và biên dịch

Trang 7

Hình 1.1 so sánh trình thông dịch và trình biên dịch

Vì vậy trình biên dịch phân định rõ ràng giữa việc chuyển đổi và việc thực thi mộtchương trình, nó ngược lại với trình thông dịch là chỉ chuyển đổi một lần duynhất

Mã đối tượng phụ thuộc vào máy có nghĩa là chương trình chỉ có thể chạy trênmáy mà nó biên dịch, trong khi đó chương trình thông dịch thì không phụ thuộcvào máy việc phụ thuộc vào máy là do bản thân trình thông dịch

Hình dưới minh họa một khái niệm khác của việc thực thi chương trình kết hợpđiểm mạnh của trình thông dịch và trình biên dịch với nhau Ví dụ, khái niệm nàyđược sử dụng bởi ngôn ngữ lập trình Java và rõ ràng hơn là Python

Hình 1.2 Việc thực thi byte code đã được biên dịch

Trong trường hợp này, mã nguồn được chuyển đổi bởi một trình biên dịch sangmột dạng mã đối tượng, còn được gọi là byte code sau đó được thực thi bởi mộttrình thông dịch chạy một máy ảo bằng cách sử dụng byte code này Việc thực

Trang 8

thi các byte code nhanh hơn so với thông dịch mã nguồn, vì phần lớn của cácphân tích và xác minh của các mã nguồn được thực hiện trong bước biên dịch.Tuy nhiên, byte code vẫn độc lập với máy vì phần phụ thuộc vào máy nằm bêntrong máy ảo.

1.3 Phân tích cú pháp của chương trình

Mỗi ngôn ngữ lập trình khác nhau sẽ có những nguyên tắc về cú pháp khácnhau Tuy nhiên, dù bằng ngôn ngữ nào đi nữa thì cũng cần phải có một chươngtrình làm nhiệm vụ dịch ngôn ngữ này ra ngôn ngữ máy Chương trình này gọichung là chương trình dịch (biên dịch hoặc thông dịch) Như vậy việc thực hiệndịch này xảy ra như thế nào ?

Quá trình này có thể được phát thảo sơ lượt như sau:

Chúng ta sẽ phân tích về 3 bước chính quá trình trên gồm: phân tích từ vựng, cúpháp và ngữ nghĩa Riêng phần phát sinh mã trung gian ( vd như IL trong.NET ) , mã đích và tối ưu không đề cập trong phần này

Các công việc mà trình dịch thực hiện phân tích từ vựng:

- Đọc luồng kí tự của chương trình nguồn

- Nhóm các kí tự thành các câu (vị từ, mệnh đề) có nghĩa

Trang 9

o Tạo token tương ứng và gửi cho bộ phận phân tích cú pháp

 Token là một chuỗi gồm một hay nhiều kí tự

 Token là nguyên tố : không thể phân tách nhỏ hơn

 Ví dụ : định danh (count), từ khóa (if), toán tử (==), hằng số (123.4), vv…

o Lưu thông tin vào bảng định danh

- Loại trừ các khoảng trắng ( tab,blank,comment,….)

- Kiểm tra lỗi từ vựng

Ví dụ lệnh gán sau đây:

totalminutes= minute + hour*60

Sẽ được tách thành các token sau đây

Hoặc có thể là một trong các biến a,b hay c

Để xác định cú pháp của một ngôn ngữ, người ta dung văn phạm phi ngữ cảnhCFG( Context Free Grammar) hay còn gọi là văn phạm BNF (Brackers NaurForm)

Gọi văn phạm phi ngữ cảnh với G = (S,N,T,P), với:

- N : tập các kí hiệu không kết thúc

- S : Ký hiệu bắt đầu của văn phạm, là N nhưng sử dụng làm gốc của cây

Trang 10

- T : tập các kí hiệu kết thúc.

- P : tập các luật sinh có dạng A  B với A thuộc N và B thuộc N hoặc T

Ví dụ:

1 <assign>  id = <expr>

2 <expr>  <expr> + <term> | <term>

3 <term>  <term> * <fact> | <fact>

4 <fact>  id | num

Sử dụng cây cú pháp trừu tượng và bảng định danh để kiểm tra “ngữ nghĩa”

- Biến sử dụng đã được khao báo hay chưa ?

Tập hợp các thông tin, lưu trữ lên cây cú pháp và/hoặc bảng định danh

Tiến hành kiểm tra kiểu (type checking):

- Toán tử có phù hợp với toán hạng

- Chỉ số mảng phải là kiểu số nguyên ?

- Kiểu của toán hạng bên trái và bên phải có cùng kiểu ?

- …

Thực hiện chuyển kiểu (coercion)

Trang 11

1.4 Cấu trúc chung của một ngôn ngữ lập trình

Dưới đây là liệt kê một số khái niệm bên trong một ngôn ngữ lập trình nhằm

mục đích tìm hiểu chúng trong ngôn ngữ cụ thể python ở phần sau:

 Giá trị và kiểu

 Kiểu nguyên thủy

 Kiểu cấu trúc và kiểu đệ quy

Trang 12

 Liên kết và môi trường : liến kết định danh và giá trị.

 Tầm vực :Tầm vực của khai báo là phạm vi mà khai báo đó có tác dụng

Trong các ngôn ngữ hiện đại tầm vực phụ thuộc vào cấu trúc ngữ nghĩa

của chương trình, đặc biệt là trong khối mã

 Khai báo không thứ tự

 Khai báo tuần tự

 Khai báo đệ quy

 Cơ thế tham chiếu

 Dữ liệu trừu tượng

 Program units, packages, and encapsulation

 Unit : một thành phần độc lập trong chương trình

 Đơn kế thừa và đa kế thừa

 Giao diện – interface

 Trừu tượng hóa tổng quát

 Đơn vị xử lý tổng quát

 Tham số lớp và kiểu

Trang 13

 Kiểu hệ thống

 Luồng điều khiển

 Điều khiển tuần tự

Ngôn ngữ lập trình script là một ngôn ngữ lập trình cấp cao được thông dịch bởimột chương trình khác ( trình thông dịch) lúc thực thi hơn là lúc biên dịch bởi bộ

xử lý của máy tính như những ngôn ngữ lập trình khác( như C và C++)

Trong hầu hết các trường hợp, việc viết mã trong một ngôn ngữ script thì dễdàng hơn là viết mã của ngôn ngữ biên dịch Tuy nhiên, ngôn ngữ script chậmhơn bởi vì các lệnh cơ bản không được xử lý hoàn toàn bởi các câu lệnh của bộ

xử lý Ngôn ngữ kịch bản cho phép phát triển nhanh chóng và có thể giao tiếp dễdàng với các chương trình được viết bằng ngôn ngữ khác

Ngôn ngữ kịch bản có thể được sử dụng để tạo giao diện đặc thù

Scripting là một mô hình đặc trưng bởi:

• Sử dụng các kịch bản để kết nối các hệ thống với nhau;

• Phát triển ứng dụng một cách nhanh chóng;

• Yêu cầu tính hiệu quả không cao;

• Chức năng rất cao cấp trong các lĩnh vực ứng dụng cụ thể

Một hệ thống phần mềm thường gồm một tập các hệ thống con được điều khiển

hoặc kết nối bằng scripting Trong trường hợp đó kịch bản được gọi là gắn các

hệ thống con lại với nhau

Scripting tương tự với lập trình mệnh lệnh trong nhiều khía cạnh Vì vậy tất cả

các ngôn ngữ scripting đều có hỗ trợ các biến, lệnh, và thủ tục, đó là các khái

niệm chính về lập trình điều khiển

Ngôn ngữ scripting rất đa dạng vì vậy mà rất khó để xác định những khái niệm

mà chúng chia sẽ với nhau, nhưng không chia sẽ với ngôn ngữ lập trình điều

khiển

Tuy nhiên, các khái niệm sau đây là đặc trưng của ngôn ngữ scripting:

• Xử lý chuỗi rất ở mức độ cao;

Trang 14

• Hỗ trợ đồ họa ở mức độ cao;

• Kiểu động

Tất cả các ngôn ngữ scripting cung cấp hỗ trợ rất cao cấp về xử lý chuỗi Bằngchứng là có mặt khắp nơi của các dữ liệu văn bản, chẳng hạn như e-mail, truy

vấn cơ sở dữ liệu và kết quả, các tài liệu XML, và các văn bản HTML Việc phát

sinh ra văn bản thì khá dễ dàng, ngay cả với chuỗi thao tác đơn giản, nhưngphân tích cú pháp của văn bản (tức là khám phá cấu trúc bên trong của nó) thìkhá rắc rối

Ưu điểm:

Dễ học và sử dụng

Yêu cầu kiến thức và kinh nghiệm về lập trình ít nhất

Cho phép các công việc phức tạp được thực hiện chỉ với một vài bước

Cho phép tạo và chỉnh sửa nhiều kiểu biên soạn dữ liệu văn bản

Cho phép bổ sung động và tương tác các hành động vào trang web

Chỉnh sửa và chạy code nhanh chóng

Khuyết điểm:

Tốc độ thực thi chậm hơn so với các ngôn ngữ biên dịch

Độ bảo mật mà nguồn thấp (nhất là trong trường hợp sử dụng như các ngôn

ngữ javascript, vbscript trên web)

Trang 15

2 NGÔN NGỮ PYTHON

Python được thiết kế vào đầu những năm 1990 bởi Guido van Rossum.Nó đã

được sử dụng cài đặt trang web tìm kiếm GOOGLE thành công, và trong một

loạt các lĩnh vực ứng dụng khác nhau, từ khoa học viễn tưởng (hiệu ứng hìnhảnh cho chuỗi the Star Wars) đối với khoa học thực tế (máy tính hỗ trợ thiết kếtrong NASA)

Python vay mượn ý tưởng từ các ngôn ngữ như như PERL, Haskell, và cácngôn ngữ hướng đối tượng, khéo léo tích hợp những ý tưởng này thành một bộ

mạch lạc Script Python ngắn gọn nhưng có thể đọc được, và rất biểu cảm.Python một ngôn ngữ nhỏ gọn, dựa trên thư viện của mình để cung cấp hầu hết

chức năng rất cao cấp như so khớp chuỗi (không giống như các ngôn ngữ kịchbản cũ hơn như PERL, mà các tính năng này được tích hợp bện trong – build-

in) Python có kiểu tự động, do đó các script chứa rất ít hoặc không có thông tin

Trình thông dịch Python có thể dễ dàng mở rộng với các chức năng và kiểu dự

liệu mới được cài đặt trong C hoặc C++ ( hoặc các ngôn ngữ gọi từ C) Python

cũng thích hợp như một ngôn ngữ mở rộng cho các ứng dụng tùy biến

Python có thể được chạy ở chế độ thông dịch và chế độ thông dịch tương tác

Chúng ta sẽ tìm hiểu các đoạn code nhỏ qua chế độ tương tác sử dụng IDLE

(Python GUI)

2.1 Các đặc điểm tiêu biểu của Python

Python là một ngôn ngữ scripting, với cơ chế dịch hyrid pha trộn giữa biên dịch

và thông dịch đã được đề cập trong phần đầu

Sử dụng comment với kí tự # trên một dòng

Sử dụng các khoảng trắng hay thụt vô ( thụt ra ) để phân biệt tầm vực code

(scope)

Dưới đây là các đặc điểm về khái niệm của python khác biệt so với các ngôn

ngữ lập trình khác

(2.1.1 Giá trị và kiểu

Kiểu nguyên thủy

Python có một danh mục giới hạn các kiểu dữ liệu nguyên thủy: số nguyên, số

thực sự, và số phức Nó không chứa kiểu kí tự mà thay vào đó là kiểu chuỗi một

kí tự

Giá trị boolean của nó (False và True) chỉ là số nguyên small Tuy nhiên, bất cứ

giá trị nào có thể được kiểm tra: zero, bộ rỗng, chuỗi rỗng, danh sách rỗng sẽ

Trang 16

được xem như là False, các giá trị còn lại là True.

Kiểu cấu trúc và kiểu đệ quy

Python có một danh mục các loại kiểu phức tạp như: bộ (tuples), chuỗi(strings), danh sách(list),bảng tra(dictionary), và các đối tượng(objects)

- Danh sách trong python là một chuỗi gồm các giá trị không đồngnhất(kiểu khác nhau)

- Một bảng tra là một bảng map không đồng nhất từ khóa (key) đến cácgiá trị(value), trong đó khóa không thể thay đổi giá trị

- Thành phần của bộ, chuỗi, danh sách, và bảng tra có thể được duyệt, vàcác thành phần của danh sách và từ điển có thể được cập nhật Ngoài ra,

các thành phần danh sách và từ điển có thể được chèn và xóa

Python có kiểu động Giá trị của bất kỳ biến, tham số, hoặc các thành phần có

thể là bất cứ kiểu dữ liệu nào Tất cả các toán tử thực hiện được kiểm tra lúc

chạy runtime

Kiểu cấu trúc

Kiểu cấu trúc là kiểu tương tự như struct trong C hoặc record trong pascal Trong

python kiểu cấu trúc được sử dụng như một lớp với khai báo rỗng Các thành

phần được sử dụng lúc khởi tạo giá trị cho các thành phần của cấu trúc

Biểu thức

Danh mục các biểu thức bao gồm các cuộc gọi thủ tục, hàm khởi tạo (đối với

bộ, danh sách, từ điển, các đối tượng, và thủ tục), và biểu thức tương tác (danh

sách

comprehensions) Đáng ngạc nhiên hơn, nó không có biểu thức điều kiện

Đoạn mã dưới đây minh họa hàm khởi tạo cho bộ:

date = 1998, "Nov", 19

sau khi khởi tạo giá trị date[0] là 1998, date[1] là “Nov”, và date[2] là 19

Đoạn mã dưới đây minh họa tạo 2 list, một list có giá trị cùng kiểu dữ liệu và 1

list không đồng nhất giá trị

primes = [2, 3, 5, 7, 11]

years = ["unknown", 1314, 1707, date[0]]

primes[0] = 2, years[1] = 1314, years[3] = 1998

thêm lệnh years[0] = 843 để cập nhật thành phần đầu tiên của years(“unknown”),

và tương tự years.append(1999( để bổ sung 1999 vào cuối years ( sau 1998)

(2.1.2 Biến, sự lưu trữ và điều khiển

Python hỗ trợ các kiểu biến local và global Các biến không cần khai báo tường

minh, nó đơn giản được khai báo và khởi tạo cùng lúc trong lần gán đầu tiên

Trang 17

Thậm chí sau khi khởi tạo, nó có thể được nó có thể được gán bất cứ giá trị nào

của kiểu dữ liệu nào Đó cũng là đặc điểm của kiểu dữ liệu động

Python sử dụng ngữ nghĩa tham chiếu Điều này đặc biệt quan trọng đối với

thay đổi giá trị, mà có thể được cập nhật có chọn lọc

 Giá trị nguyên thủy và chuỗi không thể thay đổi

 Lists, dictionaries, và đối tượng có thể thay đổi được

 Tuples có thể thay đổi nếu có của các thành phần của chúng thay đổi

Trong thực tế ngữ nghĩa tham chiếu hoàn toàn tương tự như sao chép đối với

các giá trị không thể thay đổi Vì vậy các thao tác tên số và chuỗi vẫn hoạt động

như chúng ta mong đợi

Về phần lệnh, python bao gồm hầu như đầy đủ và rất mạnh các lệnh gán, gọi thủtục, điều kiện, tương tác và ngoại lệ

Python cũng chứa các lệnh điều khiển như lệnh gán, các lời gọi thủ tục, điều

kiện ( if) , tương tác ( while, for), và lệnh bắt lỗi

Lệnh gán tương tự như C, bao gồm kiểu gán như “V ⊗=E” (viết tắt của ‘‘ V = V

⊗ E ’’) trong đó ⊗ là toán tử thực hiện Tuy nhiên Python khác với C là không

cho sử dụng lệnh gán như một biểu thức

Sẽ hoán vị giá trị vủa 2 biến m và n

Python cũng hỗ break, continue, và lệnh return trong hàm Nó cũng hỗ trợ cớ

chế bắt lỗi, đó là đối tượng của lớp con của Exception, và có thể mang giá trị

(2.1.3 Liên kết và tầm vực

Tất cả các biến (định danh) được liên kết và khởi tạo trong lệnh gán đầu tiên khi

thực thi Các biến này sẽ bị hủy khi thoát khỏi tầm vực của khối mã hiện hành

Các khối mã (code block) được thể hiện trong mã bằng cách sử dụng cáckhoảng trắng hay thụt vào (thụt ra)

Một chương trình Python bao gồm một số modules, có thể được nhóm lại thành

packages Bên trong một module chúng ta có thể khởi tạo biến, định nghĩa thủ

tục và khai báo lớp Bên trong thủ tục, chúng ta có thể khởi tạo các biến nội bộ

và định nghĩa các thủ tục nội bộ Bên trong một lớp chúng ta có thể khởi tạo biến

thành phần, và định nghĩa các thủ tục (phương thức bên trong lớp)

Suốt một phiên làm việc của Python, chúng ta có thể tương tác khai báo, tạolệnh và biểu thức từ bàn phím Tất cả các hành động này sẽ tác dụng ngay lập

tức

Trang 18

Bất cứ khi nào chúng ta đưa ra một biểu thức, giá trị của nó được hiển thị trên

màn hình Chúng ta có thể sử dụng module theo tên(hoặc các thành phần của

module) bất cứ lúc nào

(2.1.4 Thủ tục trừu tượng

Python hỗ trợ cả hàm và thủ tục, chỉ có một sự khác nhau là hàm trả về giá trị

còn thủ tục trả về nothing

Python có kiểu dữ liệu động,do đó định nghĩa thủ tục và các tham số chỉ là định

nghĩa tên chứ không định nghĩa kiểu dữ liệu Các tham số có kiểu dữ liệu khác

nhau tùy thuộc vào lúc gọi thủ tục

Python cũng hỗ trợ cơ chế tham chiếu đối số Vì vậy, một đối số thay đổi có thể

được cập nhật có chọn lọc

(2.1.5 Dữ liệu trừu tượng

Python có ba cấu trúc khác nhau liên quan đến dữ liệu trừu tượng: packages,

module, và lớp Module và lớp hỗ trợ tính đóng gói, sử dụng quy ước đặt tên

quy ước để phân biệt giữa các thành phần public và private

Package chỉ đơn giản là một nhóm các module Một module là một nhóm của

các thành phần có thể là biến, thủ tục, và lớp Các thành phần này (hoặc 1 tập

con chỉ định của chúng) có thể được import để sử dụng bởi bất kỳ module nào

khác Tất cả các thành phần của một module là public, trừ những thành phần có

định danh bắt đầu với "_" là private

Một lớp là một nhóm của các thành phần có thể là các biến lớp, phương thức

lớp,

và phương thức thể hiện Một thủ tục được định nghĩa trong lớp là một phương

thể hiện với tham số đầu tiên của nó được đặt tên là self để trỏ đến một đối

tượng của lớp đang khai báo Nếu không, thủ tục hoạt động như một phương

thức lớp

Để tạo phương thức khởi dựng cho lớp chúng ta thường khai báo phương thức

có tên " init ", phương thức này được tự động gọi khi một đối tượng của lớp

học được tạo ra Tất cả các thành phần của một lớp học mặc định đều là public,

ngoại trừ định danh bắt đầu với " ", đó là private

Python hỡ trợ lập trình hướng đối tượng nhưng ở mức chưa hoàn hảo

Python cũng hỗ trợ đa kế thừa

(2.1.6 Trình biên dịch độc lập

Các module được biên dịch độc lập Mỗi module phải import tường minh tất cả

Mã nguồn của mỗi module được chứa trong 1 file text Ví dụ ,một module có tên

là widget được chứa trong một file có tên là widget.py Khi module được import

lần đầu tiên nó sẽ được biên dịch và mã đối tượng của nó được chứa trong một

file tên là widget.pyc Lần import sau đó nó sẽ không cần phải biên dịch mà lấy

trực tiếp từ file đã được biên dịch kia Nó chỉ biên dịch lại khi mã nguồn có sự

Trang 19

Trình biên dịch python không kiểm tra định danh chưa được khai báo, và cũngkhông kiểm tra kiễu dữ liệu : bởi vì nó là ngôn ngữ có kiểu động.

(2.1.7 Thư viện module

Python được trang bị với một hệ thống thư viện module rất phong phú, hỗ trợ xử

lý chuỗi, đánh dấu, toán học, mã hóa, đa phương tiện, giao diện đồ họa , dịch vụ

hệ điều hành, dịch vụ Internet, trình biên dịch, và nhiều hơn nữa.Không giống như các ngôn ngữ kịch bản trước đây, Python không có xây dựngsẳn các xử lý chuỗi cấp cao hoặc hỗ trợ giao diện đồ họa Thay vào đó, các thư

viện module sẽ cung cấp Chẳng hạn chức năng Ví dụ, các module thư viện re

cung cấp xử lý chuỗi mạnh mẽ bằng cách sử sụng regular expressions.

phù hợp với các cơ sở sử dụng các biểu thức thông thường

2.2 Các kiểu dữ liệu cơ bản

Các toán tử toán học trong python hoàn toàn tương tự như các ngôn ngư lập

trình cơ bản khác ( Pascal C ) như +,-,* và / trong đó dấu ( ) sử dụng để nhóm

Phần ảo được thể hiện với hậu tố j hoặc J, với dạng như sau (real + imagj) hoặc

có thể được tạo với hàm complex(real,imag)

Trang 20

>>> ( + j) / 1 1 j)

(1.5+0.5j)

ở mode tương tác, giá trị kết xuất cuối cùng được gán vào biến

Chuỗi được bao quoanh bởi các dấu nháy đơn ‘ hoặc nháy kép “” như trong các

>>> '"Isn\'t," she said.'

'"Isn\'t," she said.'

Khi thể hiện chuỗi dài trong code muốn xuống dòng thì sử dụng kí tự gạnh chéo

ngược \

hello = "This is a rather long string containing\n\

Note that whitespace at the beginning of the line is\

significant."

print hello

kết quả

This is a rather long string containing

Note that whitespace at the beginning of the line is significant.

Hoặc đặt chúng vào bộ 3 dấu nháy đơn hoặc kép

print """

Usage: thingy [OPTIONS]

-h Display this usage message

-H hostname Hostname to connect to

"""

Sử dụng kí tự r trước chuỗi để biểu diễn dữ liệu nguyên thuỷ của chuỗi bao gồm

cái kí tự đặc biệt như /n xuống dòng sẽ được hiểu là \n chứ không phải xuống

dòng

Các chuỗi có thể được nối với nhau bởi dấu + ( ghép với các chuỗi khác) và dấu

* (nhân chuỗi lên số lần)

>>> word

'HelpA'

'<HelpAHelpAHelpAHelpAHelpA>'

Một chuỗi có thể hiểu được cấu tạo như một danh sách do đó cách tuy xuất vào

các phần tử của nó cũng tương tự danh sách mà chúng ta sẽ tìm hiểu chi tiết ở

phần sau Tuy nhiên nó khác với danh sách là các phần tử của chuỗi chỉ được

truy xuất chứ không thể thay đổi được

Trang 21

Traceback (most recent call last):

File "<stdin>" , line 1 , in ?

TypeError: object does not support item assignment

Phần tử trong danh sách bắt đầu từ vị trí 0 , có thể được cắt lát, ghép nối …

Vị trí của nó sẽ đi từ 0 và đến kích thước danh sách, nó có thể được xem như

nối giữa vị trí đầu và ví trí cuối thành vòng để có thể sử dụng giá trị index âm

['spam', 'eggs', 'bacon', 4]

Giá trị phần tử của danh sách có thể được thay đổi

>>> a[ 2 ] = a[ 2 ] + 23

>>> a

Trang 22

['spam', 'eggs', 123, 1234]

Bao gồm thao tác cho một danh sách con hoặc xóa hết danh sách

[123, 'bletch', 'xyzzy', 1234, 123, 'bletch', 'xyzzy', 1234]

>>> a[:] = []

>>> a

[]

Ngoài ra danh sách còn chứa một số hàm xử lý bên trong , do danh sách được

hiểu như một lớp mà chúng ta sẽ tìm hiểu ở phần sau

2.3 Các cấu trúc điều khiển

Các lệnh điều khiển thể hiện mã code bên trong bằng cách sử dụng kí tự : ngay

sau câu lệnh

Please enter an integer: 42

Lệnh for trong Python khác với Pascal hoặc C là sử dụng chỉ mục và số bước để

duyệt qua một tập Python chỉ đơn thuần duyệt toàn bộ tập một cách tuần tự

a = [ 'cat' , 'window' , 'defenestrate' ]

Trang 23

defenestrate 12

Việc thay đổi phần tử trong tập là không an toàn, do đó để thay đổi chúng ta cần

phải làm một copy của chúng

Hàm range sẽ tạo một tập theo định nghĩa cho trước

range (begin [,end] [,step] )

Bạn có thể duyệt tập hợp theo chỉ mục bằng cách sử dụng for và range như sau

print i, a[i]

Các lệnh break và continue tương tự các ngôn ngữ khác như C, chúng ta xét về

else trong vòng lặp

Else trong vòng lặp thể hiện lần xử lý khi tập đã được duyệt hết trong với for và

khi điều kiện false với while Nó không thực hiện khi có lệnh break

# loop fell through without finding a factor

print n, 'is a prime number'

Trang 24

(2.3.5 Lệnh pass

Lệnh này không làm gì cả, nó được yêu cầu để hiện cú pháp rõ ràng, vì trogn

Python không có từ khóa kết thúc phạm vi (scope)

Mặc khác nó nó phép định nghĩa trước khung sườn ở mức trừu tượng trước khi

thực sự bắt tay vào viết mã

pass # Remember to implement this!

(2.3.6.1 Cú pháp

def <funtionsname>(argument):

body

Gọi thực hiện hàm tương tự như các ngôn ngữ khác

"""Print a Fibonacci series up to n."""

phạm vi code, sau đó đến biến toàn cục Đặc biệt bên trong hàm không thể thay

đổi biến toàn cục

Các đối số của hàm được xư xử như các biến nội bộ hàm, do đó chỉ được sửdụng trong hàm và không thể thay đổi ra bên ngoài

Các hàm có thể được sử dụng như biến ( con trỏ hàm trong các ngôn ngữ khác)

do đó chúng ta có thể làm như sau

Trang 25

Giống như hầu hết các ngôn ngữ khác, định nghĩa hàm mặc định tham số bằng

cách gán trực tiếp chúng với một giá trị

def ask_ok(prompt, retries = , complaint = 'Yes or no, please!' ):

có thể gọi như sau

ask_ok('Do you really want to quit?')

ask_ok('OK to overwrite the file?', 2)

ask_ok('OK to overwrite the file?', 2, 'Come on, only yes or no!')

Nếu không muốn mặc định tham số bị chia sẽ giữa những lần gọi bạn chỉ định

giá trị None thay cho danh sách rỗng

Hàm có thể được gọi tham số theo từ khóa dạng key = value

ask_ok( prompt ='Do you really want to quit?') # 1 tham số key

ask_ok(retries=2, prompt ='Do you really want to quit?') # 2 tham số key

ask_ok('Do you really want to quit?', complaint ='Come on, only yes or no!') # 1

tham số theo vị trí, 1 tham số theo key

Các cách gọi sau đây không hợp lệ

ask_ok() # thiếu tham số

ask_ok( 'do you ',retries=2 ,'Come on, only yes or no!' )# tham số có key phải nằm

theo sau bởi tham số có key

ask_ok( 'do you ' , prompt = 'other do you ' )# trùng tham số

Trong lời gọi hàm tham số theo khóa phải theo sau tham số theo vị trí ( tức là ưutiên theo vị trí rồi mới theo khóa), tất cả các tham số theo khóa phải so khớp duy

nhất 1 lần, vị trí thì không quang trọng, bao gồm cả tham số không mặc định

Tham số dạng danh sách được thể hiện bởi 1 dấu * : vd *param

Trang 26

Tham số dạng bảng tra key-value được thể hiện bởi 2 dấu * : vd **dict

Và tham số dạng danh sách phải nằm trước dạng bảng tra

def cheeseshop(kind, * arguments, ** keywords):

print " Do you have any" , kind, "?"

print " I'm sorry, we're all out of" , kind

for arg in arguments:

cheeseshop( "Limburger" , "It's very runny, sir." ,

"It's really very, VERY runny, sir." ,

shopkeeper = 'Michael Palin' ,

client = "John Cleese" ,

sketch = "Cheese Shop Sketch" )

kết quả:

Do you have any Limburger ?

I'm sorry, we're all out of Limburger

It's very runny, sir.

It's really very, VERY runny, sir.

-client : John Cleese

shopkeeper : Michael Palin

sketch : Cheese Shop Sketch

Các tham số có thể được gọi một cách rời rạc hoặc gọi trực tiếp từ một danh

Một dạng ngắn gọn của hàm được sử dụng rất phổ biến, chúng được hiểu

tương tự như con trỏ hàm

Trang 27

2.4 Cấu trúc dữ liệu

Tất cả các cấu trúc mà chúng ta tìm hiểu ở đây, đều thuộc về từng lớp riêng của

nó, do đó chúng có tất cả đầy đủ những hàm xử lý riêng mà chúng ta không đểcập ở đây Khi code chỉ cần gõ là nó sẽ hiển thị ra để chọn Phần này chúng ta

chỉ đề cập đến một số tính năng và cách sử dụng bằng ví dụ

List trong Python không những là một danh sách mà còn hội tụ tất cả các tính

năng khác của các dạng danh sách khác nhau như Stack, Queue… tất cả cáctính năng này được thể hiện trong danh sách các hàm của chúng

>>> queue = deque([ "Eric" , "John" , "Michael" ])

'Eric'

Có 3 hàm xây dựng sẳn rất thường sử dụng là với List là filter(), map() và

reduce()

Filter(function, sequence) trả về tập các phần tử trong sequence thõa mãn với

function(item) = true, nếu sequence là string hay tuble thì nó trả về cùng kiểu,ngoài ra nó sẽ trả về list

Trang 28

Nếu như hàm có hơn một tham số thì , sequence cũng phải tương ứng

Reduce (function, sequence) trả về một giá trị bằng cách gọi hàm function trên

hai tham số đầu tiên, sau đó trên kết quả và tham số tiếp theo cho đến khi hếtdanh sách

55

Nếu danh sách chỉ chứa một tham số,giá trị đó sẽ được trả về, nếu danh sách

rỗng ngoại lệ sẽ quăng ra

Tham số thứ 3 sẽ là giá trị khởi tạo,trong trường hợp danh sách rỗng thì giá trị

trả về sẽ là giá trị tham số này

def add(x,y): return x +

return reduce (add, seq, 0

squares = [x ** 2 for x in range ( 10 )]

>>> squares

[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

Một List Comprehensions bao gồm đóng mở 2 dấu ngoặc vuông, bên trong là

biểu thức khởi tạo, các mệnh for và if Ví dụ dưới tạo danh sách tuple bằng cách

sử dụng dấu ngoặc trong biểu thức khởi tạo

List Comprehensions lồng nhau

Biểu thức khởi tạo có thể là bất cứ một biểu thức tùy ý nào, bao gồm một list

comprehension khác

Trang 29

[ 1 , 2 , 3 , 4 ],

[ 5 , 6 , 7 , 8 ],

[ 9 , 10 , 11 , 12 ],

Kết quả dưới đây hoàn vị dòng và cột của matrix trên

Del cũng có thể xóa luôn giá trị biến, có nghĩa là sau khi del xong thì biến đó

không còn tồn tại nữa

Trang 30

Đối với việc khởi tạo một tuple chưa 0 hoặc 1 phần tử, cú pháp có một số mởrộng để tiện lợi, tuple rỗng được tạo bởi cặp ngoặc đơn rỗng, tuple chứa mộtphần tử được tạo bằng cách gán trực tiếp tới giá trị chỉ định theo sau bởi mộtdấu phẩy.

Python cũng chứa kiểu dữ liệu tập hợp gọi là Sets

Sets là một tập hợp các phần tử không thứ tự và duy nhất ( không bị trùng lắp)

>>> fruit

set(['orange', 'pear', 'apple', 'banana'])

key/value Trong đó key có thể là tuple,list đồng nhất về kiểu dữ liệu và duy nhất

Dictionary được khởi tạo bằng 2 dấu ngoặc { }, các cặp key/value được phâncách nhau bởi dấu 2 chấm “:” , các phần tử cách nhau bởi dấu phẩy

Ngày đăng: 11/04/2015, 15:03

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w