- vừa được xem lúc

Python: Các tính năng vi diệu của Python (P2)

0 0 37

Người đăng: Sang Hà Ngọc

Theo Viblo Asia

Ảnh từ hackermoon.com

6. Có vẻ là “+=” sẽ chạy nhanh hơn “=”.

Để nối các chuỗi trong Python, các toán tử +=+ có thể cho chúng ta kết quả tương tự nhau nhưng với chi phí tính toán khác nhau:

import timeit
import time print(timeit.timeit("s1 = s1 + s2 + s3", setup="s1 = ' ' * 100000; s2 = ' ' * 100000; s3 = ' ' * 100000", number=100))
# 2.3785494769981597
print(timeit.timeit("s1 += s2 + s3", setup="s1 = ' ' * 100000; s2 = ' ' * 100000; s3 = ' ' * 100000", number=100))
#0.018984597001690418 s1 = ' ' * 100000
s2 = ' ' * 100000
s3 = ' ' * 100000
start = time.time()
s1 += s2 + s3
print(time.time()- start)
# 6.651878356933594e-05
start = time.time()
s1 = s1 + s2 + s3
print(time.time()- start)
# 0.00019621849060058594

Trong Python, toán tử += nhanh hơn + khi nối nhiều hơn hai chuỗi. Vì toán tử += thao tác tại chỗ và sẽ tiết kiệm thời gian tạo đối tượng mới hơn với toán tử +. Thoạt nhìn, tính năng này có vẻ kỳ lạ nhưng nó có thể giúp các bạn tăng tốc đáng kể các chương trình, đặc biệt đối với các tình huống xử lý chuỗi phức tạp.

7. ... trong Python

Khi mà các bạn chỉ khai báo Class, Function mà chưa triển khai logic chạy bên trong thì ta cần một placeholder (trình giữ chỗ) để cho chương trình chạy không bị lỗi. Nếu bạn cần một placeholder (trình giữ chỗ) cho một Function hay Class Python, có thể bạn sẽ sử dụng pass:

def my_func(): pass class MyClass(): pass

Nhưng có một cách khác để làm điều này:

def my_func(): ... class MyClass(): ...
# OR
def my_func(): Ellipsis class MyClass(): Ellipsis

Dấu ba chấm hay còn gọi là Ellipsis, cũng có thể gọi là placeholder. Guido van Rossum, cha đẻ của Python, đã làm cho dấu ba chấm trở nên đúng về mặt cú pháp vì “một số người nghĩ rằng nó sẽ dễ thương ”.

Hơn nữa, dấu ba chấm cũng có thể được sử dụng cho Type Hints (gợi ý kiểu) trong Python. Giả sử ta có một ma trận 2x2x2 và cần in ra hàng đầu tiên trong chiều thứ 3 thì ta có thể sử dụng Ellipsis:

# importing numpy
import numpy as np array = np.random.rand(2, 2, 2)
print(array) # [[[0.66181463 0.46356144]
# [0.49064958 0.52855069]] # [[0.50966978 0.47238642]
# [0.35788426 0.11474305]]] for data in array: print(data[0])
# [0.66181463 0.46356144]
# [0.50966978 0.47238642] print(array[..., 0])
print(array[Ellipsis, 0])
# [[0.66181463 0.49064958]
# [0.50966978 0.35788426]]

Type Hints là một cách tuyệt vời để làm rõ các kiểu dữ liệu mà bạn mong đợi trong mã của mình. Nhưng đôi khi, bạn muốn sử dụng gợi ý loại mà không hạn chế hoàn toàn cách người dùng của bạn có thể sử dụng các đối tượng. Ví dụ, có lẽ bạn muốn chỉ định một list chỉ chứa các số nguyên, nhưng số lượng các số nguyên có thể tùy ý. Bạn có thể dùng dấu ba chấm (Ellipsits):

# type_hints.py
tp: tuple[int, ...] # Allowed:
tp = ()
tp = (1,)
tp = (4, 5, 6, 99) # Not allowed:
tp = (1, "a")
tp = [1, 3]

