Python – cose dimenticate (da me)

Sapete la memoria –la mia. E anche se Python (versione 3.x) è uno dei miei linguaggi di programmazione preferiti capita che perdo ore per non ricordare cose che sapevo, che ho usato tante volte e –adesso vi conto.

Copiare liste
Non è come mi è venuto da fare, ecco la versione che viene in mente al volo, senza stare lì a pensarci su. Identica per le versioni 2 e 3, cambia solo print che da parola chiave è diventato funzione.

copy2.py

L = [1, 2, 3]
M = L
print L
print M

print "\nmodifico L"
L[1] = 10
print L
print M

copy3.py

L = [1, 2, 3]
M = L
print(L)
print(M)

print("\nmodifico L")
L[1] = 10
print(L)
print(M)

Uh! correggo subito:

copy3in.py

L = [1, 2, 3]
M = L
print(L)
print(M)

print("\nmodifico L")
L.append(4)
print(L)
print(M)

print("\ncambio L")
L = [10, 20, 30, 40]
print(L)
print(M)

print("\ncome copiare")
L = [1, 2, 3]
M = list(L)
print(L)
print(M)

print("\ned ecco")
L[1] = 0
print(L)
print(M)

Intanto anche append() e funzioni similari funzionano come la versione niubba. Se invece cambio la lista l’equivalenza con la vecchia versione viene persa.

Ma il sistema vero per copiare è usare la funzione list.

Tutte cose che sapevo (OK, liberi di non credermi ma davvero, avevo già affrontato questo in passato).

Chiamata a funzione
Un’altra cosa dimenticata mi è capitata nel debug (che è ancora in corso). Mentre per le liste rimando alla documentazione quest’ultima è logica e risaputa da tutti. La so anch’io ma sapete com’è –la memoria.

func.py

def f(x):
  return x * x

# main
print(f(3))

g = f

print(g(5))

Notare i nomi economici, sto vedendo Haskell e sono stato contagiato. Notare come si può copiare la funzione f chiamandola g. Anzi le due sono la stessa funzione; cambia solo il nome. Quasi come in Haskell, dove però si esagera.

Ma tornando al dunque ho scoperto che c’è exit anche senza dover importarla da sys. Ecco la prima versione:

exit.py

print("prima di exit")
exit
print("dopo exit")

non funziona, ovviamente perché non è vista come una chiamata alla funzione con quel nome, mancano le parentesi, roba che fin dai tempi del C 😐

exit-f.py

print("prima di exit")
exit()
print("dopo exit")

Sì lo so, colpa mia, devo stare più attento. E consultare il manuale (online). E, dopo aver progettato con carta matita e gomma, controllare ogni singola parte (classe, funzione, sezione di codice) 😐

Bon, torno al debug, ancora non funziona 😡

🤩

Posta un commento o usa questo indirizzo per il trackback.

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo di WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Google photo

Stai commentando usando il tuo account Google. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.

%d blogger hanno fatto clic su Mi Piace per questo: