Review Kho lưu trữ python

Mẹo Hướng dẫn Kho tàng trữ python Mới Nhất

Lê Minh Long đang tìm kiếm từ khóa Kho tàng trữ python được Update vào lúc : 2022-12-25 02:56:04 . Với phương châm chia sẻ Bí kíp về trong nội dung bài viết một cách Chi Tiết 2022. Nếu sau khi đọc tài liệu vẫn ko hiểu thì hoàn toàn có thể lại phản hồi ở cuối bài để Tác giả lý giải và hướng dẫn lại nha.

“Cấu trúc” nghĩa là những quyết định bạn đưa ra liên quan đến cách dự án công trình bất Động sản của bạn đáp ứng tốt nhất tiềm năng của nó. Chúng ta cần xem xét cách tận dụng tốt nhất những tính năng của Python để tạo mã rõ ràng, hiệu suất cao. Về mặt thực tế, “cấu trúc” nghĩa là tạo mã sạch có logic và những phần phụ thuộc rõ ràng cũng như cách những tệp và thư mục được tổ chức trong khối mạng lưới hệ thống tệp

Nội dung chính Show
    Cấu trúc của Kho tàng trữ¶Nó quan trọng. ¶Kho tàng trữ mẫu¶Mô-đun thực tế¶Giấy phép¶Cài đặt. py¶Hồ sơ yêu cầu¶Tài liệu¶Bộ kiểm tra¶Về ứng dụng Django¶Cấu trúc mã là chìa khóa¶Lập trình hướng đối tượng¶Đồ trang trí¶Trình quản lý ngữ cảnh¶Nhập động¶Các loại hoàn toàn có thể thay đổi và không thể thay đổi¶

Những hiệu suất cao nào nên đi vào những mô-đun nào?

Trong phần này, tất cả chúng ta xem xét kỹ hơn những mô-đun của Python và những khối mạng lưới hệ thống nhập vì chúng là những yếu tố trung tâm để thực thi cấu trúc trong dự án công trình bất Động sản của bạn. Sau đó, chúng tôi thảo luận về những quan điểm rất khác nhau về cách xây dựng mã hoàn toàn có thể được mở rộng và kiểm tra một cách đáng tin cậy

Cấu trúc của Kho tàng trữ¶

Nó quan trọng. ¶

Giống như Kiểu mã, Thiết kế API và Tự động hóa là vấn đề thiết yếu cho một chu kỳ luân hồi phát triển lành mạnh. Cấu trúc kho tàng trữ là một phần quan trọng trong kiến ​​trúc dự án công trình bất Động sản của bạn

Khi một người tiêu dùng hoặc cộng tác viên tiềm năng truy cập vào trang của kho tàng trữ của bạn, họ sẽ thấy một số trong những điều

    Tên dự ánmô tả dự ánTập tin Bunch O'

Chỉ khi họ cuộn xuống dưới màn hình hiển thị đầu tiên thì người tiêu dùng mới thấy README của dự án công trình bất Động sản của bạn

Nếu repo của bạn là một đống tệp khổng lồ hoặc một mớ hỗn độn những thư mục, họ hoàn toàn có thể tìm ở nơi khác trước đây khi đọc tài liệu đẹp đẽ của bạn

Ăn mặc cho việc làm bạn muốn, không phải việc làm bạn có

Tất nhiên, ấn tượng đầu tiên không phải là tất cả. Bạn và đồng nghiệp của tớ sẽ dành vô số thời gian thao tác với kho tàng trữ này, ở đầu cuối sẽ trở nên quen thuộc với mọi ngóc ngách. Bố cục là quan trọng

Kho tàng trữ mẫu¶

tl;dr. Đây là những gì Kenneth Reitz đề xuất vào năm 2013

Kho tàng trữ này còn có sẵn trên GitHub

README.rst LICENSE setup.py requirements.txt sample/__init__.py sample/core.py sample/helpers.py docs/conf.py docs/index.rst tests/test_basic.py tests/test_advanced.py

Hãy đi vào một số trong những rõ ràng rõ ràng

Mô-đun thực tế¶

Địa điểm./sample.py 9 hoặc ./test_sample.py 0Mục đíchMã quan tâm

Gói mô-đun của bạn là trọng tâm cốt lõi của kho tàng trữ. Nó tránh việc được giấu đi

./sample/

Nếu mô-đun của bạn chỉ gồm có một tệp duy nhất, bạn hoàn toàn có thể đặt nó trực tiếp vào thư mục gốc của kho tàng trữ của tớ

./sample.py

Thư viện của bạn không thuộc thư mục con src hoặc python mơ hồ

Giấy phép¶

Địa điểm./test_sample.py 1Mục đích Xây dựng luật

Đây được cho là phần quan trọng nhất trong kho tàng trữ của bạn, ngoài bản thân mã nguồn. Toàn bộ văn bản giấy phép và khiếu nại bản quyền phải tồn tại trong tệp này

Nếu bạn không chắc mình nên sử dụng giấy phép nào cho dự án công trình bất Động sản của tớ, hãy xem chọnalicense. com

Tất nhiên, bạn cũng hoàn toàn có thể tự do xuất bản mã mà không cần giấy phép, nhưng điều này sẽ ngăn nhiều người hoàn toàn có thể sử dụng hoặc đóng góp cho mã của bạn

Cài đặt. py¶

Địa điểm./test_sample.py 2Mục đích Quản lý gói hàng và phân phối

Nếu gói mô-đun của bạn nằm ở thư mục gốc của kho tàng trữ, thì rõ ràng gói này cũng phải ở thư mục gốc

Hồ sơ yêu cầu¶

Vị trí./test_sample.py 3Mục đích Phụ thuộc phát triển

Tệp yêu cầu pip phải được đặt ở thư mục gốc của kho tàng trữ. Nó nên chỉ có thể định những phụ thuộc thiết yếu để đóng góp cho dự án công trình bất Động sản. thử nghiệm, xây dựng và tạo tài liệu

Nếu dự án công trình bất Động sản của bạn không còn phụ thuộc phát triển hoặc nếu bạn muốn thiết lập môi trường tự nhiên thiên nhiên phát triển qua

./test_sample.py 4, thì tệp này hoàn toàn có thể không thiết yếu

Tài liệu¶

Vị trí./test_sample.py 5Mục đích Tài liệu tham khảo gói

Có rất ít nguyên do để điều này tồn tại ở nơi khác

Bộ kiểm tra¶

Để được tư vấn về cách viết bài kiểm tra của bạn, hãy xem Kiểm tra mã của bạn .

Địa điểm./test_sample.py 6 hoặc ./test_sample.py 7Mục đíchTích hợp gói và kiểm tra đơn vị

Khi mới khởi đầu, một bộ thử nghiệm nhỏ thường sẽ tồn tại trong một tệp duy nhất

./test_sample.py

Khi bộ thử nghiệm phát triển, bạn hoàn toàn có thể di tán những thử nghiệm của tớ vào một thư mục, như vậy

./sample.py 3

Rõ ràng, những mô-đun thử nghiệm này phải nhập mô-đun đã đóng gói của bạn để kiểm tra nó. Bạn hoàn toàn có thể làm điều này một vài cách

    Yêu cầu gói được setup trong gói trang webSử dụng sửa đổi đường dẫn đơn giản (nhưng rõ ràng) để xử lý và xử lý gói đúng cách

Tôi đánh giá cao cái sau. Việc yêu cầu nhà phát triển chạy

./test_sample.py 8 để kiểm tra cơ sở mã thay đổi tích cực cũng yêu cầu họ phải thiết lập môi trường tự nhiên thiên nhiên khác lạ cho từng phiên bản của cơ sở mã

Để đáp ứng ngữ cảnh nhập cho những bài kiểm tra riêng lẻ, hãy tạo tệp

./test_sample.py 9

./sample.py 6

Sau đó, trong những mô-đun thử nghiệm riêng lẻ, hãy nhập mô-đun như vậy

./sample.py 7

Điều này sẽ luôn hoạt động và sinh hoạt giải trí như mong đợi, bất kể phương pháp setup

Một số người sẽ xác định rằng bạn nên phân phối những bài kiểm tra của tớ trong chính mô-đun của tớ – tôi khước từ. Nó thường làm tăng độ phức tạp cho những người dân tiêu dùng của bạn;

Makefile¶

Vị trí./sample.py 30Mục đíchNhiệm vụ quản lý chung

Nếu bạn xem hầu hết những dự án công trình bất Động sản của tôi hoặc bất kỳ dự án công trình bất Động sản Pocoo nào, bạn sẽ nhận thấy một Makefile nằm xung quanh. Tại sao?

Makefile mẫu

./sample.py 9

Các tập lệnh quản lý chung khác (e. g.

./sample.py 31 hoặc ./sample.py 32) cũng thuộc thư mục gốc của kho tàng trữ

Về ứng dụng Django¶

Tôi đã nhận thấy một xu hướng mới trong những ứng dụng Django Tính từ lúc lúc phát hành Django 1. 4. Nhiều nhà phát triển đang cấu trúc kho tàng trữ của tớ kém do bộ sưu tập ứng dụng đi kèm mới

Thế nào?

./test_sample.py 2

Cấu trúc kho tàng trữ kết quả trông như vậy này

./test_sample.py 3

Đừng làm điều này

Các đường dẫn lặp đi lặp lại gây nhầm lẫn cho tất cả công cụ và nhà phát triển của bạn. Việc lồng nhau không thiết yếu không hỗ trợ được gì cho bất kỳ ai (trừ khi họ hoài cổ về những kho tàng trữ SVN nguyên khối)

Hãy làm điều đó đúng cách

./sample/ 0

Lưu ý “

./sample.py 33”

Cấu trúc kết quả

./sample/ 1

Cấu trúc mã là chìa khóa¶

Nhờ cách nhập và mô-đun được xử lý trong Python, việc cấu trúc một dự án công trình bất Động sản Python tương đối thuận tiện và đơn giản. Dễ dàng ở đây nghĩa là bạn không còn nhiều ràng buộc và quy mô nhập mô-đun dễ nắm bắt. Do đó, bạn chỉ từ lại trách nhiệm kiến ​​trúc thuần túy là tạo ra những phần rất khác nhau của dự án công trình bất Động sản và những tương tác của chúng.

Cấu trúc thuận tiện và đơn giản của một dự án công trình bất Động sản nghĩa là nó cũng thuận tiện và đơn giản thực hiện nó một cách kém cỏi. Một số tín hiệu của một dự án công trình bất Động sản có cấu trúc kém gồm có

    Phụ thuộc vòng tròn nhiều và lộn xộn. Nếu những lớp Bàn ghế trong ./sample.py 34 cần nhập Carpenter từ ./sample.py 35 để trả lời một thắc mắc ví dụ như ./sample.py 36 và nếu ngược lại, lớp Carpenter cần nhập Bàn ghế để trả lời thắc mắc ./sample.py 37, thì bạn có một phụ thuộc vòng. Trong trường hợp này, bạn sẽ phải dùng đến những thủ thuật hack mỏng dính manh, ví dụ như sử dụng những câu lệnh nhập bên trong những phương thức hoặc hiệu suất cao của mìnhkhớp nối ẩn. Mỗi và mọi thay đổi trong quá trình triển khai của Table đều phá vỡ 20 bài kiểm tra trong những trường hợp kiểm tra không liên quan vì nó phá vỡ mã của Carpenter, điều này đòi hỏi phải phẫu thuật rất thận trọng để thích ứng với thay đổi. Điều này nghĩa là bạn có quá nhiều giả định về Bảng trong mã Carpenter hoặc ngược lạiSử dụng nhiều trạng thái hoặc toàn cảnh toàn cầu. Thay vì truyền rõ ràng ./sample.py 38 lẫn nhau, Table và Carpenter nhờ vào những biến toàn cục hoàn toàn có thể được sửa đổi và được sửa đổi nhanh gọn bởi những tác nhân rất khác nhau. Bạn cần xem xét kỹ lưỡng tất cả quyền truy cập vào những biến toàn cầu này để hiểu tại sao một bảng hình chữ nhật lại trở thành một hình vuông vắn và phát hiện ra rằng mã mẫu từ xa cũng đang sửa đổi ngữ cảnh này, làm rối tung những kích thước của bảngmã spaghetti. nhiều trang chứa những mệnh đề if và vòng lặp lồng nhau với nhiều mã thủ tục được sao chép và không còn phân đoạn thích hợp được gọi là mã spaghetti. Sự thụt lề có ý nghĩa của Python (một trong những tính năng gây tranh cãi nhất của nó) làm cho việc duy trì loại mã này trở nên rất trở ngại vất vả. Tin tốt là bạn hoàn toàn có thể không thấy quá nhiềuMã Ravioli có nhiều kĩ năng bằng Python. nó gồm có hàng trăm mảnh logic nhỏ giống nhau, thường là những lớp hoặc đối tượng, không còn cấu trúc phù hợp. Nếu bạn không bao giờ hoàn toàn có thể nhớ, nếu bạn phải sử dụng FurnitureTable, AssetTable hoặc Table, hoặc thậm chí TableNew cho trách nhiệm của tớ, thì bạn hoàn toàn có thể đang bơi trong mã ravioli

Mô-đun¶

Các mô-đun Python là một trong những lớp trừu tượng chính có sẵn và có lẽ rằng là lớp tự nhiên nhất. Các lớp trừu tượng được cho phép tách mã thành những phần chứa tài liệu và hiệu suất cao liên quan

Ví dụ: một lớp của dự án công trình bất Động sản hoàn toàn có thể xử lý tiếp xúc với hành vi của người tiêu dùng, trong khi lớp khác sẽ xử lý thao tác tài liệu ở mức độ thấp. Cách tự nhiên nhất để tách hai lớp này là tập hợp lại tất cả những hiệu suất cao tiếp xúc trong một tệp và tất cả những hoạt động và sinh hoạt giải trí sinh hoạt thấp cấp trong một tệp khác. Trong trường hợp này, tệp giao diện cần nhập tệp thấp cấp. Điều này được thực hiện với những câu lệnh

./sample.py 39 và ./sample.py 60

Ngay khi bạn sử dụng câu lệnh nhập, bạn sử dụng những mô-đun. Đây hoàn toàn có thể là những mô-đun tích hợp sẵn như os và sys, mô-đun bên thứ ba mà bạn đã setup trong môi trường tự nhiên thiên nhiên của tớ hoặc mô-đun nội bộ của dự án công trình bất Động sản của bạn

Để phù phù phù hợp với hướng dẫn về phong cách, hãy đặt tên mô-đun ngắn, viết thường và đảm bảo tránh sử dụng những ký hiệu đặc biệt như dấu chấm (. ) hoặc dấu chấm hỏi (?). Tên tệp như

./sample.py 61 là tên gọi bạn nên tránh. Đặt tên theo cách này sẽ cản trở cách Python tìm kiếm những mô-đun

trong trường hợp của tôi. Thư rác. py Python kỳ vọng sẽ tìm thấy tệp

./sample.py 62 trong thư mục mang tên ./sample.py 63, đây không phải là trường hợp. Có một ví dụ về cách sử dụng ký hiệu dấu chấm trong tài liệu Python

Nếu muốn, bạn hoàn toàn có thể đặt tên cho mô-đun của tớ là

./sample.py 64, nhưng trong cả dấu gạch dưới, người bạn đáng tin cậy của tất cả chúng ta, cũng không thường thấy trong tên mô-đun. Tuy nhiên, việc sử dụng những ký tự khác (dấu cách hoặc dấu gạch ngang) trong tên mô-đun sẽ ngăn quá trình nhập (- là toán tử trừ). Cố gắng giữ tên mô-đun ngắn để tránh việc phải tách những từ. Và, trên hết, không còn không khí tên với dấu gạch dưới;

./sample/ 2

Ngoài một số trong những hạn chế đặt tên, không còn gì đặc biệt thiết yếu để tệp Python trở thành một mô-đun. Nhưng bạn cần hiểu cơ chế nhập để sử dụng đúng khái niệm này và tránh một số trong những vấn đề

Cụ thể, câu lệnh

./sample.py 65 sẽ tìm tệp thích hợp, đó là ./sample.py 66 trong cùng thư mục với người gọi, nếu nó tồn tại. Nếu không tìm thấy, trình thông dịch Python sẽ tìm kiếm ./sample.py 66 trong “đường dẫn” theo cách đệ quy và đưa ra một ngoại lệ ImportError lúc không tìm thấy

Khi tìm thấy

./sample.py 66, trình thông dịch Python sẽ thực thi mô-đun trong một phạm vi khác lạ. Mọi câu lệnh cấp cao nhất trong ./sample.py 66 sẽ được thực thi, gồm có cả mỗi lần nhập khác nếu có. Định nghĩa hiệu suất cao và lớp được tàng trữ trong từ điển của mô-đun

Sau đó, những biến, hàm và lớp của mô-đun sẽ có sẵn cho những người dân gọi thông qua không khí tên của mô-đun, một khái niệm trung tâm trong lập trình đặc biệt hữu ích và mạnh mẽ và tự tin trong Python

Trong nhiều ngôn từ, một lệnh

./sample.py 70 được bộ tiền xử lý sử dụng để lấy tất cả mã được tìm thấy trong tệp và 'sao chép' mã đó vào mã của người gọi. Nó khác với Python. mã đi kèm được tách biệt trong một không khí tên mô-đun, điều đó nghĩa là bạn thường không phải lo ngại rằng mã đi kèm hoàn toàn có thể có tác dụng không mong ước, e. g. ghi đè lên một hiệu suất cao hiện có cùng tên

Có thể mô phỏng hành vi tiêu chuẩn hơn bằng phương pháp sử dụng cú pháp đặc biệt của câu lệnh nhập.

./sample.py 71. Điều này thường được xem là thực hành xấu. Sử dụng ./sample.py 72 làm cho mã khó đọc hơn và làm cho những phần phụ thuộc ít bị ngăn cách hơn

Sử dụng

./sample.py 73 là một phương pháp để xác định hiệu suất cao bạn muốn nhập và đặt nó vào không khí tên cục bộ. Mặc dù ít gây hại hơn nhiều so với ./sample.py 72 vì nó hiển thị rõ ràng những gì được nhập trong không khí tên cục bộ, nhưng ưu điểm duy nhất của nó so với ./sample.py 65 đơn giản hơn là nó sẽ tiết kiệm được một chút ít thao tác gõ

Rất tệ

./sample/ 3

Tốt hơn

./sample/ 4

Tốt

./sample/ 5

