21. Comprehensions trong Python
List Comprehensions
Là một cú pháp cho phép lập trình viên nhanh chóng tạo ra một biến dữ liệu list mới từ một list cũ hoặc vòng lặp dạng in-line, kết hợp với các điều kiện cho trước.
a = [0, 1, 2, 3]
# b will store values which are 1 greater than the values stored in a
b = [i + 1 for i in a]
print(b)
Output:
[1, 2, 3, 4]
Set Comprehension
Nó là một cú pháp ngắn hơn để tạo một tập hợp mới bằng cách sử dụng các giá trị của một tập hợp hiện có.
a = {0, 1, 2, 3}
# b will store squares of the elements of a
b = {i ** 2 for i in a}
print(b)
Output:
{0, 1, 4, 9}
Dict Comprehension
Đây là một cú pháp ngắn hơn để tạo một dictionary mới bằng cách sử dụng các giá trị của một dictionary hiện có.
a = {'Hello':'World', 'First': 1}
# b stores elements of a in value-key pair format
b = {val: k for k , val in a.items()}
print(b)
Output:
{'World': 'Hello', 1: 'First'}
22. Thao tác chuỗi (String) trong Python
Escape Sequences
Escape Sequences là các chuỗi ký tự bắt đầu bởi dấu gạch chéo ngược như \n hay \t , nhằm biểu diễn các ký tự vốn không thể biểu diễn theo cách thông thường trong Python.
Ví dụ:
Ký tự đặc biệt (Escape Sequence) | Ý nghĩa |
---|---|
\t | Ký tự Tab |
\n | Ký tự xuống dòng |
\\ | Dấu gạch chéo ngược |
\’ | Dấu nháy đơn |
Multiline Strings
Multiline Strings được sử dụng trong python thông qua dấu ngoặc kép '''
Ví dụ:
a = ''' Hello
World!
This is a
Multiline String.'''
print(a)
Output:
Hello
World!
This is a
Multiline String.
Strings Indexing
Các chuỗi trong Python được lập index giống như một list các ký tự, dựa trên việc lập index 0. Bạn có thể truy cập các phần tử (elements) của một chuỗi tại một số index bằng cách sử dụng [] các toán tử (operators).
Chúng ta cùng xem xét một ví dụ về chuỗi giá trị trong Python
.
a = "Python"
print(a[0], a[2], a[4])
print(a[-1], a[-3], a[-5])
Output:
P t o
n h y
Strings Slicing
Slicing cũng được thực hiện theo cách tương tự như trong lists.
a = "Hello"
# Slices the string from 0 to 3 indexes
print(a[0:3])
# Slices the string from 3 to -1(same as 4) indexes
print(a[3:-1])
Output:
Hel
l
Chức năng Case Conversion
Các hàm upper () và under () được sử dụng để chuyển đổi một chuỗi ký tự thành chữ hoa hoặc chữ thường tương ứng.
Hàm isupper () và islower () được sử dụng để kiểm tra xem một chuỗi có tất cả chữ hoa hay chữ thường tương ứng hay không.
a = "Hello"
print(a)
# Converts string to uppercase
print(a.upper())
# Converts string to lowercase
print(a.lower())
# Checks if string is uppercase
print(a.isupper())
# Checks if string is lowercase
print(a.islower())
Output:
Hello
HELLO
hello
False
False
Các chức năng tương tự khác:
Hàm số (Function) | Ý nghĩa |
---|---|
isspace() | Trả về true nếu chuỗi chỉ chứa các ký tự khoảng trắng whitespace |
isalnum() | Kiểm tra xem tất cả ký tự trong chuỗi có phải là ký tự chữ hoặc số (Alphanumeric) hay không |
isalpha() | Trả về true nếu chuỗi có ít nhất 1 ký tự và tất cả ký tự là chữ cái |
isTitle() | Trả về True nếu chuỗi bắt đầu bằng chữ hoa và sau đó phần còn lại của các ký tự là chữ thường |
Chức năng join() và split()
Hàm join () hợp nhất các phần tử (elements) của list với một số delimiter string và trả về kết quả dưới dạng một chuỗi (string).
list = ["One", "Two", "Three"]
# join function
s = ','.join(list)
print(s)
Output:
One,Two,Three
Hàm split () chia thành các tokens, dựa trên một số dấu phân cách và trả về kết quả dưới dạng list.
# split function
newList = s.split(',')
print(newList)
Output:
['One', 'Two', 'Three']
Nói chung, một chuỗi (string) có thể được chia (split) thành list bằng phương thức split () và một list có thể được nối (join) với chuỗi (string) bằng phương thức join () như trong hình dưới đây:
String Formatting
Thực hiện hàm str.format () để định dạng chuỗi.
first = "first"
second = "second"
s = "Sunday is the {} day of the week, whereas Monday is the {} day of the week".format(first, second)
print(s)
Output:
Sunday is the first day of the week, whereas Monday is the second day of the week
Template Strings
Template Strings làm cho code trở nên dễ hiểu hơn, vì vậy chúng được khuyến khích sử dụng. Chúng có thể được sử dụng bằng cách Template class từ string module.
Ví dụ:
>>> from string import Template
>>> name = 'Scaler'
>>> t = Template('Hey $name!')
>>> t.substitute(name = name)
'Hey Scaler!'
23. Định dạng ngày (Dates) trong Python
Để xử lý các hoạt động ngày và giờ trong Python, bạn hãy sử dụng mô-đun datetime.
- time class: bạn có thể biểu diễn các giá trị thời gian.
Ví dụ:
import datetime
tm = datetime.time(1, 30, 11, 22)
print(tm)
Output:
01:30:11.000022
- date class: bạn có thể biểu diễn các giá trị ngày.
Ví dụ:
import datetime
date = datetime.date(2000, 11, 16)
print('Date date is ', date.day, ' day of ', date.month, ' month of the year ', date.year)
Output:
Date date is 16 day of 11 month of the year 2000
- Chuyển đổi từ ngày sang giờ: bạn có thể dùng hàm strptime () để chuyển đổi ngày sang thời gian tương ứng.
Ví dụ:
from datetime import datetime
print(datetime.strptime('15/11/2000', '%d/%m/%Y'))
Output:
2000-11-15 00:00:00
- time.strftime() trong Python: Nó sẽ chuyển đổi một tuple hoặc struct_time đại diện cho thời gian thành một string object.
Ví dụ:
from time import gmtime, strftime
s = strftime("%a, %d %b %Y %H:%M:%S + 1010", gmtime())
print(s)
Output:
Sun, 28 Nov 2021 18:51:24 + 1010
24. Python RegEx
Regex Matching
re module trong Python cho phép bạn thực hiện hệ thống regex matching.
import re
landline = re.compile(r'\d\d\d\d-\d\d\d\d')
num = landline.search('LandLine Number is 2435-4153')
print('Landline Number is: {}'.format(num.group()))
Output:
Landline Number is: 2435-4153
Parenthesis Grouping
Group là một phần của mẫu regex được đặt trong dấu ngoặc đơn (). Bạn có thể đặt kết quả phù hợp vào các group khác nhau bằng cách sử dụng dấu ngoặc đơn (). Ngoài ra, bạn còn có thể truy cập các group bằng cách sử dụng hàm group ().
import re
landline = re.compile(r'(\d\d\d\d)-(\d\d\d\d)')
num = landline.search('LandLine Number is 2435-4153')
# This will print the first group, which is the entire regex enclosed in the brackets
print(num.group(0))
# This will print the second group, which is the nested regex enclosed in the 1st set of nested brackets
print(num.group(1))
# This will print the third group, which is the nested regex enclosed in the 2nd set of nested brackets
print(num.group(2))
Output:
2435-4153
2435
4153
Regex Symbols trong Python
Các ký hiệu regex có các chức năng khác nhau được đề cập trong bảng dưới đây:
Ký hiệu (Symbol) | Matches |
---|---|
+ | One or More of the preceding group |
* | Zero or More of preceding group |
? | Zero or One of preceding group |
^name | String must begin with the name |
name$ | String must end with the name |
. | Any character except \n |
{n} | Exactly n of preceding group |
{n, } | >= n of preceding group |
{,n} | [0, m] of preceding group |
{n, m} | [n, m] of preceding group |
*? | Non Greedy matching of the preceding group |
[abc] | Any character enclosed in the brackets |
[^abc] | Any character not enclosed in the brackets |
\d, \w, \s | Digit, word, or space respectively |
\D, \W, \S | Anything except digit, word, or space respectively |
Ví dụ:
Chúng ta sẽ xác định mẫu regex ở đây.
address = "(\\d*)\\s?(.+),\\s(.+)\\s([A-Z]{2,3})\\s(\\d{4})"
Chúng ta sẽ giải thích một số ký hiệu trong bảng trên:
- \ s ?: 0 hoặc 1 khoảng trắng.
- (\ d *): 0 hoặc nhiều ký tự chữ số.
- (. +): Lớn hơn hoặc bằng 1 ký tự.
- \ s: Một khoảng trắng
- ([A-Z] {2, 3}): 2 hoặc 3 bảng chữ cái viết hoa
- (\ d {4}): ký tự 4 chữ số
25. Debugging trong Python
Raising Exceptions with raise statement
Câu lệnh raise được sử dụng để nêu ra các ngoại lệ (exceptions) bao gồm 3 thành phần:
- Nâng cao keyword
- Lệnh gọi hàm Exception ()
- Tham số của hàm Exception (), thường chứa thông báo lỗi.
raise Exception("Error Occurred!!")
Traceback (most recent call last):
File "./prog.py", line 1, in <module>
Exception: Error Occurred!!
Traceback dưới dạng chuỗi (String)
Có một hàm trong python được gọi là traceback.format_exc () returns truy xuất được hiển thị bởi Python khi raised Exception không được xử lý dưới String type. Traceback Module được yêu cầu phải được nhập cho mục đích này.
Ví dụ:
import traceback
try:
raise Exception('Error Message.')
except:
with open('error.txt', 'w') as error_file:
error_file.write(traceback.format_exc())
print('The traceback info was written to error.txt.')
Output:
The traceback info was written to error.txt.
Assert Statements trong Python
Câu lệnh Assert / Assertions được sử dụng để gỡ lỗi chương trình và kiểm tra xem code có đang thực hiện hoạt động rõ ràng theo logic của chương trình hay không.
Vì khi có xác nhận không thành công, chương trình sẽ ngay lập tức bị treo, điều đó dẫn đến chúng ta sẽ bị thu hẹp space tìm kiếm lỗi.
- assert keyword
- Điều kiện dẫn đến một giá trị boolean
- Thông báo hiển thị khi xác nhận không thành công
- Dấu phẩy ngăn cách điều kiện và thông báo hiển thị.
>>> sum = 4
>>> assert sum == 5, 'Addition Error'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AssertionError: Addition Error
Các xác nhận có thể bị vô hiệu hóa bằng cách chuyển tùy chọn -O khi chạy Python như được hiển thị trong các lệnh bên dưới.
$ python -Oc "assert False"
$ python -c "assert False"
Traceback (most recent call last):
File "<string>", line 1, in <module>
AssertionError
26. Đăng nhập (Log) bằng Python
Log cho phép bạn theo dõi một số sự kiện xảy ra khi có một số phần mềm chạy. Nó sẽ trở nên rất quan trọng trong Software Development, Debugging và Running Softwares.
import logging
# Create and configues the logger
logging.basicConfig(filename="newfile.log", format='%(asctime)s %(message)s', filemode='w')
# Creates logging object
logg = logging.getLogger()
# Sets the level of logging to DEBUG
logg.setLevel(logging.DEBUG)
# Messages
logg.debug("Debug Message")
logger.warning("Its a Warning")
logger.info("Just an information")
Levels của Logging:
Level | Function | What it does |
---|---|---|
DEBUG | logging.debug() | Used for tracking any events that occur during program execution |
INFO | logging.info() | Confirms the working of things at the end of the module in the program |
WARNING | logging.warning() | Used to flag some issues that might hinder the program from working in the future, but allows it to work for now |
ERROR | logging.error() | Records errors that might have made the program fail at some point |
CRITICAL | logging.critical() | Indicates or flags fatal errors in the program |
27. Hàm Lambda trong Python
Hàm Lambda là một hàm được định nghĩa mà không có tên. Trong khi các hàm bình thường sẽ được định nghĩa bằng các từ khóa def trong Python, thì các hàm ẩn danh sẽ được định nghĩa bằng từ khóa lambda .
Chúng ta sẽ cùng tìm hiểu nó với một ví dụ sau,
Xét hàm nhân 2 số:
def mul(a, b):
return a * b
print(mul(3, 5))
Output:
15
Hàm Lambda tương đương sẽ là:
Hàm Lambda tương đương cho hàm này sẽ là:
Cú pháp này sẽ được hiển thị bên dưới:
Các hàm khác cũng có thể được viết dưới dạng của hàm Lambda, dẫn đến các code sẽ ngắn hơn dù chạy cùng một logic chương trình.
28. Toán tử ba ngôi (Ternary Operator) trong Python
Toán tử ba ngôi được sử dụng như sự thay thế cho các câu lệnh điều kiện if-else và cách để viết short crisp one-liner.
Cú pháp như sau:
<expression 1> if <condition> else <expression 2>
f = 2
s = 2
# if the sum of f and s is greater than 0 the sum
# is printed, else 0 is printed
print(f + s if (f + s > 0) else 0)
Output:
4
29. *args và **kwargs trong Python
*args là viết tắt của (arguments) đối số, **kwargs là viết tắt của (keyword arguments) đối số từ khóa. Nó được sử dụng để giải nén ra loại đối số tương ứng, cho phép gọi function có list đối số có số lượng giá trị thay đổi
Cách sử dụng như sau:
* args: đối với các đối số không phải từ khóa.
Ví dụ:
# the function will take in a variable number of arguments
# and print all of their values
def tester(*argv):
for arg in argv:
print(arg)
tester('Sunday', 'Monday', 'Tuesday', 'Wednesday')
Output:
Sunday
Monday
Tuesday
Wednesday
** kwargs: đối với các đối số từ khóa.
Ví dụ:
# The function will take variable number of arguments
# and print them as key value pairs
def tester(**kwargs):
for key, value in kwargs.items():
print(key, value)
tester(Sunday = 1, Monday = 2, Tuesday = 3, Wednesday = 4)
Output:
Sunday 1
Monday 2
Tuesday 3
Wednesday 4
30. if __name__ == "__main__" trong Python
Khi Python chạy "tệp chứa mã nguồn" dưới vai trò là chương trình chính, nó sẽ gán giá trị (“__main__”) cho biến (__name__).
>>> if __name__ == "__main__":
... main()
31. Dataclass trong Python
Dataclass được sử dụng để lưu trữ dữ liệu, chúng có một số tính năng như:
- Có thể so sánh với các đối tượng khác cùng loại.
- Lưu trữ dữ liệu, đại diện cho một kiểu dữ liệu cụ thể.
Python 2.7
Nếu bạn đang sử dụng Python phiên bản cũ thì ví dụ dưới đây sẽ cho bạn thấy chức năng hoạt động của Dataclass theo hệ điều hành cũ.
class Self:
def __init__(self, x):
self.x = x
ob = Self("One")
print(ob.x)
Output:
One
Python 3.7
Còn nếu bạn sử dụng phiên bản Python mới hơn thì ví dụ này sẽ hướng dẫn bạn cách sử dụng.
@dataclass #annotation indicates that it is a dataclass module
class Self:
x: string
ob = Self("One")
print(ob.x)
Output:
One
from dataclasses import dataclass
from typing import Any
@dataclass
class WithoutExplicitTypes:
name: Any
age: Any = 16
32. Virtual Environment trong Python
Virtual Environment thiết lập một môi trường ảo, cho phép bạn nghịch lung tung với các packages của Python mà không làm ảnh hưởng đến những packages đã được cài đặt sẵn trên Python.
Các bước cài đặt:
pip install virtualenv
pip install virtualenvwrapper-win
Các bước sử dụng:
mkvirtualenv Test # Make virtual environment called Test
#setprojectdir .
deactivate # To move to something else in the command #line.
workon Test # Activate environment
33. Lệnh trong Python
Magic Commands là tính năng mới, được thêm vào python shell. Chúng có những cải tiến hơn so với python thông thường, được thực hiện bởi IPython Kernel.
Ký tự chính: %
Các loại lệnh chính:
- %prefix: command sẽ chỉ hoạt động trên một code đã cho.
- %%prefix: command sẽ hoạt động trên code block.
Một số ví dụ về command trong Python là:
- % run: được sử dụng để chạy một tệp bên ngoài bằng Python.
- %% time: Cho phép bạn theo dõi thời gian mà code cần để thực thi.
- %% writefile: command này sẽ sao chép nội dung từ code cell hiện tại sang một tệp bên ngoài.
- $ pycat: command này được sử dụng để hiển thị nội dung của tệp bên ngoài.
- %who: command này liệt kê tất cả các biến trong Python notebook.
- %% html: command này sẽ cho phép bạn viết và thực thi code html trong ô hiện tại.
def runner():
print("Hello World")
runner()
%run runner.py
Output:
Hello World
%%time
for i in range(10000):
a = a + i**2
Output:
CPU Times: user: 3.72 ms, sys: 9us, , total: 3.73ms, Wall time: 3.75ms
%%writefile code.py
def func():
print("Hello")
func()
Output:
Overwriting code.py
%pycat code.py
def func():
print("Hello")
func()
a = "hello"
b = 5
c = 1
%who
Output:
a b c
%%html
<html>
<body>
<table>
<tr>
<th>Name</th>
<th>Country</th>
<th>Age</th>
</tr>
<tr>
<td>Sid</td>
<td>India</td>
<td>22</td>
</tr>
<tr>
<td>Dave</td>
<td>UK</td>
<td>28</td>
</tr>
</table>
</body>
</html>
Output:
- % env: command này cho phép bạn liệt kê tất cả các biến môi trường (environment variables).
- % pinfo: command này cung cấp thông tin chi tiết về đối tượng được truyền cùng với nó.