Pythons memoryview hiện not support datetime64
or timedelta
. Được. Nhưng khi tôi cố gắng tạo một memoryview
của một mảng có cấu trúc bao gồm datetime64
hoặc timedelta
, nó có vẻ hoạt động ... trừ khi tôi gán nó cho biến!Tại sao tạo bộ nhớ này chỉ tăng giá trị ValueError khi gán cho một biến?
In [19]: memoryview(zeros(10, dtype=[("A", "m8[s]")]))
Out[19]: <memory at 0x7f1d455d6048>
In [20]: x = memoryview(zeros(10, dtype=[("A", "m8[s]")]))
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
ValueError: cannot include dtype 'm' in a buffer
In [21]: x = _19
In [22]: x
Out[22]: <memory at 0x7f1d455d6048>
Điều này nghiêm túc thách thức sự hiểu biết của tôi về cách thức cơ bản của Python hoạt động. Làm thế nào có thể f()
và x = f()
khác nhau, vì (1) IPythons REPL gán đầu ra là _19
, và (2) chức năng/lớp memoryview
không có cách nào để biết người gọi sẽ làm gì với đầu ra của nó?
Tôi đang chạy mã trên Python 3.4.1, numpy 1.10.0.dev + fbcc24f, trên Linux 2.6.32-431.23.3.el6.x86_64, Bản phát hành khoa học Linux 6.6.
EDIT
Mở Python 3.5, numpy 1.10.4, tôi nhận được:
In [50]: memoryview(numpy.zeros(10, dtype=[("A", "m8[s]")]))
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
ValueError: cannot include dtype 'm' in a buffer
During handling of the above exception, another exception occurred:
SystemError Traceback (most recent call last)
<ipython-input-50-5d5ac6c085fa> in <module>()
----> 1 memoryview(numpy.zeros(10, dtype=[("A", "m8[s]")]))
SystemError: <class 'memoryview'> returned a result with an error set
tôi đã nộp đơn bug with numpy, mặc dù tôi không hoàn toàn chắc chắn đó là nơi mà vấn đề dối trá.
Mặc dù ValueError, phép gán trong '[20]' đã thành công. Hãy xem biến 'x' ngay sau khi gán. Bạn sẽ thấy rằng trên thực tế, nó đã được gán một giá trị. (Xin lỗi, tôi không biết điều gì đang gây ra lỗi ValueError.) –
@WarrenWeckesser Huh, quả thật vậy. Nó không xảy ra với tôi để kiểm tra. – gerrit
Điều này giống như một lỗi trong mô-đun 'theading' của python (thử chạy đoạn mã trên trong một kịch bản không có ipython), tôi chưa bao giờ thấy bất cứ điều gì giống như nó trước đây. –