Bài tập

Python Cheat Sheet dành cho người mới Phần 3 - Tóm lược về các chức năng quan trọng

Huy Erick

Mục lục 21. Comprehensions trong Python List Comprehensions Cú pháp này cho phép tạo ra một danh sách mới từ một danh sách hiện có hoặc một vòng lặp, kết hợp với các điều kiện...

Mục lục

21. Comprehensions trong Python

List Comprehensions

Cú pháp này cho phép tạo ra một danh sách mới từ một danh sách hiện có hoặc một vòng lặp, kết hợp với các điều kiện đã cho.

a = [0, 1, 2, 3]
b = [i + 1 for i in a]
print(b) 

Output: [1, 2, 3, 4]

Set Comprehension

Cú pháp này cho phép tạo ra một tập hợp mới từ các giá trị của một tập hợp hiện có.

a = {0, 1, 2, 3}
b = {i ** 2 for i in a}
print(b) 

Output: {0, 1, 4, 9}

Dict Comprehension

Cú pháp này cho phép tạo ra một từ điển mới từ các giá trị của một từ điển hiện có.

a = {'Hello':'World', 'First': 1}
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

Các chuỗi ký tự bắt đầu bằng dấu gạch chéo ngược như \n hoặc \t, được sử dụng để 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 \n Ký tự xuống dòng \t Ký tự Tab \ 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 '''

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).

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"
print(a[0:3])
print(a[3:-1]) 

Output: Hel l

Chức năng Case Conversion

Các hàm upper()lower() đượ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()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

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"]
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.

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().

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.

from string import Template
name = 'Scaler'
t = Template('Hey $name!')
t.substitute(name = name) 

Output: 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.
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.
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.
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.
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'dddd-dddd')
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'(dddd)-(dddd)')
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!!")

Output: Error Occurred!!

Traceback dưới dạng chuỗi (String)

Có một hàm trong python được gọi là traceback.format_exc() 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.

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.

  • 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'

Output: 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 "", line 1, in 
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")
logg.warning("Its a Warning")
logg.info("Just an information")

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.

Ví dụ: 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 cho hàm này sẽ là:

mul = lambda a, b: a * b
print(mul(3, 5))

Output: 15

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: if else

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.

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.

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

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()
a = "hello"
b = 5
c = 1

%who

Output: a b c

%%html

    
Name Country Age
Sid India 22
Dave UK 28

Bài viết được dịch từ đây.

Python Cheat Sheet có thể đóng vai trò như một người hướng dẫn giúp bạn tìm hiểu và sử dụng Python một cách dễ dàng hơn.

1