2017-06-21 3 views
1

Ich war auf der Suche durch die quicktions Fraktionen Bibliothek und ich fand diese cython Syntax ich noch nie gesehen habe:Seltsam Cython Syntax

an, ad = (<Fraction>a)._numerator, (<Fraction>a)._denominator 

Was bedeutet (<Fractions>a) repräsentieren? Es scheint, als wäre es eine Art Speicherzuweisung. Aber ich bin mir nicht sicher.

Antwort

5

It's a type cast.

Es sichert Cython, dass das Objekt wirklich ein Fraction so ist, dass es die _numerator und _denominator Attribute des cdef Typ zugreifen können. Ohne die Umwandlung können nur die generischen Python-Lookup-Mechanismen verwendet werden, um Attribute zu finden, die es Ihnen nicht erlauben, auf Attribute der Typen public von cdef zuzugreifen.

Es wird nicht überprüft, ob es tatsächlich der richtige Typ ist. Wenn Sie also nicht 100% sicher sind, dass das Objekt tatsächlich ein Bruch ist, sollten Sie stattdessen <Fraction?> überprüfen.

4

Das ist nur die Cython syntax for type casting. In diesem Fall wird a in einen Fraction Typ gegossen. Die zusätzlichen Klammern sind erforderlich, um zu signalisieren, dass Sie a und die _numerator Eigenschaft des gegossenen Werts, nicht a._numerator werfen möchten.

+1

Diese Antwort war 22 Sekunden schneller, denke ich, so dass alle Dinge gleich sein, diesen zu akzeptieren :) – DavidW

+1

@DavidW Schätze es :) Ihr gibt einige zusätzliche Informationen, so ist es wahrscheinlich _correcter_. – jdehesa

+0

Wer 7 Stimmen hat, gewinnt zuerst! – MLhacker