Ví dụ thì là Python
Nếu bạn muốn lưu trữ (chọn) các đối tượng python vào một tệp pickle duy nhất mà không đi kèm với các mô-đun có định nghĩa lớp/hàm, bạn nên Show
Dưa chua với sự phụ thuộc Khi bạn muốn chọn một đối tượng python để lưu trữ lâu dài, bạn có thể gặp sự cố. dưa chua không lưu trữ định nghĩa đối tượng khi dưa chua. Vì vậy, ví dụ: khi bạn xây dựng một Booyaa! Howdy!3, sau đó dưa nó và bỏ nó ở một vị trí khác, bạn cần phải xác định chính xác Booyaa! Howdy!3 trước khi bạn có thể tải dưa ở điểm đến đích def greeting1(): return "Booyaa!" def greeting2(): return "Howdy!" class Greeter: def __init__(self, greetings): self.greetings = greetings def greet(self): for greet in self.greetings: print(greet()) greeter = Greeter([greeting1, greeting2]) greeter.greet() Booyaa! Howdy! import pickle pickle.dump(greeter, open("greeter.pkl", "wb")) Nếu bây giờ bạn cố tải lời chào ở một nơi khác, bạn sẽ nhận được một Booyaa! Howdy!5 > >> import pickle >>> pickle.load(open("greeter.pkl", "rb")) Traceback (most recent call last):File " Giải pháp 1. Cũng lưu trữ mô-đun với các định nghĩaMột cách giải quyết vấn đề này bằng cách lưu trữ định nghĩa lớp của Booyaa! Howdy!6 trong Booyaa! Howdy!7, nhập Booyaa! Howdy!6 từ Booyaa! Howdy!9 và sao chép Booyaa! Howdy!7 cùng với import pickle pickle.dump(greeter, open("greeter.pkl", "wb"))1 vào vị trí bạn muốn bỏ chọn Tuy nhiên, bây giờ bạn đã tạo một phụ thuộc mà bạn cần quản lý. Bạn luôn phải đảm bảo rằng bạn có sẵn phiên bản phù hợp của mô-đun phù hợp khi bạn muốn mở khóa. Đặc biệt đối với việc lưu trữ lâu dài các đối tượng python, điều này đang gây ra sự cố. Sẽ tốt hơn nếu bạn có thể có tất cả đối tượng và định nghĩa trong một tệp Giải pháp 2. Dill để giải cứuMay mắn thay, có một sự thay thế độc lập cho Booyaa! Howdy!0 được gọi là greeter = Greeter([greeting1, greeting2]) greeter.greet()9, tiếc là không đi kèm với thư viện tiêu chuẩn, vì vậy bạn phải tự cài đặt nó. import pickle pickle.dump(greeter, open("greeter.pkl", "wb"))4 Điều thú vị về greeter = Greeter([greeting1, greeting2]) greeter.greet()9 là nó lưu trữ các định nghĩa cùng với đối tượng, miễn là chúng được định nghĩa trong Booyaa! Howdy!2. Trong trường hợp của chúng tôi, chúng là như vậy khi chúng tôi lưu trữ đối tượng lời chào với dill, chúng tôi thực sự có thể tải lại đối tượng ngay bây giờ import dill dill.dump(greeter, open("greeter.pkl", "wb")) >>> import dill >>> greeter = dill.load(open("greeter.pkl", "rb")) >>> greeter.greet() Booyaa! Howdy! Nó đã làm việc Nhưng chỉ lưu trữ các định nghĩa trong Booyaa! Howdy! 2 không phải trong các mô-đunGiả sử chúng ta định nghĩa Booyaa! Howdy!6 trong một mô-đun import pickle pickle.dump(greeter, open("greeter.pkl", "wb"))9 người chào hỏi. py def greeting1(): return "Booyaa!" def greeting2(): return "Howdy!" class Greeter: def __init__(self, greetings): self.greetings = greetings def greet(self): for greet in self.greetings: print(greet()) import dill from greeter import Greeter, greeting1, greeting2 g = Greeter([greeting1, greeting2]) dill.dump(g, open("greeter.pkl", "wb")) Sau đó, dưa chua lại không tải được khi Booyaa! Howdy!7 bị thiếu hoặc bỏ lỡ các định nghĩa đúng > >> import dill >>> greeter = dill.load(open("_notebooks/greeter.pkl", "rb")) Traceback (most recent call last):File " cách giải quyết. chuyển các định nghĩa sang Booyaa! Howdy! 2Bạn có thể giải quyết vấn đề này bằng cách > >> import pickle >>> pickle.load(open("greeter.pkl", "rb")) Traceback (most recent call last):File "2 các định nghĩa đã nhập greeter = Greeter([greeting1, greeting2]) greeter.greet()0 greeter = Greeter([greeting1, greeting2]) greeter.greet()1 Và điều này hoạt động greeter = Greeter([greeting1, greeting2]) greeter.greet()2 Tránh sử dụng > >> import pickle
>>> pickle.load(open("greeter.pkl", "rb"))
Traceback (most recent call last):File " |