-1

Beim Testen der Python-Parameterliste mit einem einzigen Argument habe ich ein merkwürdiges Verhalten mit print gefunden.Python-Parameterliste mit einem Argument

>>> def hi(*x): 
...  print(x) 
... 
>>> hi() 
() 
>>> hi(1,2) 
(1, 2) 
>>> hi(1) 
(1,) 

Könnte jemand mir erklären, was das letzte Komma in hi(1) ‚s Ergebnis bedeuten (das heißt (1,))

+2

Es bedeutet, dass der gedruckte Wert ein Tupel mit einem einzelnen Element darin ist. – Rockybilly

Antwort

1

Eigentlich ist das Verhalten nur ein wenig‚seltsam.‘ :-)

Ihr Parameter x ist mit einem Stern vorangestellt, was bedeutet, dass alle Argumente, die Sie an die Funktion übergeben, in ein einzelnes Tupel "aufgerollt" werden, und x wird das Tupel sein.

Der Wert (1,) ist die Art und Weise Python ein Tupel von einem Wert schreibt, es mit (1) zu kontrastieren, die die Nummer 1.

Hier allgemeinen Fall ist ein mehr sein würde:

def f(x, *y): 
    return "x is {} and y is {}".format(x, y) 

Hier sind einige Läufe:

>>> f(1) 
'x is 1 and y is()' 
>>> f(1, 2) 
'x is 1 and y is (2,)' 
>>> f(1, 2, 3) 
'x is 1 and y is (2, 3)' 
>>> f(1, 2, 3, 4) 
'x is 1 and y is (2, 3, 4)' 

Beachten Sie, wie das erste Argument in t werden x und alle nachfolgenden Argumente verpackt geht er tuple y. Vielleicht haben Sie die Art und Weise gefunden, wie Python Tupel mit 0 oder 1 Komponenten ein wenig seltsam darstellt, aber es macht Sinn, wenn Sie erkennen, dass (1) eine Zahl sein muss und es daher eine Möglichkeit geben muss, ein Ein-Element-Tupel darzustellen. Python verwendet nur das abschließende Komma als Konvention, das ist alles.

+0

Ich akzeptierte Ihre Antwort wegen der 'Ein-Element-Tupeldruckkonvention' Erklärung. Es wäre sehr angenehm, wenn Sie erklären könnten, warum '(1)' als Zahl '1' interpretiert wird. – transang

+1

Sicher, im Allgemeinen ändern Klammern die Bedeutung eines Ausdrucks nicht. Zum Beispiel können Sie '4+ (1)' sagen und es wird 5 sein, genauso wie '4 * (2-1)' 4. Da die Konvention ist, Klammern für die Gruppierung von Teilausdrücken zu verwenden, der Designer von Python dachte, es wäre zu verwirrend, die Bedeutung zu überladen, um sowohl Gruppierung als auch Ein-Element-Tupel zu bedeuten. Auch Python hat eine 'type' Funktion. In der Tat ist 'type ((2))' 'int' und' type ((2,)) 'ist' tuple'. Wir wollen nicht, dass es Zweideutigkeiten gibt, die es gibt, wenn "(2)" als Tupel behandelt würde. –

+0

Vielen Dank für die ausführliche Antwort. Ich habe gerade [neue Antwort] erstellt (http://stackoverflow.com/questions/40710455/why-single-element-tuple-is-interpreted-as-that-element-in-python). Lassen Sie mich hier die Antwort auf Ihren Kommentar verlinken – transang

Verwandte Themen