Akzeptieren von ganzen Zahlen als Schlüssel von ** kwargs

8

Keywords müssen Zeichenfolgen sein

%Vor%

Aber durch einige schwarze Magie können Namespaces das umgehen

%Vor%

Warum? Und wie ? Können Sie eine Python-Funktion implementieren, die Ganzzahlen im kwargs -Mapping erhalten kann?

    
wim 11.09.2017, 21:42
quelle

1 Antwort

6
  

Könnten Sie eine Python-Funktion implementieren, die Ganzzahlen im Kwargs-Mapping empfangen kann?

Nein, das kannst du nicht. Die Python-Evaluierungsschleife behandelt Aufruffunktionen, die in Python-Code definiert sind, anders als den Aufruf eines in C-Code definierten Callable Objects. Der Python-Auswertungsschleifencode, der die Erweiterung von Schlüsselwortargumenten behandelt, hat die Tür für nicht-string-Schlüsselwortargumente fest geschlossen.

Aber SimpleNamespace ist kein Python-definiertes Callable, es ist vollständig in definiert C-Code . Es akzeptiert Schlüsselwortargumente direkt und ohne Validierung. Deshalb können Sie ein Wörterbuch mit Schlüsselwörtern übergeben, die keine Zeichenfolgen sind.

Das ist vielleicht ein Fehler; Sie sollten die C-API-Argumentparsing-Funktionen verwenden, die alle gegen nicht- String-Schlüsselwortargumente Aber SimpleNamespace wurde nur für das Objekt entwickelt, das sys.implementation data * und war nicht wirklich für andere Zwecke konzipiert.

Es könnte andere Ausnahmen geben, aber sie sind alle C-definierte Callables, nicht Python-Funktionen.

* Die Methode time.get_clock_info() wird ebenfalls ausgeführt eine Instanz der SimpleNamespace -Klasse; Es ist der einzige andere Ort, an dem der Typ derzeit verwendet wird.

    
Martijn Pieters 11.09.2017, 22:11
quelle

Tags und Links