cuốn sách gpt4 ai đã làm

Tại sao thứ tự khi tôi muối lại khác với khi tôi muối?

In lại Tác giả: Vũ trụ không gian Thời gian cập nhật: 2023-11-03 11:26:16 33 4
mua khóa gpt4 Nike

Tôi hơi bối rối về tính bền vững của biến python, trong mã của tôi, tôi sử dụng đoạn mã sau để làm cho các tham số mô hình tồn tại trong các lần lặp nhất định

 với open('W_Hs_Hu_iter'+str(inx)+'.pickle', 'wb') là f:
Pickle.dump((self.W,self.Hs,self.Hu),f)

Sau một thời gian dài lặp lại, tôi đã thử sử dụng

Tải mô hình
với open('W_Hs_Hu_iter450.pickle', 'rb') là f:
W,Hs,Hu=pick.load(f)
#W,Hu,Hs= dưa chua.load(f)

Nhưng tôi kiểm tra thì thứ tự của Hs và Hu sai? Liệu điều đó có xảy ra không?

câu trả lời hay nhất

Đây là một phần của một thể hiện của lớp trong đó các giá trị thuộc tính được hoán đổi sau phần chọn.

>>> lớp Foo(đối tượng):
... một = 1
... b = 2
... def __init__(self, c,d):
... self.c = c
... self.d = d
... thanh def (tự):
... return self.a,self.b,self.c,self.d
...
>>> f = Foo(3,4)
>>> _f = dưa chua.dumps(f)
>>> fc,fd = fd,fc
>>> fb,fa = fa,fb
>>> f_ = dưa chua.loads(_f)
>>> f_.bar()
(1, 2, 3, 4)
>>> f.bar()
(2, 1, 4, 3)

Vì vậy, điều này hoạt động như mong đợi. Tuy nhiên, python chọn các lớp theo tham chiếu, vì vậy nếu bạn thay đổi định nghĩa lớp, nó dường như thay đổi các thuộc tính thể hiện.

>>> g = Foo(3,4)
>>> _g = dưa chua.dumps(g)
>>> gc,gd = gd,gc
>>> Foo.a,Foo.b = Foo.b,Foo.a
>>> g_ = dưa chua.loads(_g)
>>> g_.bar()
(2, 1, 3, 4)
>>> g.bar()
(2, 1, 4, 3)

Điều này sẽ rõ ràng hơn nếu bạn có một danh sách hoặc một số chuỗi khác làm thuộc tính lớp. Vì vậy, hãy thêm một số đối tượng danh sách vào lớp.

>>> Foo.a = []
>>> Foo.zap = lambda self:self.a
>>> Foo.baz = lambda self,x:self.a.append(x)
>>>
>>> h = Foo(3,4)
>>> h.baz(0)
>>> h.baz(1)
>>> h.zap()
[0, 1]
>>> _h = dưa chua.dumps(h)
>>> h.baz(2)
>>> h.baz(3)
>>> h_ = dưa chua.loads(_h)
>>> h_.zap()
[0, 1, 2, 3]

Điều này là do giá trị của danh sách thực sự được lưu trữ trên thuộc tính lớp chứ không phải thuộc tính thể hiện. Đây là một trong nhiều ví dụ về loại hành vi này.

Nếu bạn muốn giữ nguyên phiên bản "nguyên trạng" (tức là không được lưu trữ theo tham chiếu) thì bạn nên sử dụng thì là Thực hiện dưa chua. Nhưng,thì là Dưa chua sẽ lớn hơn.

>>> nhập khẩu thì là
>>> _h = dill.dumps(h)
>>> h.baz(4)
>>> h.baz(5)
>>> h_ = dill.loads(_h)
>>> h_.zap()
[0, 1, 2, 3]
>>> h.zap()
[0, 1, 2, 3, 4, 5]

Giới thiệu về trăn - Tại sao thứ tự khi tôi không muối lại khác với khi tôi dưa? , chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/32933522/

33 4 0
không gian vũ trụ
Hồ sơ

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá taxi Didi miễn phí
Phiếu giảm giá taxi Didi
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress