Eine Möglichkeit wäre, explizit zu überprüfen, ob das Argument eine Liste oder eine Zeichenfolge ist, und es in bedingten Klauseln anders zu behandeln.
Eine Alternative, die ich denke, könnte schöner sein (wenn es für Ihren Anwendungsfall geeignet ist) könnte die folgende sein:
def runthis(*stringinput):
for t in stringinput:
t = t.upper()
print(t)
print()
runthis("test") # TEST
runthis("another", "test") # ANOTHER TEST
runthis(*["one", "final", "test"]) # ONE FINAL TEST
Doch dieser Ansatz nicht geeignet ist, wenn Aufruf Codelisten zur Verfügung stellen können, ohne Splatting .
Dieser Ansatz beruht auf der Nutzung des *
Betreiber, hier die auf zwei verschiedene Arten verwendet wird.
in der Funktionsdefinition Kontext (*stringinput
), dieser Operator macht Wesentlichen stringinput
ein variadische Argument; Das heißt, ein Argument, das alle Argumente, die an die Funktion übergeben werden, in ein Tupel "hochlädt", das für die Zwecke von runthis
wie eine Liste wirkt (es kann iteriert werden). Wenn ich einen Anruf machen würde runthis("foo", "bar", "baz")
, hätte stringinput
den Wert ("foo", "bar", "baz")
.
Sie können mehr über Variadic Argumente here lesen.
Im Funktionsaufrufkontext (runthis(*["one", "final", "test"])
) "splat" oder entpackt dieser Operator jedes Element der Liste. Im Wesentlichen entspricht runthis(*["one", "final", "test"])
runthis("one", "final", "test")
.
Sie können mehr über Splatting here lesen.
Also, auch wenn "stringinput" eine Liste von Strings wäre, würde Ihr Code diese nicht verändern. –
Scheint netter, immer eine Liste von Zeichenfolgen zu akzeptieren, die nur eine einzelne Zeichenfolge enthalten können. Was ist der Wert dafür, dass der Anrufer Ihnen eine nicht aufgelistete Zeichenfolge übergeben kann? – amalloy