6. Có vẻ là “+=” sẽ chạy nhanh hơn “=”.
Để nối các chuỗi trong Python, các toán tử +=
và +
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: