Bedeutung von '\ 0 \ 0' in Python?

8

Ich schaue mir eine API von Drittanbietern an und sie haben folgenden Code:

%Vor%

Ich verstehe, dass 'NULL' bedeutet 'NULL%code%' , hat %code% eine spezielle Bedeutung oder bedeutet es nur 2 %code% s?

    
flashburn 07.11.2016, 18:42
quelle

3 Antworten

10

Die Klasse array akzeptiert ein Formatzeichen (Typcode genannt) gefolgt von einem Initialisierer. H bedeutet eine vorzeichenlose Abkürzung mit einer Mindestgröße von 2 Bytes, also erfüllt '* n%code%' dies. Der %code% -Teil soll das gesamte Array auf NULL Bytes initialisieren.

    
AndyG 07.11.2016 18:45
quelle
7

Es stellt nur sicher, dass zwei Bytes n mal bereitgestellt werden, so dass die Größe des Arrays gleich n ist. Wenn 'size == n//2' bereitgestellt wurde, würde das resultierende Array aufgrund des Typs " 'H' " ( Code 2 erfordert 3 bytes ); das ist offensichtlich gegensätzlich:

%Vor%

Beachten Sie, dass Sie in Python bytes , wenn Sie das gleiche Snippet benötigen, ein initializer -Objekt als array -Argument für u'' :

bereitstellen %Vor%

Da Sie in Python 2 auch keine '''C'''I'''2' -Zeichenfolge angeben können, bleibt das Verhalten genau gleich.

Also 4 ist aus Bequemlichkeit Gründen nichts mehr. Keine Semantik ist an 64bit angehängt.

Keine Semantik ist wirklich an b'10' angehängt (wie in '[0] * n'b'\' * n ) bytearray ist nur eine andere Zeichenfolge in Python .

Nehmen Sie als weiteres Beispiel für dieses Verhalten die Initialisierung eines Arrays mit dem Typcode array für vorzeichenlose Ints mit einem Minimum von bytearray bytes, aber int für bytearray(int) builds von Python.

Im Sinne des von Ihnen bereitgestellten Snippets initialisieren Sie das Array, indem Sie Folgendes tun:

%Vor%

Ja, viermal die 3.7+ Zeichenkette, um %code% Elemente zu erhalten.

Als final Note - werden die folgenden Timings für Python 3 ausgeführt, aber 2 ist das gleiche - Sie fragen sich vielleicht, warum er %code% anstelle von verwendet hat das intuitiver aussehende %code% , um das Array zu initialisieren. Nun, es ist ziemlich schnell:

%Vor%

Natürlich können Sie es besser machen (für andere Typencodes als %code% ), indem Sie %code% nach %code% eingeben. Eine Möglichkeit, eine %code% zu initialisieren, besteht darin, ein %code% als Anzahl der zu initialisierenden Elemente anzugeben mit Nullbytes:

%Vor%

Aber, wenn ich mich richtig erinnere, könnte der %code% -Weg der Initialisierung eines Bytearrays in %code% : -) veraltet sein.

    
Jim Fasarakis Hilliard 07.11.2016 18:53
quelle
6

Es sieht so aus, als ob diese Funktion ein Array aus 16 Bits zurückgibt; Daher steht %code%%code% wahrscheinlich für das Erstellen von zwei Bytes (das sind 16 Bits) von Daten. Mit anderen Worten, es gibt n Wörter von zwei Bytes zurück.

    
Thomas Baruchel 07.11.2016 18:45
quelle