Như đã đề cập trong phần Kiểu mã , kĩ năng đọc là một trong những tính năng chính của Python. Khả năng đọc nghĩa là tránh văn bản soạn sẵn vô dụng và lộn xộn; . Nhưng sự ngắn gọn và tối nghĩa là số lượng giới hạn mà sự ngắn gọn nên tạm dừng. Có thể biết ngay một lớp hoặc hiệu suất cao đến từ đâu, như trong thành ngữ

./sample.py 76, cải tổ đáng kể kĩ năng đọc và hiểu mã trong tất cả trừ những dự án công trình bất Động sản tệp đơn giản nhất.

Gói¶

Python đáp ứng một khối mạng lưới hệ thống đóng gói rất đơn giản, nó chỉ đơn giản là một phần mở rộng của cơ chế mô-đun cho một thư mục

Bất kỳ thư mục nào có tệp

./sample.py 77 đều được xem là gói Python. Các mô-đun rất khác nhau trong gói được nhập theo cách tương tự như những mô-đun đơn giản, nhưng có hành vi đặc biệt đối với tệp ./sample.py 77, được sử dụng để thu thập tất cả những định nghĩa trên toàn gói

Tệp

./sample.py 66 trong thư mục ./sample.py 90 được nhập với câu lệnh ./sample.py 91. Câu lệnh này sẽ tìm tệp ./sample.py 77 trong ./sample.py 93 và thực hiện tất cả những câu lệnh cấp cao nhất của nó. Sau đó, nó sẽ tìm một tệp mang tên ./sample.py 94 và thực hiện tất cả những câu lệnh cấp cao nhất của nó. Sau những thao tác này, mọi biến, hàm hoặc lớp được xác định trong ./sample.py 66 đều có sẵn trong gói. không khí tên modu

Một vấn đề thường thấy là thêm quá nhiều mã vào tệp

./sample.py 77. Khi độ phức tạp của dự án công trình bất Động sản tăng lên, hoàn toàn có thể có những gói con và gói con trong cấu trúc thư mục sâu. Trong trường hợp này, việc nhập một món đồ từ gói con phụ sẽ yêu cầu thực thi tất cả những tệp ./sample.py 77 đã gặp khi duyệt qua cây

Để trống tệp

./sample.py 77 được xem là thông lệ thông thường và thậm chí là tốt, nếu những mô-đun và gói con của gói không cần chia sẻ bất kỳ mã nào

Cuối cùng, có sẵn một cú pháp thuận tiện để nhập những gói được lồng sâu.

./sample.py 99. Điều này được cho phép bạn sử dụng mod thay cho việc lặp lại dài dòng của ./test_sample.py 20

Lập trình hướng đối tượng¶

Python đôi khi được mô tả là ngôn từ lập trình hướng đối tượng. Điều này hoàn toàn có thể gây hiểu nhầm và cần làm rõ thêm

Trong Python, mọi thứ đều là một đối tượng và hoàn toàn có thể được xử lý như vậy. Đây là ý nghĩa khi tất cả chúng ta nói, ví dụ, những hàm là đối tượng hạng nhất. Hàm, lớp, chuỗi và thậm chí cả kiểu là những đối tượng trong Python. in như bất kỳ đối tượng nào, chúng có một loại, chúng hoàn toàn có thể được truyền dưới dạng đối số hàm và chúng hoàn toàn có thể có những phương thức và thuộc tính. Theo cách hiểu này, Python hoàn toàn có thể được xem là một ngôn từ hướng đối tượng

Tuy nhiên, không in như Java, Python không áp đặt lập trình hướng đối tượng làm quy mô lập trình chính. Hoàn toàn khả thi đối với một dự án công trình bất Động sản Python không hướng đối tượng, tôi. e. không sử dụng hoặc sử dụng rất ít định nghĩa lớp, thừa kế lớp hoặc bất kỳ cơ chế nào khác dành riêng cho ngôn từ lập trình hướng đối tượng

Hơn nữa, như đã thấy trong phần mô-đun, cách Python xử lý những mô-đun và không khí tên đáp ứng cho nhà phát triển một cách tự nhiên để đảm bảo việc đóng gói và phân tách những lớp trừu tượng, cả hai đều là những nguyên do phổ biến nhất để sử dụng hướng đối tượng. Do đó, những lập trình viên Python có nhiều quyền hạn hơn để không sử dụng hướng đối tượng, khi nó không được yêu cầu bởi quy mô marketing thương mại

Có một số trong những nguyên do để tránh hướng đối tượng không thiết yếu. Việc xác định những lớp tùy chỉnh rất hữu ích khi tất cả chúng ta muốn gắn một số trong những trạng thái và một số trong những hiệu suất cao lại với nhau. Vấn đề, như đã chỉ ra trong những cuộc thảo luận về lập trình hiệu suất cao, xuất phát từ phần "trạng thái" của phương trình

