9 TÍNH NĂNG PYTHON ĐÁNG KINH NGẠC MÀ BẠN CHƯA SỬ DỤNG ĐỦ MỨC

Đơn giản và linh hoạt, Python đã trở thành một lựa chọn yêu thích của các lập trình viên trên toàn thế giới. Với hơn 10 triệu lập trình viên sử dụng hàng ngày cho mọi thứ từ phát triển web, học máy đến lập trình mạng, Python chứa đựng nhiều tính năng mạnh mẽ. Tuy nhiên, có thể nhiều người trong chúng ta chưa tận dụng hết tiềm năng của những tính năng này. Trong bài blog này, tôi sẽ giới thiệu cho bạn một số tính năng tuyệt vời của Python mà có thể bạn chưa sử dụng đầy đủ.

1. MODULE PATHLIB

Chuyển đổi các đường dẫn tệp rối rắm của bạn thành các thao tác đối tượng mượt mà.

Module pathlib trong Python cung cấp một cách tiếp cận hướng đối tượng để xử lý các đường dẫn tệp. Nó cung cấp một cách dễ hiểu và dễ đọc hơn để làm việc với đường dẫn tệp so với các phương pháp truyền thống như os.path.

Với pathlib, các đường dẫn được coi là các đối tượng, làm cho việc thực hiện các thao tác như kết nối các đường dẫn, kiểm tra sự tồn tại của tệp, đọc/ghi tệp, và nhiều hơn nữa trở nên dễ dàng hơn.

from pathlib import Path

# Create a Path object

path = Path('/path/to/directory')

# Access parts of the path

print(path[.]name) # 'directory'

print(path[.]parent) # '/path/to'

print(path[.]suffix) # ''

# Join paths

path = Path('/path/to')

new_path = path / 'directory' / 'file.txt'

# Checking if path exits

if path.exists():

print("The file exists")

else:

print("The file does not exist")

# Reading from a file

path = Path('/path/to/file.txt')

content = path.read_text()

print(content)

# Listing Directory Contents

for file in path.iterdir():

print(file)

2. DATACLASS

Để Python xử lý công việc nặng nhọc còn bạn tập trung vào dữ liệu.

Module dataclasses trong Python, được giới thiệu trong Python 3.7, cung cấp một decorator (@dataclass) tự động tạo ra các phương thức đặc biệt như __init__(), __repr__(), __eq__() và nhiều phương thức khác cho các lớp của bạn. Nó giúp giảm thiểu code lặp lại khi tạo các lớp chủ yếu để lưu trữ dữ liệu.

dataclasses giúp giảm bớt sự cần thiết phải viết code thừa trong các lớp liên quan đến dữ liệu, cho phép các lập trình viên tập trung vào logic thay vì phải viết code lặp lại.

from dataclasses import dataclass

@dataclass

class Product:

name: str

price: float

quantity: int = 0

category: str = "General"

# Method to restock the product

def restock(self, amount: int) -> None:

self.quantity += amount

print(f"Restocked {amount} units of {self[.]name}. Total now: {self.quantity}")

# Method to sell the product

def sell(self, amount: int) -> None:

if self.quantity >= amount:

self.quantity -= amount

print(f"Sold {amount} units of {self[.]name}. Remaining: {self[.]quantity}")

else:

print(f"Not enough stock to sell {amount} units. Only {self[.]quantity} available.")

# Method to display product info

def display_info(self) -> None:

print(f"Product: {self[.]name}")

print(f"Category: {self.category}")

print(f"Price: ${self.price}")

print(f"Stock: {self.quantity} units")

# Example usage

product = Product(name="Laptop", price=999.99, quantity=5, category="Electronics")

# Restocking the product

product.restock(10)

# Selling the product

product.sell(3)

# Displaying product information

product.display_info()

3. TOÁN TỬ WALRUS

Toán tử walrus (:=) là một phép toán gán được giới thiệu trong Python 3.8. Nó cho phép bạn gán giá trị cho các biến như một phần của biểu thức. Trước khi có sự xuất hiện của toán tử này, phép gán chỉ có thể được thực hiện trong các câu lệnh riêng biệt, nhưng toán tử walrus cho phép phép gán nằm trong các biểu thức như vòng lặp, điều kiện và gọi hàm.

while (user_input := input("Enter a valid string (non-empty): ")) and len(user_input) == 0:

print("Invalid input, try again.")

print(f"Valid input received: {user_input}")

4. GETTER & SETTERS

Các "người bảo vệ im lặng" của code của bạn, bảo vệ dữ liệu một cách khéo léo.

