Computer >> Máy Tính >  >> Lập trình >> Python

Tuần tự hóa đối tượng nội bộ Python (soái ca)

Mặc dù mô-đun nguyên soái trong thư viện tiêu chuẩn của Python cung cấp các tính năng tuần tự hóa đối tượng (tương tự như mô-đun pickle), nhưng nó không thực sự hữu ích cho mục đích chung là lưu trữ dữ liệu hoặc truyền các đối tượng Python thông qua các ổ cắm, v.v. Mô-đun này chủ yếu được sử dụng bởi chính Python để hỗ trợ đọc / viết hoạt động trên các phiên bản đã biên dịch của mô-đun Python (tệp .pyc). Định dạng dữ liệu được sử dụng bởi mô-đun thống nhất không tương thích trên các phiên bản Python (thậm chí không phải các cuộc lật đổ). Đó là lý do tại sao một tập lệnh Python đã biên dịch (tệp .pyc) của một phiên bản có thể sẽ không thực thi trên phiên bản khác. Do đó, mô-đun nguyên soái được sử dụng để tuần tự hóa đối tượng nội bộ của Python.

Cũng giống như mô-đun pickle, mô-đun marshal cũng xác định các hàm load () và dump () để đọc và ghi các đối tượng được sắp xếp từ / đến tệp. Ngoài ra, hàm load () và dumps () xử lý biểu diễn chuỗi của đối tượng được sắp xếp.

kết xuất () - trả về một byte giống như một đối tượng của tôi sắp xếp một đối tượng Python. Chỉ các đối tượng của kiểu dữ liệu chuẩn mới được hỗ trợ cho việc sắp xếp. Các loại không được hỗ trợ nâng cao ngoại lệ ValueError.

tải () - Hàm này chuyển đổi đối tượng byte like thành đối tượng Python tương ứng. Nếu chuyển đổi không dẫn đến đối tượng Python hợp lệ, ValueError hoặc TypeError có thể được phát sinh.

Đoạn mã sau hiển thị một đối tượng từ điển Python được sắp xếp bằng cách sử dụng kết xuất (). Biểu diễn byte được chuyển đổi trở lại từ điển bằng hàm load ().

import marshal
person = {"name":"xyz", "age":22, "marks":[45,56,78]}
data = marshal.dumps(person)
obj = marshal.loads(data)
print (obj)

kết xuất () - Hàm này ghi biểu diễn byte của đối tượng Python được hỗ trợ vào một tệp. Bản thân tệp là một tệp nhị phân có quyền ghi

tải () - Hàm này đọc dữ liệu byte từ tệp nhị phân và chuyển đổi nó thành đối tượng Python.

Như đã đề cập ở trên, mô-đun soái được sử dụng để xử lý các tệp .pyc. Ví dụ sau minh họa việc sử dụng các hàm dump () và load () để xử lý các đối tượng mã của Python, được sử dụng để lưu trữ các mô-đun Python được biên dịch trước.

Mã sử ​​dụng hàm compile () tích hợp sẵn để xây dựng một đối tượng mã từ một chuỗi nguồn nhúng các lệnh Python.

compile(source, file, mode)

Tham số tệp phải là tệp mà từ đó mã được đọc. Nếu nó không được đọc từ một tệp, hãy chuyển bất kỳ chuỗi tùy ý nào.

Tham số chế độ là "execute" nếu nguồn chứa một chuỗi câu lệnh, "eval" nếu có một biểu thức đơn lẻ hoặc "đơn" nếu nó chứa một câu lệnh tương tác.

Đối tượng mã biên dịch sau đó được lưu trữ trong tệp .pyc bằng cách sử dụng hàm dump ()

import marshal
script = """
a = 10
b = 20
print ('addition = ',a+b)
"""
code = compile(script, "script", "exec")
f = open("a.pyc","wb")
marshal.dump(code, f)
f.close()

Để giải mã hóa đối tượng khỏi tệp .pyc, hãy sử dụng hàm load (). Vì nó trả về một đối tượng mã nên nó có thể được chạy bằng cách sử dụng execute (), một hàm tích hợp sẵn khác.

import marshal
f = open("a.pyc","rb")
data = marshal.load(f)
exec (data)

Đầu ra sẽ là kết quả của khối mã được nhúng trong chuỗi nguồn

addition = 30