Khi chạy đoạn mã trên với Python thì hoàn toàn bình thường vì Python nó không có kiểm tra các kiểu dữ liệu mà ta đã đặt cho một biến vì vậy để check cái này thì ta sẽ sử dụng một thư viện có tên là mypy. Sau khi cài đặt mypy, ta chỉ cần chạy câu lệnh mypy type_hints.py để kiểm tra tất cả những kiểu dữ liệu mà ta đã đặt cho các biến:

type_hints.py:9: error: Incompatible types in assignment (expression has type "Tuple[int, str]", variable has type "Tuple[int, ...]") [assignment]
type_hints.py:10: error: Incompatible types in assignment (expression has type "List[int]", variable has type "Tuple[int, ...]") [assignment]

về cách sử dụng ... provip trong Python thì các bạn chịu khó tìm hiểu thêm trên google nhé !!!

8. Câu lệnh with trong python

Từ lúc đi làm đến giờ không thấy có có ngôn ngữ lập trình nào có with statement ngoại trừ Python, điều này làm cho câu lệnh with của Python có vẻ cực kỳ kỳ lạ đối với người mới.

with open("test.txt",'w') as f: f.write("Python is writing!!!")

Tóm lại, câu lệnh with là một cú pháp để quản lý ngữ cảnh (context). Khi sử dụng nó, bạn không cần phải viết hàm close() để đóng tệp một cách rõ ràng, vì nó sẽ tự động đóng sau khi sử dụng.

f = open("test.txt",'w')
try: f.write("Python is writing!!!")
except Exception as e: print(f"An error occurred while handling the file: {e}")
finally: f.close()

Ngắn gọn thì có thể giải thích về with như vậy còn để nói chi tiết hơn thì các bạn có thể tìm đọc trong một số quyển sách về python như Python Cookbook, The Python Book, ...

9. * và ** (One asterisk and two asterisks)

Mình thì đã có một bài viết riêng nói về * trong Python, các bạn có thể đọc chi tiết tại link này.

tags: Python, Python Programming, Python cơ bản, Python nâng cao, with statement, ... trong python, ellipsis, python tips, with statement, câu lệnh with, mypy.

Nguồn:

Bình luận

Bài viết tương tự

- vừa được xem lúc

Học Regular Expression và cuộc đời bạn sẽ bớt khổ (Updated v2.2)

. Regular Expression (RegEx) à? Nghe quen quen. . Bạn cần xử lý validate (kiểm tra tính hợp lệ) các trường dữ liệu nhập vào ô Text. .

0 0 109

- vừa được xem lúc

Đề thi interview DevOps ở Châu Âu

Well. Chào mọi người, mình là Rice - một DevOps Engineers ở đâu đó tại Châu Âu.

0 0 88

- vừa được xem lúc

12 best practices với VueJS

Giới thiệu. Xin chào tất cả các bạn, hôm nay mình sẽ giới thiệu với các bạn một số lưu ý khi coding vuejs. Không dài dòng nữa mình bắt đầu luôn nhé. Vì sao cần phải sử dụng :key , vì nó sẽ giúp giữ lại các state của component.

0 0 197

- vừa được xem lúc

Những điều cần lưu ý và sử dụng Hook trong React (Phần 2)

II. UseEffect và điều cần lưu ý . Có hai loại xử lý phổ biến trong các thành phần React: những xử lý phụ không yêu cầu cleanup và những xử lý phụ có cleanup. Hãy xem xét sự khác biệt này chi tiết hơn.

0 0 129

- vừa được xem lúc

[Python] Một số tips khi code (Phần 2)

Hi, trong phần trước mình đã giới thiệu đến các bạn 9 tips khi các bạn code Python. Trong phần này mình sẽ tiếp tục gửi đến các bạn một số tips hữu dụng khác nhé. Let's go. Để reverse một đoạn string, chúng ta dùng var[::-1].

0 0 49

- vừa được xem lúc

Không có gì là miễn phí cả

Mình có cái tật rất xấu. Đấy là hay cố gắng tìm hướng giải quyết cho người khác.

0 0 42