Korrekte Verwendung des Operators * in einem onel-if-Anweisungspython

8

Ich würde gerne wissen, ob es möglich ist, den Operator * online zu verwenden, wenn die folgende Funktionalität erreicht werden soll:

%Vor%

Ich dachte, ich könnte es einfach sagen

%Vor%

aber es stellt sich heraus, das ist das gleiche wie sagen

%Vor%

was für *None keinen Sinn ergibt.

Ich habe es müde, die erste Option in Klammern zu setzen, aber das wirft nur SyntaxError: can't use starred expression here

%Vor%     
Indigo 11.10.2017, 18:50
quelle

4 Antworten

4

Ja, Sie müssen eine leere Sequenz angeben , nicht None :

%Vor%

Aber ich denke, Ihr if -else -Ansatz ist viel vorzuziehen. Ich muss es mir nur einmal ansehen und ich weiß sofort, was vor sich geht. Mit dem bedingten Ausdruck muss ich darüber nachdenken.

Dies ist auch ein Bedingungsausdruck , keine "one-line if-Anweisung".

    
juanpa.arrivillaga 11.10.2017, 18:55
quelle
3

Eine prägnantere Lösung, wenn auch mit einer etwas anderen Semantik:

%Vor%

Wenn bool(node['args']) zu False auswertet, wird das leere Tupel () entpackt (in nichts) und übergeben; Andernfalls wird node['args'] entpackt und übergeben.

    
Josh 11.10.2017 19:09
quelle
1

Der node['args'] kann ein tuple (oder Sequenz) oder None sein.

Wenn Ihre Funktion wie folgt definiert ist:

%Vor%

Sie können es aufrufen, indem Sie node['args'] entpacken. Wenn node['args'] jedoch None ist, müssen Sie durch das leere Tupel () (oder leere Sequenz) ersetzen.

Sie können Ihre Funktion wie folgt mit *(node['args'] or ()) aufrufen:

%Vor%

Demo

%Vor%

Sie erhalten:

%Vor%     
Laurent LAPORTE 11.10.2017 19:08
quelle
0

Die gewünschte Syntax kann mit einer logischen Verknüpfung erreicht werden:

%Vor%

Natürlich sollte node['args'] eine Sequenz oder None sein, nicht zum Beispiel null.

In Python ist None logisch False , so dass or operation den zweiten Operanden zurückgibt - () . Wenn das erste Argument nicht leer ist, gibt or es zurück, ohne den zweiten Operanden auszuwerten.

Bemerkenswert ist auch, dass * kein Operator ist. Es ist eine Syntax, um Funktionen mit Positionsargumenten zu versehen.

    
Roman Susi 11.10.2017 19:17
quelle

Tags und Links