Sie sagen
Es scheint, dass Python automatisch die Typumwandlung von Liste tut
auf Tupel Das zweifelhaft ist. Da Listen und Tupel beide sequence types sind, implementieren sie beide viele der gleichen Verhaltensweisen, und die von Ihnen verwendete GUI-Bibliothek darf keines der Listen-Verhalten verwenden.
Es ist wahrscheinlich fein dies in vielen Fällen zu tun, aber beachten Sie, dass die Listen ein wenig mehr Platz als Tupel nehmen Sie:
>>> sys.getsizeof((1, 2))
72
>>> sys.getsizeof([1, 2])
88
und kann auf einige Dinge langsamer als Tupel sein:
>>> lst, tup = [1, 2], (1, 2)
>>> def unpack(x):
... a, b = x
...
>>> %timeit unpack(tup)
10000000 loops, best of 3: 163 ns per loop
>>> %timeit unpack(lst)
10000000 loops, best of 3: 172 ns per loop
Dies sind sehr kleine Unterschiede, die bis Sie viel größere Maßstäbe erreichen wird keine Rolle - wie in Milliarden von Anrufen - s o die Abwägung könnte sich lohnen.
Dennoch sehe ich nicht, dass Leute das sehr oft tun. Es scheint ein guter Lesbarkeitstrick zu sein, aber unter bestimmten Umständen könnte es unerwartete Folgen haben. Wenn Sie beispielsweise eine Liste übergeben, die Sie später erneut verwenden möchten, müssen Sie darauf achten, sie nicht innerhalb der Funktion zu ändern. Schließlich, wie zu Recht darauf hinweist, neigen Tupel und Listen zu Mittelwert etwas andere Dinge; Wenn Sie sie auf unkonventionelle Weise verwenden, kann dies den Lesbarkeitsschub zunichte machen, den Sie suchen.
Ich mag die Art, wie Sie es geschrieben haben, scheint mehr gut definiert imo. – jamylak
Python führt keine Typumwandlung von Liste zu Tupel durch. Dies ist [ente typing] (http://en.wikipedia.org/wiki/Duck_typing) in Aktion: vermutlich benötigt 'window.set_pos' eine Sequenz von zwei Items, aber nicht unbedingt ein 2-'Tuple' (ich sage vermutlich da ich nicht weiß, woher 'window.set_pos' stammt oder was es tut. – Chris
Schreiben Sie die Funktion so um, dass sie zwei Argumente anstatt eines 2-Tupels verwendet. –