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
Ja, Sie müssen eine leere Sequenz angeben , nicht None
:
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".
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:
Demo
%Vor%Sie erhalten:
%Vor%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.
Tags und Links python python-3.x