Làm thế nào để bạn tạo một trình tạo mã trong python?
Cog là một công cụ tạo mã đơn giản được viết bằng Python. Chúng tôi sử dụng nó hoặc kết quả của nó mỗi ngày trong quá trình sản xuất Kubi Show Kubi là một hệ thống cộng tác được thể hiện trong một số sản phẩm khác nhau. Chúng tôi có một lược đồ mô tả việc thể hiện dữ liệu cộng tác của khách hàng. chủ đề thảo luận, tài liệu, sự kiện lịch, v.v. Dữ liệu này phải được xử lý theo nhiều cách. được lưu trữ trong một số kho lưu trữ dữ liệu khác nhau, được vận chuyển qua mạng dưới dạng biểu diễn XML, được thao tác trong bộ nhớ bằng cách sử dụng các đối tượng C++ truyền thống, được trình bày để gỡ lỗi và lập luận để đánh giá tính hợp lệ của dữ liệu, để đặt tên cho một số Chúng tôi cần một cách để mô tả lược đồ này một lần và sau đó tạo mã thực thi một cách đáng tin cậy từ nó Con đường khó khăn với C ++ Lần triển khai đầu tiên của chúng tôi về lược đồ này liên quan đến một tập hợp các biểu diễn bị gãy. Mô-đun giao thức XML có các bảng mô tả tuần tự hóa và giải tuần tự hóa các luồng XML. Các mô-đun lưu trữ có các bảng khác mô tả ánh xạ từ đĩa sang cấu trúc bộ nhớ. Mô-đun xác thực có các bảng riêng chứa các quy tắc về thuộc tính nào phải có trên mục nào. Các đối tượng trong bộ nhớ có getters và setters cho từng thuộc tính Nó hoạt động, theo mốt, nhưng đang trở nên không thể quản lý được. Việc thêm thuộc tính mới vào lược đồ yêu cầu chỉnh sửa mười bảng ở các định dạng khác nhau trong nhiều tệp nguồn, cũng như thêm getters và setters cho thuộc tính mới. Không có thẩm quyền duy nhất trong mã cho toàn bộ lược đồ. Các khía cạnh khác nhau của lược đồ được thể hiện theo những cách khác nhau trong các tệp khác nhau Chúng tôi đã cố gắng đơn giản hóa mớ hỗn độn bằng cách sử dụng macro C++. Điều này đã làm việc ở một mức độ, nhưng vẫn còn khó quản lý. Biểu diễn lược đồ bị cản trở bởi tính chất đơn giản của macro C++ và khả năng mở rộng là vô cùng hạn chế Các bảng lược đồ không thể tạo bằng các macro nguyên thủy này vẫn được soạn thảo và chỉnh sửa bằng tay. Thay đổi một thuộc tính trong lược đồ vẫn có nghĩa là chạm vào hàng tá tệp. Điều này là tẻ nhạt và dễ bị lỗi. Thiếu một nơi có thể gây ra một lỗi mà sẽ không được chú ý trong nhiều ngày Tìm kiếm một cách tốt hơn Rõ ràng là chúng tôi cần một cách tốt hơn để quản lý lược đồ thuộc tính. Không chỉ những sửa đổi hiện có khó khăn, mà các lĩnh vực phát triển mới sẽ yêu cầu những cách sử dụng lược đồ mới và các loại sửa đổi mới thậm chí còn khó khăn hơn Chúng tôi đã sử dụng các macro C++ để cố gắng biến một mô tả khai báo của lược đồ thành mã thực thi. Cách tốt hơn để làm điều đó là tạo mã. một chương trình viết chương trình. Chúng ta có thể sử dụng một công cụ để đọc lược đồ và tạo mã C++, sau đó biên dịch mã đã tạo đó vào sản phẩm Chúng tôi cần một cách để đọc tệp mô tả lược đồ và xuất các đoạn mã có thể được tích hợp vào các nguồn C++ của chúng tôi để được biên dịch với phần còn lại của sản phẩm Thay vì viết một chương trình cụ thể cho vấn đề của chúng tôi, thay vào đó, tôi đã chọn viết một công cụ tạo mã có mục đích chung, mặc dù đơn giản. Nó sẽ giải quyết vấn đề quản lý các đoạn mã trình tạo nhỏ rải rác trong một tập hợp lớn các tệp. Sau đó, chúng tôi có thể sử dụng công cụ có mục đích chung này để giải quyết vấn đề tạo cụ thể của mình Công cụ tôi đã viết được gọi là Cog. Yêu cầu của nó là
Tạo mã với Python Tất nhiên, ngôn ngữ tôi chọn cho trình tạo mã là Python. Tính đơn giản và sức mạnh của nó là hoàn hảo cho công việc đọc tệp dữ liệu và tạo mã. Để đơn giản hóa việc tích hợp với mã C++, trình tạo Python được chèn trực tiếp vào tệp C++ dưới dạng nhận xét Cog đọc một tệp văn bản (C++ trong trường hợp của chúng tôi), tìm kiếm các phần văn bản được đánh dấu đặc biệt mà nó sẽ sử dụng làm trình tạo. Nó thực thi các phần đó dưới dạng mã Python, thu được kết quả đầu ra. Đầu ra sau đó được ghép vào tệp theo mã trình tạo Vì mã trình tạo và đầu ra của nó đều được lưu trong tệp nên không có sự phân biệt giữa tệp đầu vào và tệp đầu ra. Cog đọc và ghi cùng một tệp và có thể chạy đi chạy lại mà không làm mất thông tin Cog xử lý các tệp văn bản, chuyển đổi các phần được đánh dấu đặc biệt của tệp thành nội dung mới mà không làm ảnh hưởng đến phần còn lại của tệp hoặc các phần mà nó thực thi để tạo ra nội dung được tạo. Phóng to Ngoài việc thực thi các trình tạo Python, bản thân Cog được viết bằng Python. Bản chất động của Python khiến việc thực thi mã Python mà Cog tìm thấy trở nên đơn giản và tính linh hoạt của nó giúp thực thi nó trong một môi trường được xây dựng phù hợp để có được ngữ nghĩa mong muốn. Phần lớn mã của Cog liên quan đến việc thụt đầu dòng chính xác. Tôi muốn tác giả có thể tổ chức mã trình tạo của mình trông đẹp mắt trong tệp máy chủ và tạo mã được tạo cũng trông đẹp mắt mà không phải lo lắng về các vấn đề về khoảng trắng khó sử dụng Tích hợp cấp hệ điều hành của Python cho phép tôi thực thi các lệnh trình bao khi cần. Chúng tôi sử dụng Perforce để kiểm soát nguồn, giữ cho các tệp ở chế độ chỉ đọc cho đến khi chúng cần được chỉnh sửa. Khi chạy Cog có thể cần thay đổi các file mà developer chưa chỉnh sửa. Nó có thể thực thi lệnh shell để kiểm tra các tệp ở chế độ chỉ đọc Cuối cùng, chúng tôi đã sử dụng XML cho mô tả lược đồ thuộc tính mới của mình và rất nhiều thư viện xử lý XML khác nhau của Python đã giúp việc phân tích cú pháp XML trở nên nhanh chóng Một ví dụ Đây là một ví dụ cụ thể nhưng hơi giả tạo. Các thuộc tính được mô tả trong một tệp XML Chúng ta có thể viết một tệp C++ với mã Python nội tuyến // SchemaPropEnum.h enum SchemaPropEnum { /* [[[cog import cog, handyxml for p in handyxml.xpath('Properties.xml', '//property'): cog.outl("Property%s," % p.name) ]]] */ // [[[end]]] }; Sau khi chạy tệp này qua Cog, nó trông như thế này // SchemaPropEnum.h enum SchemaPropEnum { /* [[[cog import cog, handyxml for p in handyxml.xpath('Properties.xml', '//property'): cog.outl("Property%s," % p.name) ]]] */ PropertyId, PropertyRevNum, PropertySubject, PropertyModDate, // [[[end]]] }; Các dòng có dấu ngoặc ba là các dòng đánh dấu phân định các phần mà Cog quan tâm. Văn bản giữa các dòng [[[cog và ]]] là mã Python của trình tạo. Văn bản giữa ]]] và [[[end]]] là kết quả từ lần chạy cuối cùng của Cog (nếu có). Đối với mỗi đoạn mã trình tạo mà nó tìm thấy, Cog sẽ
Làm thế nào nó làm việc ra Trong một từ, tuyệt vời. Bây giờ chúng tôi có một công cụ mạnh mẽ cho phép chúng tôi duy trì một tệp XML duy nhất mô tả lược đồ dữ liệu của chúng tôi. Các nhà phát triển thay đổi lược đồ có một công cụ đơn giản để chạy tạo mã từ lược đồ, tạo mã đầu ra bằng bốn ngôn ngữ khác nhau trên 50 tệp Nơi mà chúng tôi từng sử dụng một quy trình lặp đi lặp lại và tăng nặng không phù hợp với nhu cầu của chúng tôi, giờ đây chúng tôi có một quy trình tự động cho phép các nhà phát triển thể hiện bản thân và để Cog thực hiện công việc khó khăn đó Tính linh hoạt và sức mạnh của Python được đưa vào hoạt động theo hai cách. để tự phát triển Cog và rải khắp mã nguồn C++ của chúng tôi để cung cấp cho các nhà phát triển của chúng tôi một công cụ mạnh mẽ để biến dữ liệu tĩnh thành mã chạy Mặc dù sản phẩm của chúng tôi được xây dựng bằng C++ nhưng chúng tôi đã sử dụng Python để tăng năng suất và sức mạnh biểu đạt, giảm bớt công việc bảo trì và tự động hóa các tác vụ dễ xảy ra lỗi. Phần mềm vận chuyển của chúng tôi được xây dựng hàng ngày với Python làm việc chăm chỉ ở hậu trường Thông tin thêm và bản thân Cog có tại http. //www. nedbatchelder. com/mã/cog Giới thiệu về tác giả Ned Batchelder là một nhà phát triển phần mềm chuyên nghiệp, người đã phải vật lộn với C++, sử dụng Python để giảm bớt khó khăn mỗi khi có cơ hội. Một dự án trước đây của anh ấy, Thế giới của Nat *là chủ đề của Câu chuyện thành công Python trước đó. * Làm cách nào để tạo tập lệnh Python?Tạo tệp Python . Trong cửa sổ công cụ Dự án, chọn gốc dự án (thông thường, đó là nút gốc trong cây dự án), nhấp chuột phải vào dự án và chọn Tệp. Mới mẻ Chọn tùy chọn Tệp Python từ menu ngữ cảnh, sau đó nhập tên tệp mới. PyCharm tạo một tệp Python mới và mở nó để chỉnh sửa Làm cách nào để tạo mã C từ Python?Csnake là gói Python 3 giúp bạn tạo mã C từ Python . Csnake cung cấp cho bạn API nhất quán và có ý kiến giúp bạn cấu trúc mã Python tạo C của mình. Nó làm như vậy bằng cách cung cấp các lớp và hàm để tạo mọi cấu trúc ngôn ngữ C.
Làm cách nào để tạo mã trình tạo mật khẩu trong Python?Dự án Python tạo mật khẩu bảo mật cao. . nhập ngẫu nhiên. . in (chuỗi. in được). char_seq = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ. #$. print("Nhập độ dài yêu cầu của mật khẩu từ 8 đến 16. "). nếu chiều dài >= 8 và chiều dài <= 16. . khác. . pip cài đặt trình tạo mật khẩu ngẫu nhiên Ví dụ về trình tạo mã là gì?Ngoài những cách sử dụng trên, mọi người có thể sử dụng thuật ngữ “trình tạo mã” để nói về một hệ thống tạo ra các loại tin nhắn được mã hóa độc quyền cụ thể. Một ví dụ thú vị là Mã Geek , một hệ thống chữ và số mà các “chuyên viên máy tính” tự mô tả sử dụng để giao tiếp với nhau về nhiều loại mã định danh. |