Sie können dies nicht tun, ohne der Funktion anzugeben, welcher Rückgabetyp benötigt wird, oder den Funktionsnamen zu maskieren (siehe meinen Kommentar).
Lassen Sie mich zeigen, warum.
In Perl können wir dies tun, indem Sie den Kontext des Aufrufs testen. Der erste (einzelne Rückgabewert) wäre ein skalarer Kontext und der zweite im Listenkontext. Wir könnten testen mit einer Funktion namens wantarray
(Google "Python wantarray" - andere Suchmaschinen sind verfügbar). Perl ist aus diesem Grund und vielen anderen ungewöhnlich, wenn nicht einzigartig.
Python funktioniert nicht so, obwohl die Introspektion im Vergleich zu anderen Sprachen extrem sein kann. Die Form einer Zuweisung ist:
name = object
wo name
ist eine typenlos Referenz. Also:
mat = ReadBinFile(filename)
Auch wenn von einigen hinterhältigen Mitteln wir den Byte-Code überprüft, hätten wir keine Möglichkeit zu wissen, welche Klasse von Objekt mat
sollte verweisen. A list
, ein tuple
, ein int
, ein bird
, ein plane
?
Die Syntax Sie zeigen:
[mat,titles] = ReadBinFile(filename)
ein Rätsel ist. Obwohl gültig, hat es keinen praktischen Unterschied zu:
mat,titles = ReadBinFile(filename)
was natürlich ein Tupel ist. Also, wie können wir sagen, ob:
mat = ReadBinFile(filename)
sollte ein tuple
, ein list
sein, oder was auch immer Objektklasse mat
soll verweisen.
Nach all dem ist meiner Meinung nach das Zurückbringen von Objekten verschiedener Klassen eine zweifelhafte Übung, sogar in Perl.Es gibt einige Ausnahmen, die unter bestimmten Umständen None
zurückgeben. Warum zweifelhaft? Weil der Code schwer zu lesen, zu modifizieren und zu unterstützen ist.
Was ist Ihr Anwendungsfall dafür? Wenn Sie das zweite Tupel-Element nicht möchten, ignorieren Sie es einfach. – mhawke
Sie können dies nicht tun. Es ist sowieso keine großartige Idee. Packen Sie einfach das Ergebnis aus und löschen Sie alle Elemente, die Sie nicht möchten. – BrenBarn
Die Verwendung eines Generators über ein Tupel hat den Vorteil, die Zeit potenziell zu verkürzen (wenn jedes Element eine Weile braucht) –