Trong một số trong những kiến ​​trúc, điển hình là những ứng dụng web, nhiều phiên bản của những quy trình Python được sinh ra như một phản hồi đối với những yêu cầu bên phía ngoài xảy ra đồng thời. Trong trường hợp này, việc giữ một số trong những trạng thái trong những đối tượng được khởi tạo, nghĩa là giữ một số trong những thông tin tĩnh về thế giới, dễ xảy ra những vấn đề tương tranh hoặc điều kiện chủng tộc. Đôi khi, giữa việc khởi tạo trạng thái của một đối tượng (thường được thực hiện với phương thức

./test_sample.py 21) và việc sử dụng thực tế trạng thái của đối tượng thông qua một trong những phương thức của nó, thế giới hoàn toàn có thể đã thay đổi và trạng thái được giữ lại hoàn toàn có thể đã lỗi thời. Ví dụ: một yêu cầu hoàn toàn có thể tải một mục trong bộ nhớ và đánh dấu nó là đã đọc bởi người tiêu dùng. Nếu một yêu cầu khác yêu cầu xóa mục này cùng lúc, thì việc xóa hoàn toàn có thể thực sự xảy ra sau khi quá trình đầu tiên tải mục này và sau đó chúng tôi phải đánh dấu đối tượng đã xóa là đã đọc

việc này và những vấn đề khác đã dẫn đến ý tưởng rằng sử dụng những hàm không trạng thái là một quy mô lập trình tốt hơn

Một cách khác để nói điều tương tự là đề xuất sử dụng những hàm và thủ tục với càng ít ngữ cảnh ngầm và tác dụng phụ càng tốt. Bối cảnh ẩn của hàm được tạo thành từ bất kỳ biến toàn cục hoặc mục nào trong lớp tàng trữ được truy cập từ bên trong hàm. Tác dụng phụ là những thay đổi mà một hàm tạo ra đối với ngữ cảnh ẩn của nó. Nếu một hiệu suất cao lưu hoặc xóa tài liệu trong một biến toàn cục hoặc trong lớp tàng trữ lâu dài, thì nó được cho là có tác dụng phụ

Việc cô lập thận trọng những hiệu suất cao có ngữ cảnh và tác dụng phụ khỏi những hiệu suất cao có logic (được gọi là những hiệu suất cao thuần túy) mang lại những quyền lợi sau

    Các hiệu suất cao thuần túy là xác định. đưa ra một đầu vào cố định và thắt chặt, đầu ra sẽ luôn giống nhauCác hiệu suất cao thuần túy dễ thay đổi hoặc thay thế hơn nhiều nếu chúng cần phải cấu trúc lại hoặc tối ưu hóaCác hàm thuần túy dễ kiểm tra hơn với những bài kiểm tra đơn vị. Ít thiết yếu lập toàn cảnh phức tạp và làm sạch tài liệu sau đóCác hiệu suất cao thuần túy dễ thao tác, trang trí và truyền lại hơn

Tóm lại, những hàm thuần túy là những khối xây dựng hiệu suất cao hơn những lớp và đối tượng đối với một số trong những kiến ​​trúc vì chúng không còn ngữ cảnh hoặc tác dụng phụ

Rõ ràng, hướng đối tượng là hữu ích và thậm chí thiết yếu trong nhiều trường hợp, ví dụ như khi phát triển những ứng dụng hoặc trò chơi đồ họa trên máy tính để bàn, trong đó những thứ được thao tác (hiên chạy cửa số, nút, hình đại diện, phương tiện) có thời gian tồn tại tương đối lâu trong máy tính.

Đồ trang trí¶

Ngôn ngữ Python đáp ứng một cú pháp đơn giản nhưng mạnh mẽ và tự tin được gọi là 'decorators'. Trình trang trí là một hàm hoặc một lớp bao bọc (hoặc trang trí) một hàm hoặc một phương thức. Hàm hoặc phương thức 'được trang trí' sẽ thay thế hàm hoặc phương thức 'không được trang trí' ban đầu. Bởi vì những hàm là đối tượng hạng nhất trong Python, điều này hoàn toàn có thể được thực hiện 'thủ công', nhưng sử dụng cú pháp @decorator sẽ rõ ràng hơn và do đó được ưu tiên hơn

./sample/ 6

Cơ chế này rất hữu ích để phân tách những mối quan tâm và tránh logic không liên quan bên phía ngoài 'làm ô nhiễm' logic cốt lõi của hàm hoặc phương thức. Một ví dụ điển hình về một phần hiệu suất cao được xử lý tốt hơn với trang trí là ghi nhớ hoặc lưu vào bộ nhớ đệm. bạn muốn tàng trữ kết quả của một hàm đắt tiền trong một bảng và sử dụng chúng trực tiếp thay vì tính toán lại chúng khi chúng đã được tính toán. Đây rõ ràng không phải là một phần của logic hiệu suất cao

