Questo è arrivato in a recent PyCon talk.Perché è valido assegnare ad una lista vuota ma non ad una tupla vuota?
La dichiarazione
[] = []
non fa altro significativo, ma non gettare un'eccezione neanche. Ho la sensazione che questo debba essere dovuto alle regole di spacchettamento. Si può fare con le liste tuple unpacking anche, per esempio,
[a, b] = [1, 2]
fa quello che ci si aspetterebbe. Come conseguenza logica, anche questo dovrebbe funzionare, quando il numero di elementi da decomprimere è 0, il che spiegherebbe perché l'assegnazione a una lista vuota è valida. Questa teoria è ulteriormente supportata da ciò che accade quando si tenta di assegnare una lista non vuota di una lista vuota:
>>> [] = [1]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: too many values to unpack
sarei felice con questa spiegazione, se lo stesso sarebbe anche vero per le tuple. Se possiamo decomprimere in una lista con 0 elementi, dovremmo anche essere in grado di decomprimere una tupla con 0 elementi, no? Tuttavia:
>>>() =()
File "<stdin>", line 1
SyntaxError: can't assign to()
Sembra disimballaggio regole non vengono applicate per le tuple come lo sono per le liste. Non riesco a pensare a nessuna spiegazione per questa incoerenza. C'è una ragione per questo comportamento?
@ozgur ma il disimballaggio con le tuple funziona: 'a, b = 1, 2' è valido ... –
Non sono sicuro, ma penso che [] = []' non stia disimballando. Tuttavia, sono rimasto sorpreso quando ho visto che sarebbe stato possibile: '[a, b] = [1, 2]'. Invece, vorrei fare 'a, b = (1, 2)' – ozgur
Ho la sensazione che non ci sarà alcun principio interessante al lavoro qui. La migliore risposta sarà probabilmente qualcosa del tipo "Ecco la sezione del generatore di codice dove controlla la validità del LHS di un compito, ed ecco il controllo che cattura'() 'ma lascia' [] 'through". Forse sarà perché '()' è riconosciuto come costante o qualcosa del genere. – user2357112