Blogger Joaquin Treviño, JetBrains chuyên về các vấn đề liên quan đến Python. Dưới đây là một số mẹo, thủ thuật khi làm việc với Python 3.8 hỗ trợ trong PyCharm được chia sẻ trên blog của JetBrains.
Một số tips hay về Python 3.8 hỗ trợ trong PyCharm
Tham số chỉ vị trí (Positional-only parameters)
Định nghĩa hàm là một yu tố quan trọng khi thiết kế thư viện và API cho người dùng sử dụng. Các định nghĩa này càng rõ ràng thì chúng càng dễ thực hiện. Một cách để đạt được tính rõ ràng như vậy là bằng cách hàm có thể được gọi với các đối số của nó. Hiện tại, Python chỉ có tùy chọn để xác định các đối số là vị trí, từ khóa hoặc chỉ từ khóa, nhưng với phiên bản mới này, giờ đây chúng ta có một cách khác để xác định chúng bằng cách sử dụng các tham số chỉ vị trí.
Để sử dụng tính năng này, chỉ cần đặt các đối số trong định nghĩa hàm của bạn và viết dấu gạch chéo lên` / `sau đối số chỉ vị trí cuối cùng mà bạn muốn khai báo. Điều này gần giống với cú pháp chỉ đối số từ khóa, nhưng thay vì đặt các đối số sau dấu hoa thị` * `, bạn thực hiện nó trước dấu gạch chéo` /`.
Hãy cùng làm một ví dụ. Giả sử, bạn có một hàm trong thư viện của mình chọn một giá trị ngẫu nhiên từ các giá trị khác nhau được chuyển làm đối số. Các giá trị như vậy có thể được chuyển vào bất kỳ vị trí nào và hàm sẽ trả về cho bạn một lựa chọn ngẫu nhiên. Ý nghĩa ngữ nghĩa được giữ nguyên, bất kể thứ tự của các giá trị trong lệnh gọi hàm. Theo thiết kế, bạn quyết định rằng các đối số đó chỉ nên ở dạng vị trí:
Vị trí-chỉ-ngẫu nhiên (positional-only-random)
Bằng cách làm này, bạn đảm bảo rằng người dùng thư viện của bạn sẽ không thể gọi hàm của bạn bằng các từ khóa của đối số. Trước đây, nếu bạn đổi tên các đối số của hàm cho mục đích tái cấu trúc (hoặc bất kỳ lý do nào khác), mã của người dùng trong thư viện của bạn sẽ gặp rủi ro nếu họ thực hiện một lệnh gọi hàm với các đối số từ khóa (ví dụ: `select_random ( a = 3, b = 89, c = 54) ‘). Một trong những lợi thế của tham số chỉ vị trí là nếu bạn quyết định thay đổi tên biến trong định nghĩa hàm, người dùng thư viện của bạn sẽ không bị ảnh hưởng vì không có phụ thuộc từ khóa trong các lệnh gọi hàm mà họ thực hiện để bắt đầu.
Gán biểu thức trong Python 3.8
Một cách mới để gán giá trị cho các biến có sẵn với phiên bản Python mới nhất này. Bây giờ, các biểu thức cũng có thể gán giá trị như một phần của khai báo, điều này loại bỏ sự cần thiết phải khởi tạo trước các biến. Do đó, bạn có thể làm cho mã của mình bớt dài dòng và thêm gọn gàng, vì có thể khai báo trong các biểu thức trong cùng một dòng.
Cú pháp để khai báo một biến bao gồm toán tử hải mã `: =` bên trong một biểu thức được bao bởi dấu ngoặc đơn. Một lưu ý quan trọng là toán tử hải mã khác với toán tử bằng. Ví dụ: các phép gán được phân tách bằng dấu phẩy với toán tử bằng không giống với các phép gán bởi toán tử hải mã.
Một ví dụ về cách sử dụng như vậy có thể là vòng lặp while với một biến điều khiển. Khi bạn sử dụng tính năng này, biểu thức điều khiển của vòng lặp cũng sẽ giữ định nghĩa biến và phép gán lại.
Trong ví dụ trước, vòng lặp while ‘before’ có một phép gán biến trước nó và cả bên trong mã thực thi của nó. Vòng lặp ‘after’ có phép gán bên trong định nghĩa câu lệnh điều khiển của nó bằng cách sử dụng một biểu thức gán.
Chú thích cuối cùng và decorator cuối cùng
Khi bạn thiết kế một lớp với Python 3.8 hỗ trợ trong PyCharm, bạn phải đảm bảo rằng các phương thức của bạn được sử dụng đúng cách. Với phiên bản mới này, trình trang trí cuối cùng và chú thích kiểu `Cuối cùng` được giới thiệu để giúp hạn chế việc sử dụng các phương thức, lớp và biến. Nếu cần, tính năng này sẽ cho phép bạn khai báo rằng một phương thức không được ghi đè, không nên phân lớp một lớp hoặc không nên gán lại một biến hoặc thuộc tính.
Trình decorator cuối cùng cấm bất kỳ lớp nào được decorator bằng `@ final` không được xếp vào lớp con và bất kỳ phương thức nào được trang trí bằng` @ cuối cùng` không được ghi đè trong lớp con. Giả sử bạn có một lớp khai báo một phương thức và phương thức đó đang được sử dụng bên trong lớp tại các điểm khác nhau. Nếu người dùng sửa đổi phương thức đó bằng cách ghi đè nó trong khi phân lớp con, sẽ có những rủi ro rằng hành vi của lớp cơ sở có thể thay đổi hoặc gặp lỗi. Để tránh điều này, bạn có thể sử dụng trình trang trí cuối cùng để ngăn người dùng ghi đè một lớp như vậy.
Giả sử bạn có một lớp trình tạo chữ ký như sau:
Khi được khởi tạo, chữ ký được tạo thông qua phương thức `create_signature` được gọi trong phương thức khởi tạo `__init__`. Tùy thuộc vào thiết kế lớp của bạn, bạn có thể chọn bảo vệ phương thức `create_signature` của mình bằng trình trang trí cuối cùng để nó không bị ghi đè nếu được phân lớp. Với trình trang trí cuối cùng, bạn đảm bảo rằng bất kỳ phương thức nào khác phụ thuộc vào phương thức này bên trong lớp sẽ không bị ảnh hưởng bởi ghi đè phương thức. Trong trường hợp này, phương thức khởi tạo `__init__` đang sử dụng phương thức` create_signature`. Bằng cách sử dụng trình trang trí cuối cùng, bạn đảm bảo rằng việc khởi tạo lớp sẽ không bị ảnh hưởng bởi bất kỳ thay đổi nào có thể được đưa vào bởi lớp con.
Một điều cần lưu ý nữa là trong ví dụ này, chúng tôi sử dụng thuộc tính `Final` với thuộc tính` ENCODER`. Thuộc tính lớp này chứa kiểu mã hóa chuỗi được sử dụng trong phương thức `create_signature`. Theo thiết kế lớp, chúng tôi chọn sử dụng thuộc tính `Final` vì chúng tôi sử dụng giá trị đó trong các phương thức của lớp và chúng tôi không muốn nó bị ghi đè vì điều đó sẽ thay đổi hành vi của các phương thức.
Dấu bằng trong chuỗi f
Định dạng chuỗi làm cho mã ngắn gọn hơn, dễ đọc hơn và ít bị lỗi hơn khi hiển thị các giá trị. Giờ đây, tên và giá trị của biến có thể cùng tồn tại trong ngữ cảnh chuỗi với việc giới thiệu dấu bằng trong chuỗi f.
Để tận dụng tính năng mới này của Python 3.8, hãy nhập chuỗi f của bạn như sau: `f ‘{expr =}’` trong đó `expr` là biến mà bạn muốn hiển thị. Bằng cách này, bạn có thể tạo một chuỗi sẽ hiển thị cả biểu thức của bạn và đầu ra của nó. Tính năng này hữu ích khi bạn muốn ghi các giá trị biến vào log của mình.
Nguồn: jetbrains blog
ViHoth Corporation
Đại lý phân phối ủy quyền của JetBrains tại Việt Nam