Trình quản lý ngữ cảnh¶

Trình quản lý toàn cảnh là một đối tượng Python đáp ứng thêm thông tin theo ngữ cảnh cho một hành vi. tin tức tương hỗ update này còn có dạng chạy một hàm hoàn toàn có thể gọi được khi khởi đầu ngữ cảnh bằng phương pháp sử dụng câu lệnh

./test_sample.py 22, cũng như chạy một hàm hoàn toàn có thể gọi được khi hoàn thành xong tất cả mã bên trong khối ./test_sample.py 22. Ví dụ nổi tiếng nhất về việc sử dụng trình quản lý ngữ cảnh được hiển thị ở đây, mở trên một tệp

./sample/ 7

Bất kỳ ai quen thuộc với mẫu này đều biết rằng việc gọi

./test_sample.py 24 theo kiểu này đảm nói rằng phương thức ./test_sample.py 26 của ./test_sample.py 25 sẽ được gọi tại thuở nào điểm nào đó. Điều này làm giảm tải nhận thức của nhà phát triển và làm cho mã dễ đọc hơn

Có hai cách thuận tiện và đơn giản để tự thực hiện hiệu suất cao này. sử dụng một lớp hoặc sử dụng một trình tạo. Hãy tự triển khai những hiệu suất cao trên, khởi đầu với cách tiếp cận lớp

./sample/ 8

Đây chỉ là một đối tượng Python thông thường với hai phương thức tương hỗ update được sử dụng bởi câu lệnh

./test_sample.py 22. Đầu tiên, CustomOpen được khởi tạo và sau đó phương thức ./test_sample.py 28 của nó được gọi và bất kỳ giá trị trả về nào của ./test_sample.py 28 đều được gán cho ./test_sample.py 25 trong phần ./test_sample.py 31 của câu lệnh. Khi nội dung của khối ./test_sample.py 22 được thực thi xong, phương thức ./test_sample.py 33 sau đó được gọi

Và giờ đây, cách tiếp cận trình tạo bằng ngữ cảnh riêng của Python

./sample/ 9

Điều này hoạt động và sinh hoạt giải trí theo cách đúng chuẩn in như ví dụ về lớp ở trên, tuy nhiên nó ngắn gọn hơn. Hàm

./test_sample.py 34 thực thi cho tới lúc gặp câu lệnh ./test_sample.py 35. Sau đó, nó trao quyền trấn áp trở lại câu lệnh ./test_sample.py 22, câu lệnh này gán bất kỳ thứ gì đã được ./test_sample.py 35'ed cho f trong phần ./test_sample.py 31. Mệnh đề ./test_sample.py 39 đảm nói rằng ./sample/ 00 được gọi mặc dầu có ngoại lệ bên trong ./test_sample.py 22 hay là không

Vì hai cách tiếp cận có vẻ như giống nhau, tất cả chúng ta nên tuân theo Thiền của Python để quyết định lúc nào nên sử dụng cách nào. Cách tiếp cận lớp hoàn toàn có thể tốt hơn nếu có một lượng logic đáng kể để đóng gói. Cách tiếp cận hiệu suất cao hoàn toàn có thể tốt hơn cho những tình huống mà tất cả chúng ta đang xử lý một hành vi đơn giản

Nhập động¶

Python được gõ động, nghĩa là những biến không còn kiểu cố định và thắt chặt. Trên thực tế, trong Python, những biến rất khác so với những biến trong nhiều ngôn từ khác, rõ ràng là những ngôn từ được nhập tĩnh. Các biến không phải là một phân đoạn của cục nhớ máy tính nơi một số trong những giá trị được ghi, chúng là 'thẻ' hoặc 'tên' trỏ đến những đối tượng. Do đó, biến 'a' hoàn toàn có thể được đặt thành giá trị 1, sau đó là giá trị 'a string', thành hàm

Kiểu gõ động của Python thường được xem là một điểm yếu và thực sự nó hoàn toàn có thể dẫn đến sự phức tạp và mã khó gỡ lỗi. Một cái gì đó mang tên 'a' hoàn toàn có thể được đặt thành nhiều thứ rất khác nhau và nhà phát triển hoặc người bảo dưỡng cần theo dõi tên này trong mã để đảm nói rằng nó không được đặt thành một đối tượng hoàn toàn không liên quan

Một số hướng dẫn giúp tránh vấn đề này

    Tránh sử dụng cùng một tên biến cho những thứ rất khác nhau

Xấu

./sample.py 0

Tốt

./sample.py 1

Sử dụng những hàm hoặc phương thức ngắn giúp giảm rủi ro tiềm ẩn tiềm ẩn sử dụng cùng tên cho hai thứ không liên quan

Tốt hơn là sử dụng những tên rất khác nhau trong cả đối với những thứ có liên quan, khi chúng có một loại khác

