Python thêm vào đối tượng
Một tính năng mới và thú vị sắp có trong Python 3. 7 là lớp dữ liệu. Lớp dữ liệu là lớp thường chứa chủ yếu là dữ liệu, mặc dù thực sự không có bất kỳ hạn chế nào. Nó được tạo bằng trình trang trí 8 mới, như sau Show
Ghi chú. Mã này, cũng như tất cả các ví dụ khác trong hướng dẫn này, sẽ chỉ hoạt động trong Python 3. 7 trở lên Một lớp dữ liệu đi kèm với chức năng cơ bản đã được triển khai. Chẳng hạn, bạn có thể khởi tạo, in và so sánh các thể hiện của lớp dữ liệu ngay lập tức >>>
So sánh điều đó với một lớp học bình thường. Một lớp thông thường tối thiểu sẽ trông giống như thế này
Mặc dù đây không phải là nhiều mã để viết, nhưng bạn đã có thể thấy các dấu hiệu của nỗi đau soạn sẵn. 9 và 0 đều được lặp lại ba lần chỉ để khởi tạo một đối tượng. Hơn nữa, nếu bạn cố gắng sử dụng lớp đơn giản này, bạn sẽ nhận thấy rằng biểu diễn của các đối tượng không mang tính mô tả lắm, và vì lý do nào đó, nữ hoàng trái tim không giống với nữ hoàng trái tim>>>
Có vẻ như các lớp dữ liệu đang giúp chúng tôi đằng sau hậu trường. Theo mặc định, các lớp dữ liệu triển khai phương thức 1 để cung cấp biểu diễn chuỗi đẹp mắt và phương thức 2 có thể thực hiện so sánh đối tượng cơ bản. Để lớp 3 bắt chước lớp dữ liệu ở trên, bạn cũng cần thêm các phương thức này 0Trong hướng dẫn này, bạn sẽ tìm hiểu chính xác những tiện ích mà lớp dữ liệu cung cấp. Ngoài các biểu diễn và so sánh đẹp mắt, bạn sẽ thấy
Chúng ta sẽ sớm tìm hiểu sâu hơn về các tính năng đó của các lớp dữ liệu. Tuy nhiên, bạn có thể nghĩ rằng bạn đã nhìn thấy một cái gì đó như thế này trước đây Tải xuống miễn phí. Nhận một chương mẫu từ Thủ thuật Python. Cuốn sách chỉ cho bạn các phương pháp hay nhất về Python với các ví dụ đơn giản mà bạn có thể áp dụng ngay lập tức để viết mã Pythonic + đẹp hơn Các lựa chọn thay thế cho các lớp dữ liệuĐối với các cấu trúc dữ liệu đơn giản, có lẽ bạn đã sử dụng một 4 hoặc một 5. Bạn có thể đại diện cho thẻ nữ hoàng trái tim theo một trong hai cách sau>>>
Nó hoạt động. Tuy nhiên, nó đặt rất nhiều trách nhiệm lên bạn với tư cách là một lập trình viên
Hơn nữa, sử dụng các cấu trúc này không phải là lý tưởng >>>
Một sự thay thế tốt hơn là 81. Nó từ lâu đã được sử dụng để tạo các cấu trúc dữ liệu nhỏ có thể đọc được. Trên thực tế, chúng ta có thể tạo lại ví dụ về lớp dữ liệu ở trên bằng cách sử dụng một 81 như thế này 8Định nghĩa này của 83 sẽ cho kết quả chính xác giống như ví dụ về 84 của chúng tôi đã làm>>> 5Vậy tại sao lại bận tâm với các lớp dữ liệu? . Đồng thời, 81 có một số tính năng khác không nhất thiết phải được mong muốn. Theo thiết kế, một 81 là một bộ thông thường. Điều này có thể được nhìn thấy trong các so sánh, ví dụ>>> 8Mặc dù điều này có vẻ là một điều tốt, nhưng việc thiếu nhận thức về loại của chính nó có thể dẫn đến các lỗi tinh vi và khó tìm, đặc biệt là vì nó cũng sẽ vui vẻ so sánh hai lớp 81 khác nhau>>> 0 81 cũng đi kèm với một số hạn chế. Chẳng hạn, thật khó để thêm các giá trị mặc định vào một số trường trong 81. Một 81 về bản chất cũng là bất biến. Nghĩa là, giá trị của một 81 không bao giờ có thể thay đổi. Trong một số ứng dụng, đây là một tính năng tuyệt vời, nhưng trong các cài đặt khác, sẽ rất tuyệt nếu có nhiều tính năng linh hoạt hơn>>> 1Các lớp dữ liệu sẽ không thay thế tất cả các cách sử dụng của 81. Chẳng hạn, nếu bạn cần cấu trúc dữ liệu của mình hoạt động giống như một bộ dữ liệu, thì bộ dữ liệu có tên là một sự thay thế tuyệt vờiMột giải pháp thay thế khác, và là một trong những nguồn cảm hứng cho các lớp dữ liệu, là dự án 53. Với 53 đã cài đặt ( 55), bạn có thể viết một lớp thẻ như sau 2Điều này có thể được sử dụng theo cách chính xác giống như các ví dụ về 84 và 83 trước đó. Dự án 53 rất tuyệt và hỗ trợ một số tính năng mà các lớp dữ liệu không có, bao gồm trình chuyển đổi và trình xác thực. Hơn nữa, 53 đã xuất hiện được một thời gian và được hỗ trợ trong Python 2. 7 cũng như Python 3. 4 trở lên. Tuy nhiên, vì 53 không phải là một phần của thư viện tiêu chuẩn, nên nó sẽ thêm một phần phụ thuộc bên ngoài vào các dự án của bạn. Thông qua các lớp dữ liệu, chức năng tương tự sẽ có sẵn ở mọi nơiNgoài 4, 5, 81 và 53, còn có nhiều dự án tương tự khác, bao gồm 85, 86, 87, 88 và 89. Mặc dù các lớp dữ liệu là một giải pháp thay thế mới tuyệt vời, nhưng vẫn có những trường hợp sử dụng mà một trong các biến thể cũ phù hợp hơn. Chẳng hạn, nếu bạn cần khả năng tương thích với một API cụ thể, mong đợi các bộ dữ liệu hoặc cần chức năng không được hỗ trợ trong các lớp dữ liệuLoại bỏ các quảng cáoCác lớp dữ liệu cơ bảnHãy để chúng tôi quay trở lại các lớp dữ liệu. Ví dụ, chúng ta sẽ tạo một lớp 00 sẽ đại diện cho các vị trí địa lý có tên cũng như kinh độ và vĩ độ 3Điều làm cho lớp dữ liệu này là trình trang trí 8 ngay phía trên định nghĩa lớp. Bên dưới dòng 02, bạn chỉ cần liệt kê các trường bạn muốn trong lớp dữ liệu của mình. Ký hiệu 03 được sử dụng cho các trường đang sử dụng một tính năng mới trong Python 3. 6 gọi là chú thích biến. Chúng tôi sẽ sớm nói thêm về ký hiệu này và lý do tại sao chúng tôi chỉ định các loại dữ liệu như 04 và 05Một vài dòng mã đó là tất cả những gì bạn cần. Lớp mới đã sẵn sàng để sử dụng >>> 4Bạn cũng có thể tạo các lớp dữ liệu tương tự như cách các bộ dữ liệu được đặt tên được tạo. Điều sau đây (gần như) tương đương với định nghĩa của 00 ở trên 5Một lớp dữ liệu là một lớp Python thông thường. Điều duy nhất khiến nó khác biệt là nó có các phương thức mô hình dữ liệu cơ bản như 07, 1 và 2 được triển khai cho bạnGiá trị mặc địnhThật dễ dàng để thêm các giá trị mặc định vào các trường của lớp dữ liệu của bạn 6Điều này hoạt động chính xác như thể bạn đã chỉ định các giá trị mặc định trong định nghĩa của phương thức 07 của một lớp thông thường>>> 7Sau này bạn sẽ tìm hiểu về 11, cung cấp một cách cung cấp các giá trị mặc định phức tạp hơnNhập gợi ýCho đến nay, chúng tôi vẫn chưa làm ầm ĩ lên việc các lớp dữ liệu hỗ trợ gõ ra khỏi hộp. Bạn có thể nhận thấy rằng chúng tôi đã xác định các trường bằng gợi ý loại. 12 nói rằng 13 phải là một chuỗi văn bản (loại 04)Trên thực tế, việc thêm một số kiểu gợi ý là bắt buộc khi xác định các trường trong lớp dữ liệu của bạn. Nếu không có gợi ý kiểu, trường sẽ không phải là một phần của lớp dữ liệu. Tuy nhiên, nếu bạn không muốn thêm các loại rõ ràng vào lớp dữ liệu của mình, hãy sử dụng 15 8Mặc dù bạn cần thêm gợi ý kiểu ở một số biểu mẫu khi sử dụng các lớp dữ liệu, nhưng các kiểu này không được thực thi khi chạy. Đoạn mã sau chạy mà không gặp vấn đề gì >>> 9Đây là cách gõ trong Python thường hoạt động. Python đang và sẽ luôn là một ngôn ngữ được gõ động. Để thực sự bắt lỗi loại, các công cụ kiểm tra loại như Mypy có thể được chạy trên mã nguồn của bạn Loại bỏ các quảng cáoThêm phương phápBạn đã biết rằng một lớp dữ liệu chỉ là một lớp thông thường. Điều đó có nghĩa là bạn có thể tự do thêm các phương thức của riêng mình vào một lớp dữ liệu. Ví dụ: chúng ta hãy tính khoảng cách giữa vị trí này với vị trí khác, dọc theo bề mặt Trái đất. Một cách để làm điều này là sử dụng công thức haversine Bạn có thể thêm phương thức 16 vào lớp dữ liệu của mình giống như bạn có thể làm với các lớp thông thường 0Nó hoạt động như bạn mong đợi >>> 1Các lớp dữ liệu linh hoạt hơnĐến đây, bạn đã thấy một số tính năng cơ bản của lớp dữ liệu. nó cung cấp cho bạn một số phương thức tiện lợi và bạn vẫn có thể thêm các giá trị mặc định và các phương thức khác. Bây giờ bạn sẽ tìm hiểu về một số tính năng nâng cao hơn như tham số cho trình trang trí 8 và hàm 18. Cùng với nhau, chúng mang lại cho bạn nhiều quyền kiểm soát hơn khi tạo một lớp dữ liệuHãy để chúng tôi quay lại ví dụ chơi bài mà bạn đã thấy ở phần đầu của hướng dẫn và thêm một lớp chứa một bộ bài trong khi chúng tôi đang ở đó 2Một bộ bài đơn giản chỉ chứa hai lá bài có thể được tạo như thế này >>> 3Giá trị mặc định nâng caoGiả sử bạn muốn cung cấp giá trị mặc định cho 19. Ví dụ, sẽ thuận tiện nếu 20 tạo một bộ bài 52 lá thông thường (tiếng Pháp). Đầu tiên, chỉ định các cấp bậc và bộ quần áo khác nhau. Sau đó, thêm một hàm 21 để tạo danh sách các phiên bản của 22 4Để giải trí, bốn bộ quần áo khác nhau được chỉ định bằng các ký hiệu Unicode của chúng
Để đơn giản hóa việc so sánh các thẻ sau này, các cấp bậc và bộ đồ cũng được liệt kê theo thứ tự thông thường của chúng >>> 5Về lý thuyết, bây giờ bạn có thể sử dụng hàm này để chỉ định giá trị mặc định cho 28 6Đừng làm điều này. Điều này giới thiệu một trong những mẫu chống phổ biến nhất trong Python. sử dụng các đối số mặc định có thể thay đổi. Vấn đề là tất cả các phiên bản của 19 sẽ sử dụng cùng một đối tượng danh sách làm giá trị mặc định của thuộc tính 30. Điều này có nghĩa là nếu, giả sử, một thẻ bị xóa khỏi một 19, thì thẻ đó cũng biến mất khỏi tất cả các phiên bản khác của 19. Trên thực tế, các lớp dữ liệu cố gắng ngăn bạn làm điều này và đoạn mã trên sẽ tăng 33Thay vào đó, các lớp dữ liệu sử dụng thứ gọi là 11 để xử lý các giá trị mặc định có thể thay đổi. Để sử dụng 11 (và nhiều tính năng thú vị khác của các lớp dữ liệu), bạn cần sử dụng trình xác định 18 7Đối số của 11 có thể là bất kỳ tham số 0 nào có thể gọi được. Bây giờ thật dễ dàng để tạo một bộ bài đầy đủ>>> 8Trình xác định 18 được sử dụng để tùy chỉnh từng trường của một lớp dữ liệu riêng lẻ. Bạn sẽ thấy một số ví dụ khác sau. Để tham khảo, đây là các thông số mà 18 hỗ trợ
Trong ví dụ về 00, bạn đã thấy cách thêm các giá trị mặc định đơn giản bằng cách viết 55. Tuy nhiên, nếu bạn cũng muốn tùy chỉnh trường, chẳng hạn để ẩn nó trong 45, bạn cần sử dụng tham số 40. 58. Bạn không được chỉ định cả 40 và 11Tham số 53 không được sử dụng bởi chính các lớp dữ liệu nhưng có sẵn để bạn (hoặc các gói của bên thứ ba) đính kèm thông tin vào các trường. Trong ví dụ về 00, chẳng hạn, bạn có thể chỉ định rằng vĩ độ và kinh độ phải được tính theo độ 9Siêu dữ liệu (và thông tin khác về một trường) có thể được truy xuất bằng cách sử dụng hàm 63 (lưu ý số nhiều s)>>> 0Loại bỏ các quảng cáoBạn cần đại diện?Nhớ lại rằng chúng ta có thể tạo ra bộ bài ngoài không khí mỏng >>> 8Mặc dù biểu diễn này của một 19 là rõ ràng và dễ đọc, nhưng nó cũng rất dài dòng. Tôi đã xóa 48 trong số 52 lá bài trong bộ bài ở đầu ra ở trên. Trên màn hình 80 cột, chỉ cần in toàn bộ 19 chiếm 22 dòng. Hãy để chúng tôi thêm một đại diện ngắn gọn hơn. Nói chung, một đối tượng Python có hai biểu diễn chuỗi khác nhau
Hãy để chúng tôi thực hiện một đại diện thân thiện với người dùng của một 22 2Các lá bài bây giờ trông đẹp hơn nhiều, nhưng bộ bài vẫn dài dòng như ngày nào >>> 3Để chứng minh rằng có thể thêm phương thức 1 của riêng bạn, chúng tôi sẽ vi phạm nguyên tắc rằng phương thức đó phải trả về mã có thể tạo lại một đối tượng. Xét cho cùng, tính thực tế đánh bại sự thuần khiết. Đoạn mã sau thêm một biểu diễn ngắn gọn hơn của 19 4Lưu ý mã xác định 78 trong chuỗi định dạng 79. Điều đó có nghĩa là chúng tôi rõ ràng muốn sử dụng biểu diễn 80 của mỗi 22. Với 1 mới, đại diện của 19 dễ nhìn hơn>>> 5Đây là một đại diện đẹp hơn của bộ bài. Tuy nhiên, nó đi kèm với một chi phí. Bạn không còn có thể tạo lại bộ bài bằng cách thực hiện biểu diễn của nó. Thông thường, tốt hơn hết là bạn nên triển khai biểu diễn tương tự với 73 để thay thếSo sánh thẻTrong nhiều trò chơi bài, các quân bài được so sánh với nhau. Ví dụ, trong một trò chơi đánh lừa thông thường, quân bài cao nhất sẽ ăn thua. Vì nó hiện đang được triển khai, lớp 22 không hỗ trợ kiểu so sánh này>>> 6Tuy nhiên, điều này (dường như) dễ khắc phục 7Trang trí 8 có hai hình thức. Cho đến giờ, bạn đã thấy biểu mẫu đơn giản trong đó 8 được chỉ định mà không có bất kỳ dấu ngoặc đơn và tham số nào. Tuy nhiên, bạn cũng có thể cung cấp tham số cho trình trang trí 88 trong ngoặc đơn. Các tham số sau đây được hỗ trợ
Xem PEP gốc để biết thêm thông tin về từng thông số. Sau khi cài đặt 06, các phiên bản của 22 có thể được so sánh>>> 8Làm thế nào là hai thẻ so sánh mặc dù? Hóa ra các lớp dữ liệu so sánh các đối tượng như thể chúng là các bộ của các trường của chúng. Nói cách khác, quân Hậu cao hơn quân Át vì 08 đứng sau 09 trong bảng chữ cái>>> 9Điều đó không thực sự hiệu quả với chúng tôi. Thay vào đó, chúng ta cần xác định một số loại chỉ mục sắp xếp sử dụng thứ tự của 10 và 11. Một cái gì đó như thế này>>> 00Để 22 sử dụng chỉ số sắp xếp này để so sánh, chúng ta cần thêm trường 13 vào lớp. Tuy nhiên, trường này phải được tính tự động từ các trường khác 14 và 15. Đây chính xác là những gì mà phương pháp đặc biệt 16 dành cho. Nó cho phép xử lý đặc biệt sau khi phương thức 07 thông thường được gọi 01Lưu ý rằng 13 được thêm vào làm trường đầu tiên của lớp. Bằng cách đó, việc so sánh được thực hiện đầu tiên bằng cách sử dụng 13 và chỉ khi có các ràng buộc thì các trường khác mới được sử dụng. Sử dụng 18, bạn cũng phải chỉ định rằng không nên bao gồm 13 làm tham số trong phương thức 07 (vì nó được tính từ các trường 14 và 15). Để tránh gây nhầm lẫn cho người dùng về chi tiết triển khai này, có lẽ cũng nên xóa 13 khỏi 45 của lớpCuối cùng, con át chủ bài cao >>> 02Bây giờ bạn có thể dễ dàng tạo một bộ bài được sắp xếp >>> 03Hoặc, nếu bạn không quan tâm đến việc sắp xếp, đây là cách bạn rút ngẫu nhiên 10 lá bài >>> 04Tất nhiên, bạn không cần 06 cho điều đó…Loại bỏ các quảng cáoCác lớp dữ liệu bất biếnMột trong những tính năng xác định của 81 mà bạn đã thấy trước đó là nó không thay đổi. Đó là, giá trị của các lĩnh vực của nó có thể không bao giờ thay đổi. Đối với nhiều loại lớp dữ liệu, đây là một ý tưởng tuyệt vời. Để làm cho một lớp dữ liệu trở nên bất biến, hãy đặt 29 khi bạn tạo nó. Ví dụ: sau đây là phiên bản bất biến của lớp 00 mà bạn đã thấy trước đó 05Trong lớp dữ liệu cố định, bạn không thể gán giá trị cho các trường sau khi tạo >>> 06Mặc dù vậy, hãy lưu ý rằng nếu lớp dữ liệu của bạn chứa các trường có thể thay đổi, những trường đó vẫn có thể thay đổi. Điều này đúng với tất cả các cấu trúc dữ liệu lồng nhau trong Python (xem video này để biết thêm thông tin) 07Mặc dù cả 31 và 32 đều không thay đổi, nhưng danh sách chứa 33 thì không. Do đó, bạn vẫn có thể thay đổi các thẻ trong bộ bài>>> 08Để tránh điều này, hãy đảm bảo rằng tất cả các trường của lớp dữ liệu không thay đổi đều sử dụng các loại không thay đổi (nhưng hãy nhớ rằng các loại không được thực thi trong thời gian chạy). 32 nên được triển khai bằng cách sử dụng Tuple thay vì danh sáchDi sảnBạn có thể phân lớp các lớp dữ liệu khá tự do. Ví dụ: chúng tôi sẽ mở rộng ví dụ 00 của mình với trường 36 và sử dụng trường này để ghi chữ hoa 09Trong ví dụ đơn giản này, mọi thứ hoạt động trơn tru >>> 0Trường 36 của 38 được thêm vào sau ba trường ban đầu trong 00. Mọi thứ trở nên phức tạp hơn một chút nếu bất kỳ trường nào trong lớp cơ sở có giá trị mặc định 1Mã này sẽ ngay lập tức gặp sự cố với một 40 phàn nàn rằng "đối số không mặc định 'quốc gia' theo sau đối số mặc định. ” Vấn đề là trường 36 mới của chúng tôi không có giá trị mặc định, trong khi trường 42 và 43 có giá trị mặc định. Lớp dữ liệu sẽ cố gắng viết một phương thức 07 với chữ ký sau 2Tuy nhiên, đây không phải là Python hợp lệ. Nếu một tham số có giá trị mặc định thì tất cả các tham số sau cũng phải có giá trị mặc định. Nói cách khác, nếu một trường trong lớp cơ sở có giá trị mặc định, thì tất cả các trường mới được thêm vào trong lớp con cũng phải có giá trị mặc định Một điều khác cần lưu ý là cách các trường được sắp xếp trong một lớp con. Bắt đầu với lớp cơ sở, các trường được sắp xếp theo thứ tự mà chúng được xác định đầu tiên. Nếu một trường được xác định lại trong một lớp con, thứ tự của nó không thay đổi. Ví dụ: nếu bạn xác định 00 và 38 như sau 3Khi đó thứ tự của các trường trong 38 vẫn sẽ là 13, 42, 43, 36. Tuy nhiên, giá trị mặc định của 43 sẽ là 53>>> 4Loại bỏ các quảng cáoTối ưu hóa các lớp dữ liệuTôi sẽ kết thúc hướng dẫn này bằng một vài từ về máy đánh bạc. Các khe cắm có thể được sử dụng để làm cho các lớp nhanh hơn và sử dụng ít bộ nhớ hơn. Các lớp dữ liệu không có cú pháp rõ ràng để làm việc với các vị trí, nhưng cách thông thường để tạo các vị trí cũng phù hợp với các lớp dữ liệu. (Họ thực sự chỉ là những lớp học thông thường. ) 5Về cơ bản, các vị trí được xác định bằng cách sử dụng 54 để liệt kê các biến trên một lớp. Các biến hoặc thuộc tính không có trong 54 có thể không được xác định. Hơn nữa, một lớp vị trí có thể không có giá trị mặc địnhLợi ích của việc thêm các hạn chế như vậy là có thể thực hiện một số tối ưu hóa nhất định. Chẳng hạn, các lớp vị trí chiếm ít bộ nhớ hơn, có thể được đo bằng Pympler >>> 6Tương tự, các lớp vị trí thường hoạt động nhanh hơn với. Ví dụ sau đo tốc độ truy cập thuộc tính trên lớp dữ liệu vị trí và lớp dữ liệu thông thường bằng cách sử dụng timeit từ thư viện chuẩn >>> 7Trong ví dụ cụ thể này, lớp vị trí nhanh hơn khoảng 35% Kết luận và đọc thêmCác lớp dữ liệu là một trong những tính năng mới của Python 3. 7. Với các lớp dữ liệu, bạn không cần phải viết mã soạn sẵn để khởi tạo, biểu diễn và so sánh phù hợp cho các đối tượng của mình Bạn đã thấy cách định nghĩa các lớp dữ liệu của riêng mình, cũng như
Nếu bạn muốn đi sâu vào tất cả các chi tiết của các lớp dữ liệu, hãy xem PEP 557 cũng như các cuộc thảo luận trong repo GitHub gốc Ngoài ra, buổi nói chuyện PyCon 2018 của Raymond Hettinger Dataclasses. Trình tạo mã để kết thúc tất cả các trình tạo mã rất đáng xem Nếu bạn chưa có Python 3. 7, cũng có một backport lớp dữ liệu cho Python 3. 6. Và bây giờ, hãy tiếp tục và viết ít mã hơn Đánh dấu là đã hoàn thành Xem ngay Hướng dẫn này có một khóa học video liên quan do nhóm Real Python tạo. Xem nó cùng với hướng dẫn bằng văn bản để hiểu sâu hơn. Sử dụng các lớp dữ liệu trong Python 🐍 Thủ thuật Python 💌 Nhận một Thủ thuật Python ngắn và hấp dẫn được gửi đến hộp thư đến của bạn vài ngày một lần. Không có thư rác bao giờ. Hủy đăng ký bất cứ lúc nào. Được quản lý bởi nhóm Real Python Gửi cho tôi thủ thuật Python » Giới thiệu về Geir Arne Hjelle Geir Arne là một Pythonista cuồng nhiệt và là thành viên của nhóm hướng dẫn Real Python » Thông tin thêm về Geir ArneMỗi hướng dẫn tại Real Python được tạo bởi một nhóm các nhà phát triển để nó đáp ứng các tiêu chuẩn chất lượng cao của chúng tôi. Các thành viên trong nhóm đã làm việc trong hướng dẫn này là Aldren Đan Joanna Bậc thầy Kỹ năng Python trong thế giới thực Với quyền truy cập không giới hạn vào Python thực Tham gia với chúng tôi và có quyền truy cập vào hàng nghìn hướng dẫn, khóa học video thực hành và cộng đồng các Pythonistas chuyên gia Nâng cao kỹ năng Python của bạn » Bậc thầy Kỹ năng Python trong thế giới thực Tham gia với chúng tôi và có quyền truy cập vào hàng ngàn hướng dẫn, khóa học video thực hành và cộng đồng Pythonistas chuyên gia Nâng cao kỹ năng Python của bạn » Bạn nghĩ sao? Đánh giá bài viết này Tweet Chia sẻ Chia sẻ EmailBài học số 1 hoặc điều yêu thích mà bạn đã học được là gì? Mẹo bình luận. Những nhận xét hữu ích nhất là những nhận xét được viết với mục đích học hỏi hoặc giúp đỡ các sinh viên khác. Nhận các mẹo để đặt câu hỏi hay và nhận câu trả lời cho các câu hỏi phổ biến trong cổng thông tin hỗ trợ của chúng tôi |