Pythons memoryview tut not support datetime64
or timedelta
. OK. Aber wenn ich versuche, ein memoryview
eines strukturierten Arrays zu erstellen, das eine datetime64
oder timedelta
enthält, scheint es zu funktionieren ... , wenn ich es nicht einer Variablen zuweisen!Warum verursacht das Erstellen dieser Speicheransicht einen ValueError nur beim Zuweisen zu einer Variablen?
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>
Diese Herausforderungen ernsthaft mein Verständnis der Art und Weise Python grundsätzlich funktioniert. Wie kann f()
und x = f()
anders sein, wenn man bedenkt, dass (1) IPythons REPL die Ausgabe sowieso _19
zuweist, und (2) die Funktion/Klasse memoryview
keine Möglichkeit hat zu wissen, was der Aufrufer mit seiner Ausgabe machen wird?
Ich führe den Code auf Python 3.4.1, numpy 1.10.0.dev + fbcc24f, auf Linux 2.6.32-431.23.3.el6.x86_64, Scientific Linux Release 6.6.
EDIT
auf Python 3.5, numpy 1.10.4, erhalte ich:
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
ich ein bug with numpy eingereicht haben, obwohl ich nicht ganz sicher bin, das ist, wo das Problem Lügen.
Trotz des ValueError war die Zuweisung in '[20] 'erfolgreich. Sehen Sie sich direkt nach der Zuweisung die Variable "x" an. Sie werden sehen, dass ihm tatsächlich ein Wert zugewiesen wurde. (Sorry, ich weiß nicht, was den ValueError verursacht.) –
@WarrenWeckesser Huh, tatsächlich tut es. Es kam mir nicht in den Sinn zu überprüfen. – gerrit
Das sieht aus wie ein Fehler im 'theading'-Modul von Python (versuchen Sie, den obigen Code in einem Skript ohne ipython auszuführen), ich habe noch nie so etwas gesehen. –