Xấu

./sample.py 2

Không có hiệu suất cao đạt được khi sử dụng lại tên. những bài tập sẽ phải tạo những đối tượng mới. Tuy nhiên, khi độ phức tạp tăng lên và mỗi phép gán được phân tách bằng những dòng mã khác, gồm có những nhánh và vòng lặp 'nếu', thì việc xác định loại biến đã cho trở nên trở ngại vất vả hơn.

Một số phương pháp mã hóa, ví dụ như lập trình hiệu suất cao, khuyến nghị không bao giờ gán lại một biến. Trong Java, điều này được thực hiện với từ khóa ở đầu cuối. Python không còn từ khóa ở đầu cuối và dù sao nó cũng đi ngược lại triết lý của nó. Tuy nhiên, hoàn toàn có thể là một kỷ luật tốt để tránh gán cho một biến nhiều lần và nó giúp nắm bắt được khái niệm về nhiều chủng loại hoàn toàn có thể thay đổi và không thể thay đổi

Các loại hoàn toàn có thể thay đổi và không thể thay đổi¶

Python có hai loại tích hợp hoặc do người tiêu dùng xác định

Các loại hoàn toàn có thể thay đổi là những loại được cho phép sửa đổi nội dung tại chỗ. Các biến điển hình là list và từ điển. Tất cả những list đều có những phương thức thay đổi, như

./sample/ 02 hoặc ./sample/ 03 và hoàn toàn có thể được sửa đổi tại chỗ. Điều tương tự cũng xảy ra với từ điển

Các loại không bao giờ thay đổi không đáp ứng phương pháp thay đổi nội dung của chúng. Chẳng hạn, biến x được đặt thành số nguyên 6 không còn phương thức “tăng”. Nếu bạn muốn tính x + 1, bạn phải tạo một số trong những nguyên khác và đặt tên cho nó

./sample.py 3

Một hậu quả của sự việc khác lạ trong hành vi này là nhiều chủng loại hoàn toàn có thể thay đổi không "ổn định" và do đó không thể được sử dụng làm khóa từ điển

Sử dụng nhiều chủng loại hoàn toàn có thể thay đổi đúng cách cho những thứ hoàn toàn có thể thay đổi về bản chất và nhiều chủng loại không thể thay đổi cho những thứ có bản chất cố định và thắt chặt giúp làm rõ mục tiêu của mã

Ví dụ: tương đương không bao giờ thay đổi của list là tuple, được tạo bằng

./sample/ 04. Bộ tài liệu này là một cặp không thể thay đổi tại chỗ và hoàn toàn có thể được sử dụng làm khóa cho từ điển

Một điểm đặc biệt của Python hoàn toàn có thể khiến người mới khởi đầu ngạc nhiên là những chuỗi không thay đổi. Điều này nghĩa là lúc xây dựng một chuỗi từ những phần của nó, việc nối thêm từng phần vào chuỗi sẽ không hiệu suất cao vì toàn bộ chuỗi được sao chép trên mỗi phần nối thêm. Thay vào đó, sẽ hiệu suất cao hơn nhiều khi tích lũy những phần trong một list, hoàn toàn có thể thay đổi được và sau đó dán (

./sample/ 05) những phần lại với nhau khi cần chuỗi đầy đủ. Hiểu list thường là cách nhanh nhất có thể và thành ngữ nhất để làm điều này

Xấu

./sample.py 4

Tốt hơn

./sample.py 5

Tốt

./sample.py 6

Một điều ở đầu cuối cần đề cập về chuỗi là sử dụng

./sample/ 06 không phải lúc nào thì cũng tốt nhất. Trong trường hợp bạn đang tạo một chuỗi mới từ một số trong những chuỗi được xác định trước, sử dụng toán tử cộng thực sự nhanh hơn. Nhưng trong những trường hợp như trên hoặc trong trường hợp bạn đang thêm vào một chuỗi hiện có, sử dụng ./sample/ 06 sẽ là phương pháp ưa thích của bạn Tải thêm tài liệu liên quan đến nội dung bài viết Kho tàng trữ python programming python

Review Kho tàng trữ python ?

Bạn vừa Read nội dung bài viết Với Một số hướng dẫn một cách rõ ràng hơn về Clip Kho tàng trữ python tiên tiến nhất

Chia Sẻ Link Tải Kho tàng trữ python miễn phí

Người Hùng đang tìm một số trong những ShareLink Tải Kho tàng trữ python Free.

Hỏi đáp thắc mắc về Kho tàng trữ python

Nếu sau khi đọc nội dung bài viết Kho tàng trữ python vẫn chưa hiểu thì hoàn toàn có thể lại Comments ở cuối bài để Admin lý giải và hướng dẫn lại nha #Kho #lưu #trữ #python