Python là một ngôn ngữ lập trình bậc cao, code python thường được cho là gần giống như các mã giả, vì thế nó cho phép bạn thể hiện những ý tưởng mạnh mẽ với ít dòng mã và nó cũng dễ đọc hiểu . Python có nhiều thư viện phổ biến như numpy, scipy, matplotlib,… vì thế nó trở thành một môi trường rất mạnh mẽ cho các ngành khoa học dữ liệu, trí tuệ nhân tạo.
Trong bài viết này, mình sẽ tóm tắt các cấu trúc chính trong Python, sử dụng các ví dụ ngắn để cho các bạn có cái nhìn tổng quan. Nếu bạn có kinh nghiệm học các ngôn ngữ khác thì cũng dễ học ngôn ngữ mới này .Mình cũng khuyến khích các bạn thử tất cả các ví dụ vào máy tính riêng của bạn.
Cài đặt môi trường
Mình khuyên bạn nên sử dụng Anaconda, là một cách dễ dàng để quản lý nhiều môi trường khác nhau, mỗi môi trường có các phiên bản và phụ thuộc Python riêng. Cài đặt như nào thì bạn có thể vào trang chủ để biết thêm chi tiết. .
Còn nếu bạn không muốn cài đặt nhiều thứ trên máy tính của mình bạn có thể dùng colab của google.
Sử dụng Interpreter
Python có thể chạy 1 trong 2 chế độ. Nó thể tương tác thông qua một interpeter, hoặc nó có thể được gọi từ một dòng lệnh để thực hiện một tập lệnh. Trước tiên chúng ta sẽ sử dụng trình thông dịch của Python.
Bạn có thể gọi trình thông dịch bằng lệnh Python
trên Unix command prompt, còn trên window bạn có thể sử dụng trên Command Prompt (Admin). Và nó chạy sẽ có kết quả như sau:
Nó sẽ hiện ra version hiện tại bạn đang dùng. Bạn cũng có thể xem bằng câu lệnh Python --version
Các kiểu dữ liệu cơ bản
Trình thông dịch của Python có thể sử dụng để đánh giá các biểu thức. Ví dụ các biểu thức số học đơn giản. Nếu ta nhập biểu thức tại dấu nhắc (>>>
) rồi ấn enter thì ta sẽ được kết quả ở dòng tiếp theo.
1 2 3 4 5 | <span class="token operator">>></span><span class="token operator">></span> 1 + 1 2 <span class="token operator">>></span><span class="token operator">></span> 2 * 3 6 |
Kiểu dữ liệu số
Kiểu dữ liệu số nguyên và số thực float
hoạt động như các ngôn ngữ khác, và trong Python sẽ tự ép kiểu dữ liệu cho bạn mà không cần khai báo kiểu như int, float
trong C, C++.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <span class="token operator">>></span><span class="token operator">></span> x <span class="token operator">=</span> 3 <span class="token operator">>></span><span class="token operator">></span> print<span class="token punctuation">(</span>type<span class="token punctuation">(</span>x<span class="token punctuation">))</span> <span class="token operator"><</span>class <span class="token string">'int'</span><span class="token operator">></span> <span class="token operator">>></span><span class="token operator">></span> print<span class="token punctuation">(</span>x<span class="token punctuation">)</span> 3 <span class="token operator">>></span><span class="token operator">></span> print<span class="token punctuation">(</span>x+1<span class="token punctuation">)</span> 4 <span class="token operator">>></span><span class="token operator">></span> print<span class="token punctuation">(</span>x-1<span class="token punctuation">)</span> 2 <span class="token operator">>></span><span class="token operator">></span> print<span class="token punctuation">(</span>x * 2<span class="token punctuation">)</span> 6 <span class="token operator">>></span><span class="token operator">></span> print<span class="token punctuation">(</span>x ** 2<span class="token punctuation">)</span> 9 <span class="token operator">>></span><span class="token operator">></span> x +<span class="token operator">=</span> 1 <span class="token operator">>></span><span class="token operator">></span> print<span class="token punctuation">(</span>x<span class="token punctuation">)</span> 4 <span class="token operator">>></span><span class="token operator">></span> x *<span class="token operator">=</span> 2 <span class="token operator">>></span><span class="token operator">></span> print<span class="token punctuation">(</span>x<span class="token punctuation">)</span> 8 <span class="token operator">>></span><span class="token operator">></span> y <span class="token operator">=</span> 2.5 <span class="token operator">>></span><span class="token operator">></span> print<span class="token punctuation">(</span>type<span class="token punctuation">(</span>y<span class="token punctuation">))</span> <span class="token operator"><</span>class <span class="token string">'float'</span><span class="token operator">></span> <span class="token operator">>></span><span class="token operator">></span> print<span class="token punctuation">(</span>y, y+1, y * 2, y**2<span class="token punctuation">)</span> 2.5 3.5 5.0 6.25 |
Lưu ý: không giống như nhiều ngôn ngữ khác, Python không có toán tử tăng một đơn vị ( x++) hoặc giảm một đơn vị (x–) mà thay vào đó bạn có thêm nhìn ví dụ.
Python cũng cung cấp kiểu dựng sẵn cho các số phức, bạn có thể tìm thấy tất cả tài liệu chi tiết trong tài liệu.
Boolean
Python cũng tồn tại toán tử Boolean
để thao tác các giá trị nguyên thủy True
và False
nhưng sử dụng tiếng Anh chứ không sử dụng các ký hiệu (&&
, ||
, !
, …) như ở các ngôn ngữ khác.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <span class="token operator">>></span><span class="token operator">></span> 1 <span class="token operator">==</span> 0 False <span class="token operator">>></span><span class="token operator">></span> not <span class="token punctuation">(</span>1 <span class="token operator">==</span> 0<span class="token punctuation">)</span> True <span class="token operator">>></span><span class="token operator">></span> <span class="token punctuation">(</span>2 <span class="token operator">==</span> 2<span class="token punctuation">)</span> and <span class="token punctuation">(</span>2 <span class="token operator">==</span>3<span class="token punctuation">)</span> False <span class="token operator">>></span><span class="token operator">></span> <span class="token punctuation">(</span> 2 <span class="token operator">==</span> 2<span class="token punctuation">)</span> or <span class="token punctuation">(</span> 2<span class="token operator">==</span> 3<span class="token punctuation">)</span> True <span class="token operator">>></span><span class="token operator">></span> t <span class="token operator">=</span> True <span class="token operator">>></span><span class="token operator">></span> f <span class="token operator">=</span> False <span class="token operator">>></span><span class="token operator">></span> print<span class="token punctuation">(</span>type<span class="token punctuation">(</span>t<span class="token punctuation">))</span> <span class="token operator"><</span>class <span class="token string">'bool'</span><span class="token operator">></span> <span class="token operator">>></span><span class="token operator">></span> print<span class="token punctuation">(</span>t and f<span class="token punctuation">)</span> False <span class="token operator">>></span><span class="token operator">></span> print<span class="token punctuation">(</span>t or f<span class="token punctuation">)</span> True <span class="token operator">>></span><span class="token operator">></span> print<span class="token punctuation">(</span>not t<span class="token punctuation">)</span> False <span class="token operator">>></span><span class="token operator">></span> print<span class="token punctuation">(</span>t <span class="token operator">!=</span> f<span class="token punctuation">)</span> True |
String
Giống như Java, Python có kiểu chuỗi. Toán tử +
sẽ cộng các chuỗi lại với nhau.
1 2 3 | <span class="token operator">>></span><span class="token operator">></span> <span class="token string">'hello'</span> + <span class="token string">'world'</span> <span class="token string">'helloworld'</span> |
Có nhiều phương thức thích hợp cho phép ta thao tác với chuỗi:
1 2 3 4 5 6 7 8 9 | <span class="token operator">>></span><span class="token operator">></span> <span class="token string">'hello'</span> + <span class="token string">'world'</span> <span class="token string">'helloworld'</span> <span class="token operator">>></span><span class="token operator">></span> <span class="token string">'hello world'</span>.upper<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token string">'HELLO WORLD'</span> <span class="token operator">>></span><span class="token operator">></span> <span class="token string">'HELP'</span>.lower<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token string">'help'</span> <span class="token operator">>></span><span class="token operator">></span> len<span class="token punctuation">(</span><span class="token string">'Help'</span><span class="token punctuation">)</span> 4 |
Lưu ý rằng chúng ta có thể sử dụng dấu ngoặc đơn
' '
hoặc dấu ngoặc đơn" "
để bao quanh chuỗi. Điều này cho phép dễ dàng lông các chuỗi.
Chúng ta cũng có thể lưu trữ các chuỗi thành các biến như ví dụ sau:
1 2 3 4 5 6 7 8 9 10 11 | <span class="token operator">>></span><span class="token operator">></span> s <span class="token operator">=</span> <span class="token string">'hello world'</span> <span class="token operator">>></span><span class="token operator">></span> print<span class="token punctuation">(</span>s<span class="token punctuation">)</span> hello world <span class="token operator">>></span><span class="token operator">></span> s.upper<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token string">'HELLO WORLD'</span> <span class="token operator">>></span><span class="token operator">></span> len<span class="token punctuation">(</span>s.upper<span class="token punctuation">(</span><span class="token punctuation">))</span> 11 <span class="token operator">>></span><span class="token operator">></span> hw <span class="token operator">=</span> <span class="token string">'%s %s %d'</span> % <span class="token punctuation">(</span><span class="token string">'hello'</span>, <span class="token string">'world'</span>, 12<span class="token punctuation">)</span> <span class="token comment"># Viết theo định dạng như trong C</span> <span class="token operator">>></span><span class="token operator">></span> print<span class="token punctuation">(</span>hw<span class="token punctuation">)</span> hello world 12 |
Các đối tượng String có một loạt các phương thức hữu ích, ví du:
1 2 3 4 5 6 7 8 9 10 | <span class="token operator">>></span><span class="token operator">></span> s <span class="token operator">=</span> <span class="token string">"hello"</span> <span class="token operator">>></span><span class="token operator">></span> s.rjust<span class="token punctuation">(</span>7<span class="token punctuation">)</span> <span class="token string">' hello'</span> <span class="token operator">>></span><span class="token operator">></span> s.center<span class="token punctuation">(</span>7<span class="token punctuation">)</span> <span class="token string">' hello '</span> <span class="token operator">>></span><span class="token operator">></span> s.replace<span class="token punctuation">(</span><span class="token string">'l'</span>, <span class="token string">'(ell)'</span><span class="token punctuation">)</span> <span class="token comment"># Thay thế một ký tự</span> <span class="token string">'he(ell)(ell)o'</span> <span class="token operator">>></span><span class="token operator">></span> <span class="token string">' world '</span>.strip<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token comment"># Loại bỏ khoảng trắng đầu và cuối của chuỗi</span> <span class="token string">'world'</span> |
Bạn có thể xem danh sách các phương thức của chuỗi trong tài liệu
Cấu trúc dữ liệu tích hợp (Built-in DATA structure)
Python được trang bị một số cấu trúc dữ liệu tích hợp hữu ích, tương tự collections package trong Java. Nó bao gồm: lists, dictionaries, sets, và tuples
Lists
Một list trong Python tương đương với một mảng, nhưng nó có thể thay đổi kích thước và có thể chưa nhiều thành phần thuộc nhiều kiểu khác nhau. Ví dụ 1 list chứa một chuỗi các items có thể thay đổi:
1 2 3 4 | <span class="token operator">>></span><span class="token operator">></span> fruits <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token string">'apple'</span>, <span class="token string">'orange'</span>, <span class="token string">'pear'</span>, <span class="token string">'banana'</span><span class="token punctuation">]</span> <span class="token operator">>></span><span class="token operator">></span> fruits<span class="token punctuation">[</span>0<span class="token punctuation">]</span> <span class="token string">'apple'</span> |
Chúng ta có thể sử dụng toán từ +
để nối vào list:
1 2 3 4 | <span class="token operator">>></span><span class="token operator">></span> otherFruits <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token string">'kiwi'</span>, <span class="token string">'strawberry'</span><span class="token punctuation">]</span> <span class="token operator">>></span><span class="token operator">></span> fruits + otherFruits <span class="token operator">>></span><span class="token operator">></span> <span class="token punctuation">[</span><span class="token string">'apple'</span>, <span class="token string">'orange'</span>, <span class="token string">'pear'</span>, <span class="token string">'banana'</span>, <span class="token string">'kiwi'</span>, <span class="token string">'strawberry'</span><span class="token punctuation">]</span> |
Python cũng cho phép negative-indexing từ cuối của list. Ví dụ, fruist[-1]
sẽ truy cập vào phần tử cuối cùng banana
:
1 2 3 4 5 6 7 8 9 10 11 12 13 | <span class="token operator">>></span><span class="token operator">></span> fruits<span class="token punctuation">[</span>-2<span class="token punctuation">]</span> <span class="token string">'pear'</span> <span class="token operator">>></span><span class="token operator">></span> fruits.pop<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token comment"># Xóa và trả về phần tử cuối cùng trong list</span> <span class="token string">'banana'</span> <span class="token operator">>></span><span class="token operator">></span> fruits <span class="token punctuation">[</span><span class="token string">'apple'</span>, <span class="token string">'orange'</span>, <span class="token string">'pear'</span><span class="token punctuation">]</span> <span class="token operator">>></span><span class="token operator">></span> fruits.append<span class="token punctuation">(</span><span class="token string">'grapefruit'</span><span class="token punctuation">)</span> <span class="token comment"># Thêm 1 phần tử vào cuối của list</span> <span class="token operator">>></span><span class="token operator">></span> fruits <span class="token punctuation">[</span><span class="token string">'apple'</span>, <span class="token string">'orange'</span>, <span class="token string">'pear'</span>, <span class="token string">'grapefruit'</span><span class="token punctuation">]</span> <span class="token operator">>></span><span class="token operator">></span> fruits<span class="token punctuation">[</span>-1<span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token string">'pineapple'</span> <span class="token operator">>></span><span class="token operator">></span> fruits <span class="token punctuation">[</span><span class="token string">'apple'</span>, <span class="token string">'orange'</span>, <span class="token string">'pear'</span>, <span class="token string">'pineapple'</span><span class="token punctuation">]</span> |
Như thường lệ, bạn có thể tìm thấy tất cả thông tin chi tiết về list trong tài liệu
Slicing: Ngoài việc truy cập từng phẩn tử trong danh sách, Python cung cấp cú pháp ngắn gọn để truy cập danh sách con, nó được hiểu như slicing (cắt lát)
. Chẳng hạn, fruits[1:3]
trả về một danh sách chứa các phần tử ở vị trí 1 và 2 (trong python thì các phần tử bắt đầu từ vị trí 0). Nói chung, fruits[start:stop]
sẽ lấy các phần từ trong start, start+1, ..., stop-1
. Chúng ta cũng có thể viết fruits[start:]
trả về tất cả các giá trị từ vị trí start
, hoặc fruits[:end]
trả về tất cả phần tử trước vị trí end
.
1 2 3 4 5 6 7 8 9 | <span class="token operator">>></span><span class="token operator">></span> fruits<span class="token punctuation">[</span>0:2<span class="token punctuation">]</span> <span class="token punctuation">[</span><span class="token string">'apple'</span>, <span class="token string">'orange'</span><span class="token punctuation">]</span> <span class="token operator">>></span><span class="token operator">></span> fruits<span class="token punctuation">[</span>:3<span class="token punctuation">]</span> <span class="token punctuation">[</span><span class="token string">'apple'</span>, <span class="token string">'orange'</span>, <span class="token string">'pear'</span><span class="token punctuation">]</span> <span class="token operator">>></span><span class="token operator">></span> fruits<span class="token punctuation">[</span>2:<span class="token punctuation">]</span> <span class="token punctuation">[</span><span class="token string">'pear'</span>, <span class="token string">'pineapple'</span><span class="token punctuation">]</span> <span class="token operator">>></span><span class="token operator">></span> len<span class="token punctuation">(</span>fruits<span class="token punctuation">)</span> 4 |
Chúng ta sẽ gặp lại nội dung
slicing
trong thư viện numpy.
Như đã nói ở trên, các dữ liệu được lưu trữ trong list có thể là bất kỳ dữ liệu Python nào. Ví dụ, chung ta có thể có 1 list của các list:
1 2 3 4 5 6 7 8 | <span class="token operator">>></span><span class="token operator">></span> lstOfLsts <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token punctuation">[</span><span class="token string">'a'</span>, <span class="token string">'b'</span>, <span class="token string">'c'</span><span class="token punctuation">]</span>, <span class="token punctuation">[</span>1, 2, 3<span class="token punctuation">]</span>, <span class="token punctuation">[</span><span class="token string">'one'</span>, <span class="token string">'two'</span>, <span class="token string">'three'</span><span class="token punctuation">]</span><span class="token punctuation">]</span> <span class="token operator">>></span><span class="token operator">></span> lstOfLsts<span class="token punctuation">[</span>1<span class="token punctuation">]</span><span class="token punctuation">[</span>2<span class="token punctuation">]</span> 3 <span class="token operator">>></span><span class="token operator">></span> lstOfLsts<span class="token punctuation">[</span>0<span class="token punctuation">]</span>.pop<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token string">'c'</span> <span class="token operator">>></span><span class="token operator">></span> lstOfLsts <span class="token punctuation">[</span><span class="token punctuation">[</span><span class="token string">'a'</span>, <span class="token string">'b'</span><span class="token punctuation">]</span>, <span class="token punctuation">[</span>1, 2, 3<span class="token punctuation">]</span>, <span class="token punctuation">[</span><span class="token string">'one'</span>, <span class="token string">'two'</span>, <span class="token string">'three'</span><span class="token punctuation">]</span><span class="token punctuation">]</span> |
Tuples
Một cấu trúc dữ liệu tương tự như list
là tuples
, giống như list
ngoại trừ việc nó bất biến một khi nó được tạo ra (tức là ta không thể thay đổi giá trị của nó một khi ta đã tạo ra). Lưu ý rằng tuples
được bao quanh bằng dấu ngoặc đơn trong khi list
có dấu ngoặc vuông.
1 2 3 4 5 6 7 8 9 10 11 | <span class="token operator">>></span><span class="token operator">></span> pair <span class="token operator">=</span> <span class="token punctuation">(</span>3, 5<span class="token punctuation">)</span> <span class="token operator">>></span><span class="token operator">></span> pair<span class="token punctuation">[</span>0<span class="token punctuation">]</span> 3 <span class="token operator">>></span><span class="token operator">></span> x, y <span class="token operator">=</span> pair <span class="token operator">>></span><span class="token operator">></span> x 3 <span class="token operator">>></span><span class="token operator">></span> y 5 <span class="token operator">>></span><span class="token operator">></span> pair<span class="token punctuation">[</span>1<span class="token punctuation">]</span> <span class="token operator">=</span> 6 TypeError: object does not support item assignment |
Nỗ lực sửa đổi một cấu trúc bất biến sẽ trả ra 1 exception. Exception chỉ ra các lỗi: index out of bounds errors, type error, … tất cả sẽ báo cáo các exception ngoại lệ theo cách như trên (viết ra màn hình).
Tài liệu để bạn có thể tìm hiểu thêm về tuples
Sets
Một set
là một cấu trúc dữ liệu khác như 1 list
nhưng không có thứ tự tự và không có giá trị nào trùng lặp. Dưới đây, mình trình bày một cách tạo set
:
1 2 3 4 5 | <span class="token operator">>></span><span class="token operator">></span> shapes <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token string">'circle'</span>, <span class="token string">'square'</span>, <span class="token string">'triangle'</span>, <span class="token string">'circle'</span><span class="token punctuation">]</span> <span class="token operator">>></span><span class="token operator">></span> setOfShapes <span class="token operator">=</span> set<span class="token punctuation">(</span>shapes<span class="token punctuation">)</span> <span class="token operator">>></span><span class="token operator">></span> print<span class="token punctuation">(</span>setOfShapes<span class="token punctuation">)</span> <span class="token punctuation">{</span><span class="token string">'square'</span>, <span class="token string">'circle'</span>, <span class="token string">'triangle'</span><span class="token punctuation">}</span> |
Một cách khác để tạo một set
được hiện thị bên dưới:
1 2 | <span class="token operator">>></span><span class="token operator">></span> setOfShapes <span class="token operator">=</span> <span class="token punctuation">{</span>‘circle’, ‘square’, ‘triangle’, ‘circle’<span class="token punctuation">}</span> |
Tiếp theo, mình sẽ trình bày cách thêm thêm tử vào set
, kiểu tra một phần tử có thuộc `set’ không và thực hiện các phép toán trên tập hợp (difference, intersection, union):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <span class="token operator">>></span><span class="token operator">></span> setOfShapes set<span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token string">'circle'</span>, <span class="token string">'square'</span>, <span class="token string">'triangle'</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token operator">>></span><span class="token operator">></span> setOfShapes.add<span class="token punctuation">(</span><span class="token string">'polygon'</span><span class="token punctuation">)</span> <span class="token operator">>></span><span class="token operator">></span> setOfShapes set<span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token string">'circle'</span>, <span class="token string">'square'</span>, <span class="token string">'triangle'</span>, <span class="token string">'polygon'</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token operator">>></span><span class="token operator">></span> <span class="token string">'circle'</span> <span class="token keyword">in</span> setOfShapes True <span class="token operator">>></span><span class="token operator">></span> <span class="token string">'rhombus'</span> <span class="token keyword">in</span> setOfShapes False <span class="token operator">>></span><span class="token operator">></span> favoriteShapes <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token string">'circle'</span>, <span class="token string">'triangle'</span>, <span class="token string">'hexagon'</span><span class="token punctuation">]</span> <span class="token operator">>></span><span class="token operator">></span> setOfFavoriteShapes <span class="token operator">=</span> set<span class="token punctuation">(</span>favoriteShapes<span class="token punctuation">)</span> <span class="token operator">>></span><span class="token operator">></span> setOfShapes - setOfFavoriteShapes set<span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token string">'square'</span>, <span class="token string">'polygon'</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token operator">>></span><span class="token operator">></span> setOfShapes <span class="token operator">&</span> setOfFavoriteShapes <span class="token comment"># giao giữa 2 set</span> set<span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token string">'circle'</span>, <span class="token string">'triangle'</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token operator">>></span><span class="token operator">></span> setOfShapes <span class="token operator">|</span> setOfFavoriteShapes <span class="token comment"># hợp giữa 2 set</span> set<span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token string">'circle'</span>, <span class="token string">'square'</span>, <span class="token string">'triangle'</span>, <span class="token string">'polygon'</span>, <span class="token string">'hexagon'</span><span class="token punctuation">]</span><span class="token punctuation">)</span> |
Như thường lệ, bạn có thể tìm hiểu về set
trong tài liệu
Lưu ý rằng: các đối tượng trong set không có thứ tự, vì vậy bạn không thể cho rằng thứ tự in và in của chúng sẽ giống nhau ở trên các máy tính!
Dictionaries (từ điển)
Một từ điển lưu trữ các cặp (key, value) tương tự map trong Java hoặc một đối tượng trong Javascript. Bạn có thể sử dụng nó như sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <span class="token operator">>></span><span class="token operator">></span> d <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token string">'cat'</span><span class="token keyword">:</span> <span class="token string">'cute'</span>, <span class="token string">'dog'</span><span class="token keyword">:</span> <span class="token string">'furry'</span><span class="token punctuation">}</span> <span class="token comment"># Create a new dictionary with some data</span> <span class="token operator">>></span><span class="token operator">></span> print<span class="token punctuation">(</span>d<span class="token punctuation">[</span><span class="token string">'cat'</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token comment"># Get an entry from a dictionary</span> cute <span class="token operator">>></span><span class="token operator">></span> print<span class="token punctuation">(</span><span class="token string">'cat'</span> <span class="token keyword">in</span> d<span class="token punctuation">)</span> <span class="token comment"># Check if a dictionary has a given key</span> True <span class="token operator">>></span><span class="token operator">></span> d<span class="token punctuation">[</span><span class="token string">'fish'</span><span class="token punctuation">]</span> <span class="token operator">=</span> <span class="token string">'wet'</span> <span class="token comment"># Set an entry in a dictionary</span> <span class="token operator">>></span><span class="token operator">></span> print<span class="token punctuation">(</span>d<span class="token punctuation">[</span><span class="token string">'fish'</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token comment"># Prints "wet"</span> wet <span class="token operator">>></span><span class="token operator">></span> <span class="token comment"># print(d['monkey']) # KeyError: 'monkey' not a key of d</span> <span class="token operator">>></span><span class="token operator">></span> print<span class="token punctuation">(</span>d.get<span class="token punctuation">(</span><span class="token string">'monkey'</span>, <span class="token string">'N/A'</span><span class="token punctuation">))</span> <span class="token comment"># Get an element with a default</span> N/A <span class="token operator">>></span><span class="token operator">></span> print<span class="token punctuation">(</span>d.get<span class="token punctuation">(</span><span class="token string">'fish'</span>, <span class="token string">'N/A'</span><span class="token punctuation">))</span> <span class="token comment"># Get an element with a default</span> wet <span class="token operator">>></span><span class="token operator">></span> del d<span class="token punctuation">[</span><span class="token string">'fish'</span><span class="token punctuation">]</span> <span class="token comment"># Remove an element from a dictionary</span> <span class="token operator">>></span><span class="token operator">></span> print<span class="token punctuation">(</span>d.get<span class="token punctuation">(</span><span class="token string">'fish'</span>, <span class="token string">'N/A'</span><span class="token punctuation">))</span> <span class="token comment"># "fish" is no longer a key</span> N/A |
Bạn có thể đọc thêm về dictionaries trong tài liệu.
Viết scripts
Ơ trên ta đã làm quen với trình biên dịch của Python, nó dễ dàng nếu bạn thực hiện các câu lệnh đơn không dài. Chúng ta sẽ làm quen với viết một chương trình python và chạy nó. Ví dụ chúng ta viết một tập lệnh (scripts) Python đơn giản thể hiện vòng lặp for
trong python. Bạn sẽ viết vào text editor bất kỳ rồi lưu nó dưới dạng có duôi là .py
, ở đây mình sẽ lưu thành file foreach.py
. Nó sẽ chứa các mã như sau:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <span class="token comment"># đây là phần comment của các bạn dành cho 1 dòng bắt đầu bằng '#'</span> <span class="token triple-quoted-string string">''' Nếu bạn muốn comment nhiều dòng '''</span> fruits <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token string">'apples'</span><span class="token punctuation">,</span> <span class="token string">'oranges'</span><span class="token punctuation">,</span> <span class="token string">'pears'</span><span class="token punctuation">,</span> <span class="token string">'bananas'</span><span class="token punctuation">]</span> <span class="token keyword">for</span> fruit <span class="token keyword">in</span> fruits<span class="token punctuation">:</span> <span class="token keyword">print</span><span class="token punctuation">(</span>fruit <span class="token operator">+</span> <span class="token string">' for sale'</span><span class="token punctuation">)</span> fruitPrices <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token string">'apples'</span><span class="token punctuation">:</span> <span class="token number">2.00</span><span class="token punctuation">,</span> <span class="token string">'oranges'</span><span class="token punctuation">:</span> <span class="token number">1.50</span><span class="token punctuation">,</span> <span class="token string">'pears'</span><span class="token punctuation">:</span> <span class="token number">1.75</span><span class="token punctuation">}</span> <span class="token keyword">for</span> fruit<span class="token punctuation">,</span> price <span class="token keyword">in</span> fruitPrices<span class="token punctuation">.</span>items<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">if</span> price <span class="token operator"><</span> <span class="token number">2.00</span><span class="token punctuation">:</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">'%s cost %f a pound'</span> <span class="token operator">%</span> <span class="token punctuation">(</span>fruit<span class="token punctuation">,</span> price<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token keyword">else</span><span class="token punctuation">:</span> <span class="token keyword">print</span><span class="token punctuation">(</span>fruit <span class="token operator">+</span> <span class="token string">' are too expensive!'</span><span class="token punctuation">)</span> |
Tại dòng lệnh, sử dụng câu lệnh sau trong thư mục chứa foreach.py
:
Nếu bạn thích functional programming
bạn có thể thích map
và filter
:
1 2 3 4 5 | <span class="token operator">>></span><span class="token operator">></span> list<span class="token punctuation">(</span>map<span class="token punctuation">(</span>lambda x: x * x, <span class="token punctuation">[</span>1, 2, 3<span class="token punctuation">]</span><span class="token punctuation">))</span> <span class="token punctuation">[</span>1, 4, 9<span class="token punctuation">]</span> <span class="token operator">>></span><span class="token operator">></span> list<span class="token punctuation">(</span>filter<span class="token punctuation">(</span>lambda x: x <span class="token operator">></span> 3, <span class="token punctuation">[</span>1, 2, 3, 4, 5, 4, 3, 2, 1<span class="token punctuation">]</span><span class="token punctuation">))</span> <span class="token punctuation">[</span>4, 5, 4<span class="token punctuation">]</span> |
Loops
Ta có thể lặp các phần tử trong list như sau:
1 2 3 4 5 | animals <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token string">'cat'</span><span class="token punctuation">,</span> <span class="token string">'dog'</span><span class="token punctuation">,</span> <span class="token string">'monkey'</span><span class="token punctuation">]</span> <span class="token keyword">for</span> animal <span class="token keyword">in</span> animals<span class="token punctuation">:</span> <span class="token keyword">print</span><span class="token punctuation">(</span>animal<span class="token punctuation">)</span> <span class="token comment"># kết quả in "cat", "dog", "monkey" trên mỗi dòng</span> |
Nếu bạn muốn truy cập vào số thứ tự của từng phần tử trong thân vòng lặp, hãy sử dụng enumerate
:
1 2 3 4 5 | animals <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token string">'cat'</span><span class="token punctuation">,</span> <span class="token string">'dog'</span><span class="token punctuation">,</span> <span class="token string">'monkey'</span><span class="token punctuation">]</span> <span class="token keyword">for</span> idx<span class="token punctuation">,</span> animal <span class="token keyword">in</span> <span class="token builtin">enumerate</span><span class="token punctuation">(</span>animals<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">'#%d: %s'</span> <span class="token operator">%</span> <span class="token punctuation">(</span>idx <span class="token operator">+</span> <span class="token number">1</span><span class="token punctuation">,</span> animal<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># Prints "#1: cat", "#2: dog", "#3: monkey" trên từng dòng</span> |
Ta cũng có thể lặp các giá trị trong dictionary:
1 2 3 4 5 6 | d <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token string">'person'</span><span class="token punctuation">:</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token string">'cat'</span><span class="token punctuation">:</span> <span class="token number">4</span><span class="token punctuation">,</span> <span class="token string">'spider'</span><span class="token punctuation">:</span> <span class="token number">8</span><span class="token punctuation">}</span> <span class="token keyword">for</span> animal <span class="token keyword">in</span> d<span class="token punctuation">:</span> legs <span class="token operator">=</span> d<span class="token punctuation">[</span>animal<span class="token punctuation">]</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">'A %s has %d legs'</span> <span class="token operator">%</span> <span class="token punctuation">(</span>animal<span class="token punctuation">,</span> legs<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># Prints "A person has 2 legs", "A cat has 4 legs", "A spider has 8 legs"</span> |
Nếu bạn muốn truy cập vào các khóa và giá trị tương ứng của chúng, hãy sử dụng phương thức itém
:
1 2 3 4 5 | d <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token string">'person'</span><span class="token punctuation">:</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token string">'cat'</span><span class="token punctuation">:</span> <span class="token number">4</span><span class="token punctuation">,</span> <span class="token string">'spider'</span><span class="token punctuation">:</span> <span class="token number">8</span><span class="token punctuation">}</span> <span class="token keyword">for</span> animal<span class="token punctuation">,</span> legs <span class="token keyword">in</span> d<span class="token punctuation">.</span>items<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">'A %s has %d legs'</span> <span class="token operator">%</span> <span class="token punctuation">(</span>animal<span class="token punctuation">,</span> legs<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># Prints "A person has 2 legs", "A cat has 4 legs", "A spider has 8 legs"</span> |
Comprehensions
Mình sẽ đưa các bạn đến phần nâng cao hơn, sẽ tìm hiểu về comprehensions làm cho code ngắn gọn, dễ hiểu hơn.
Comprehensions (bao hàm) là các cấu trúc cho phép các chuỗi được xây dựng từ các chuỗi khác. Python 2.0 đã giới thiệu cho chúng ta khái niệm về list comprehensions và Python 3.0 đã đưa nó đi xa hơn bằng cách bao gồm từ dict comprehensions và set comprehensions.
List comprehensions
Khi lập trình, ta thường xuyên muốn chuyển đổi một loại dữ liệu sang loại khác. Ví dụ đơn giản, hãy xem xét đoạn mã sau để tính bình phương của từng số trong list:
1 2 3 4 5 6 7 | nums <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">]</span> squares <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token keyword">for</span> x <span class="token keyword">in</span> nums<span class="token punctuation">:</span> squares<span class="token punctuation">.</span>append<span class="token punctuation">(</span>x <span class="token operator">**</span> <span class="token number">2</span><span class="token punctuation">)</span> <span class="token keyword">print</span><span class="token punctuation">(</span>squares<span class="token punctuation">)</span> <span class="token comment"># Prints [0, 1, 4, 9, 16]</span> |
Bạn có thể làm cho mã này đơn giản hơn bằng cách list comprehension:
1 2 3 4 | nums = [0, 1, 2, 3, 4] squares = [x ** 2 for x in nums] print(squares) # Prints [0, 1, 4, 9, 16] |
List comprehension cũng có thể chứa các điều kiện:
1 2 3 4 | nums <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">]</span> even_squares <span class="token operator">=</span> <span class="token punctuation">[</span>x <span class="token operator">**</span> <span class="token number">2</span> <span class="token keyword">for</span> x <span class="token keyword">in</span> nums <span class="token keyword">if</span> x <span class="token operator">%</span> <span class="token number">2</span> <span class="token operator">==</span> <span class="token number">0</span><span class="token punctuation">]</span> <span class="token keyword">print</span><span class="token punctuation">(</span>even_squares<span class="token punctuation">)</span> <span class="token comment"># Prints "[0, 4, 16]"</span> |
Dictionary comprehensions
Tương tự như list comprehensions, nhưng cho phép bạn dễ dàng xây dựng từ điển. Ví dụ :
1 2 3 4 5 | nums <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">4</span><span class="token punctuation">]</span> even_num_to_square <span class="token operator">=</span> <span class="token punctuation">{</span>x<span class="token punctuation">:</span> x <span class="token operator">**</span> <span class="token number">2</span> <span class="token keyword">for</span> x <span class="token keyword">in</span> nums <span class="token keyword">if</span> x <span class="token operator">%</span> <span class="token number">2</span> <span class="token operator">==</span> <span class="token number">0</span><span class="token punctuation">}</span> <span class="token keyword">print</span><span class="token punctuation">(</span>even_num_to_square<span class="token punctuation">)</span> <span class="token comment"># Prints "{0: 0, 2: 4, 4: 16}"</span> |
Set comprehensions
Tương tự lists and dictionaries, ta có thể xây dựng sets
bằng set comprehensions:
1 2 3 4 5 | <span class="token keyword">from</span> math <span class="token keyword">import</span> sqrt nums <span class="token operator">=</span> <span class="token punctuation">{</span><span class="token builtin">int</span><span class="token punctuation">(</span>sqrt<span class="token punctuation">(</span>x<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token keyword">for</span> x <span class="token keyword">in</span> <span class="token builtin">range</span><span class="token punctuation">(</span><span class="token number">30</span><span class="token punctuation">)</span><span class="token punctuation">}</span> <span class="token keyword">print</span><span class="token punctuation">(</span>nums<span class="token punctuation">)</span> <span class="token comment"># Prints "{0, 1, 2, 3, 4, 5}"</span> |
Cẩn thận với sự thay đổi
Không giống như nhiều ngôn ngữ khác, Python sử dụng thụt lề trong mã nguồn để diễn dịch. Ví dụ, đối với tập lệnh dưới đây:
1 2 3 4 | <span class="token keyword">if</span> <span class="token number">0</span> <span class="token operator">==</span> <span class="token number">1</span><span class="token punctuation">:</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">'We are in a world of arithmetic pain'</span><span class="token punctuation">)</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">'Thank you for playing'</span><span class="token punctuation">)</span> |
sẽ cho ra output là Thank you for playing
Nhưng nếu bạn viết tập lệnh như sau:
1 2 3 4 | if 0 == 1: print('We are in a world of arithmetic pain') print('Thank you for playing') |
Nó sẽ không ra kết quả gì. Nội dung chính ở đây là hãy cẩn thận với thụt lề, tốt nhất sử dụng 4 khoảng trắng để thụt lề
Hàm
Các hàm Python được định nghĩa bằng cách sử dụng từ khóa def
. Ví dụ:
1 2 3 4 5 6 7 8 9 10 11 12 | <span class="token keyword">def</span> <span class="token function">sign</span><span class="token punctuation">(</span>x<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">if</span> x <span class="token operator">></span> <span class="token number">0</span><span class="token punctuation">:</span> <span class="token keyword">return</span> <span class="token string">'positive'</span> <span class="token keyword">elif</span> x <span class="token operator"><</span> <span class="token number">0</span><span class="token punctuation">:</span> <span class="token keyword">return</span> <span class="token string">'negative'</span> <span class="token keyword">else</span><span class="token punctuation">:</span> <span class="token keyword">return</span> <span class="token string">'zero'</span> <span class="token keyword">for</span> x <span class="token keyword">in</span> <span class="token punctuation">[</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">:</span> <span class="token keyword">print</span><span class="token punctuation">(</span>sign<span class="token punctuation">(</span>x<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># Prints "negative", "zero", "positive"</span> |
Chúng ta cũng có thể truyền các tham số tùy chọn vào hạm, ví dụ như :
1 2 3 4 5 6 7 8 9 | <span class="token keyword">def</span> <span class="token function">hello</span><span class="token punctuation">(</span>name<span class="token punctuation">,</span> loud<span class="token operator">=</span><span class="token boolean">False</span><span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">if</span> loud<span class="token punctuation">:</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">'HELLO, %s!'</span> <span class="token operator">%</span> name<span class="token punctuation">.</span>upper<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token keyword">else</span><span class="token punctuation">:</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">'Hello, %s'</span> <span class="token operator">%</span> name<span class="token punctuation">)</span> hello<span class="token punctuation">(</span><span class="token string">'Bob'</span><span class="token punctuation">)</span> <span class="token comment"># Prints "Hello, Bob"</span> hello<span class="token punctuation">(</span><span class="token string">'Fred'</span><span class="token punctuation">,</span> loud<span class="token operator">=</span><span class="token boolean">True</span><span class="token punctuation">)</span> <span class="token comment"># Prints "HELLO, FRED!"</span> |
Để biết thêm chi tiết về các hàm Python thì bạn có thể đọc trong tài liệu
Classes
Cú pháp để xác định các lớp trong Python rất đơn giản, mình sẽ không đi chi tiết về phần này chỉ mang tính chất giới thiệu:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <span class="token keyword">class</span> <span class="token class-name">Greeter</span><span class="token punctuation">(</span><span class="token builtin">object</span><span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token comment"># Constructor</span> <span class="token keyword">def</span> <span class="token function">__init__</span><span class="token punctuation">(</span>self<span class="token punctuation">,</span> name<span class="token punctuation">)</span><span class="token punctuation">:</span> self<span class="token punctuation">.</span>name <span class="token operator">=</span> name <span class="token comment"># Create an instance variable</span> <span class="token comment"># Instance method</span> <span class="token keyword">def</span> <span class="token function">greet</span><span class="token punctuation">(</span>self<span class="token punctuation">,</span> loud<span class="token operator">=</span><span class="token boolean">False</span><span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">if</span> loud<span class="token punctuation">:</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">'HELLO, %s!'</span> <span class="token operator">%</span> self<span class="token punctuation">.</span>name<span class="token punctuation">.</span>upper<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token keyword">else</span><span class="token punctuation">:</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">'Hello, %s'</span> <span class="token operator">%</span> self<span class="token punctuation">.</span>name<span class="token punctuation">)</span> g <span class="token operator">=</span> Greeter<span class="token punctuation">(</span><span class="token string">'Fred'</span><span class="token punctuation">)</span> <span class="token comment"># Construct an instance of the Greeter class</span> g<span class="token punctuation">.</span>greet<span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token comment"># Call an instance method; prints "Hello, Fred"</span> g<span class="token punctuation">.</span>greet<span class="token punctuation">(</span>loud<span class="token operator">=</span><span class="token boolean">True</span><span class="token punctuation">)</span> <span class="token comment"># Call an instance method; prints "HELLO, FRED!"</span> |
Bạn có thể đọc thêm về các lớp Python trong tài liệu
Tài liệu tham khảo
- Cs 188: Project 0: Unix/Python/Autograder Tutorial
- Cs 231n: Python Numpy Tutorial
- Nếu bạn muốn luyện tập nhiều hơn, thì có thể tham khảo Learn python the hard way
TL;DR
Cảm ơn bạn đã đọc đến dòng này, nếu có chỗ nào chưa hiểu hoặc mình sai chỗ nào, các bạn có thể comment bên dưới. Hẹn gặp lại các bạn ở các bài tiếp theo.