Getter và setter là các phương thức dùng để lấy (truy xuất) và gán (thay đổi) giá trị của các thuộc tính private trong một lớp. Chúng kiểm soát quyền truy cập vào trạng thái nội bộ của đối tượng, đảm bảo các quy tắc và xác minh trong khi giữ dữ liệu thực tế bị ẩn.

Trong Python, decorator @property tạo ra một cách Pythonic để triển khai getter và setter mà không cần gọi chúng như các phương thức thông thường.

class BankAccount:

def __init__(self, balance):

self._balance = None # private attribute

self.balance = balance # invoke setter

@property

def balance(self):

return self._balance

@balance.setter

def balance(self, value):

if value < 0:

raise ValueError("Balance cannot be negative!")

self._balance = value

# Usage

account = BankAccount(100)

print(account.balance) # 100

account.balance = -50 # Raises ValueError: Balance cannot be negative!

5. MEMORY SLOTS

Trong Python, tính năng __slots__ được sử dụng để giảm mức độ sử dụng bộ nhớ bằng cách giới hạn các thuộc tính mà một đối tượng có thể có. Thông thường, Python sử dụng một từ điển động (__dict__) để lưu trữ các thuộc tính của đối tượng, điều này cho phép linh hoạt nhưng lại tiêu tốn nhiều bộ nhớ.

Bằng cách khai báo __slots__, bạn chỉ định một tập hợp các thuộc tính cố định, loại bỏ việc sử dụng từ điển __dict__ và giảm tải bộ nhớ.

class User:

__slots__ = ['name', 'email'] # Declare fixed attributes

def __init__(self, name, email):

self[.]name = name

self[.]email = email

# Creating a million users with `__slots__`

users = [User(f"User{i}", f"user{i}@example[.]com") for i in range(1000000)]

6. FUNCTOOLS.LRU_CACHE

Trong Python, functools.lru_cache là một decorator cung cấp cách đơn giản nhưng hiệu quả để thêm cơ chế ghi nhớ (memoization) vào một hàm. Memoization là kỹ thuật được sử dụng để tăng tốc các chương trình bằng cách lưu trữ kết quả của các phép gọi hàm tốn kém và trả về kết quả đã lưu trữ khi cùng

from functools import lru_cache

@lru_cache(maxsize=None) # maxsize=None means the cache can grow indefinitely

def fibonacci(n):

if n < 2:

return n

return fibonacci(n-1) + fibonacci(n-2)

# Calculate Fibonacci numbers

print(fibonacci(10)) # Output: 55

print(fibonacci(15)) # Output: 610

7. CALLABLE

Trong Python, __call__ là một phương thức đặc biệt cho phép một đối tượng của lớp hành xử như một hàm. Khi bạn định nghĩa __call__ trong một lớp, bạn có thể gọi đối tượng đó như một hàm, truyền tham số và nhận kết quả trả về.

class RateLimiter:

def __init__(self, limit):

self.limit = limit

def is_allowed(self, requests):

return requests <= self.limit

limiter = RateLimiter(100)

print(limiter.is_allowed(80)) # True

# Using __call__

class RateLimiter:

def __init__(self, limit):

self.limit = limit

def __call__(self, requests):

return requests <= self.limit

limiter = RateLimiter(100)

print(limiter(80)) # True

print(limiter(120)) # False

8. GENERATORS & YIELD

Generators là một loại hàm đặc biệt trong Python trả về các iterator sử dụng từ khóa yield. Thay vì trả về tất cả các kết quả cùng một lúc, một generator trả về các giá trị từng bước một, cho phép bạn lặp qua dữ liệu một cách lười biếng.

def process_logs(filename):

with open(filename) as file:

for line in file:

if "ERROR" in line:

yield line

# Using a generator to process logs lazily

for log in process_logs("server.log"):

print(log)

9. SUPPRESS

Suppress là một context manager trong Python được sử dụng để bỏ qua các ngoại lệ nhất định mà bạn muốn bỏ qua trong quá trình thực thi. Thay vì bao bọc code của bạn với nhiều khối try-except, bạn có thể sử dụng suppress để dễ dàng bỏ qua các lỗi nhất định.

from contextlib import suppress

import os

# Suppress the FileNotFoundError if the file doesn't exist

with suppress(FileNotFoundError):

os.remove("non_existent_file.txt")

Hy vọng những kiến thức này bổ ích với bạn!

Tác giả: Abhay Parashar - Cyber Threat Intelligence | OSINT Researcher | Dark Web | Python | Tech Writer

Nguồn: Medium

#sinhvienit_share

Reply to this note

Please Login to reply.

Discussion

No replies yet.