Software Development for Dummies

Oh Gesù è in inglese ?
in questo mondo tutto è in inglese, comunque qualcosa in italiano si trova

 

piotor

Pallone d'oro
  Moderatore
Parlando di Python, nel mondo scientifico (Dove lavoro) e' diventato dominante.

Il motivo e' la sua flessibilita'.

Python e' lento, a volte lentissimo, *ma* ti permette di scrivere codice funzionante in fretta. Se devi scrivere qualcosa nell'immediato per testare ipotesi, produrre grafici, fare data munging etc. riesci a farlo ~10x piu' velocemente rispetto ad un C++ per esempio. Poi questo lo paghi (potenzialmente) nella velocita' di esecuzione del codice, ma solo se si tratta di qualcosa estremamente pesante a livello di risorse.

Il motivo tecnico e' che in Python non dichiari i tipi, quindi quando scrivi a + b, python deve controllare cosa e' a, cosa e' b e se c'e' un'operazione definita tra i due. In C invece devi dire prima cosa sono e quindi l'operazione di somma e' gia' definita. Questo fa esplodere i tempi di computazione potenzialmente.

Pero' questo diventa un problema *solo* se ti trovi a runnare il codice piu' e piu' volte, quindi hai tutto il tempo, a posteriori, di ripensare il codice *se* serve. Dopotutto premature optimization is the root of all evil.

Inoltre, essendo Python scritto in C, puoi sempre capire dove ci sia il cono di bottiglia e riscrivere la funzione in C (Cython, snap) o usare strumenti "magici" come numba e renderla estremamente piu' efficiente.

In pratica, a livello di ricerca e di data science, Python e' l'equivalente di un coltellino svizzero on steroids. Lo puoi usare praticamente per qualsiasi utilizzo non estremo e anche in quei casi puoi fare un accrocchio per renderlo quasi paragonabile agli strumenti ad hoc disponibili sul mercato.
 

piotor

Pallone d'oro
  Moderatore
Tranquillo, massimo rispetto per la tua opinione, e visto che sei più esperto di me dovrei prenderne solo atto ?

Ti racconto che ho provato ha fare un piccolo algoritmo dove posso verificare se un determinato numero è primo o non è primo.

Risultato: In C l'ho fatto abbastanza facilmente grazie alla funzione switch, mentre in Python stavo cadendo in depressione ?
Codice:
def is_prime(num):
    prime = True # il nmero e' primo fino a prova contraria
    for i in range(2,int(num/2) + 1):
          if (num %i) ==0: # resto della divisione
               print(f"{i} divides {num}")
               prime = False
               break #se trovi un divisore basta e avanza
    print(prime)

Piu' facile di cosi' :)
 
Codice:
def is_prime(num):
    prime = True # il nmero e' primo fino a prova contraria
    for i in range(2,int(num/2) + 1):
          if (num %i) ==0: # resto della divisione
               print(f"{i} divides {num}")
               prime = False
               break #se trovi un divisore basta e avanza
    print(prime)

Piu' facile di cosi' :)
Cos'è sta roba? Perché in Python ci sono le parentesi graffe? Perché hai usato le variabili in inglese?? ?

Poi il ciclo for su Python non l'ho mai capita a fondo, è abbastanza confusionario a mio parere, ad esempio in C il for a prima occhiata è più semplice da capire ??‍♂️
 

piotor

Pallone d'oro
  Moderatore
un altro modo di approcciarlo, molto piu' Pythonic:
Codice:
def is_prime(num):
   # dammi tutti i divisori del numero con una list comprehension
    divisors = [elem for elem in range(2,num) if not (num % elem)]
    print("NOT PRIME") if divisors else print("PRIME")
 

piotor

Pallone d'oro
  Moderatore
Cos'è sta roba? Perché in Python ci sono le parentesi graffe? Perché hai usato le variabili in inglese?? ?

Poi il ciclo for su Python non l'ho mai capita a fondo, è abbastanza confusionario a mio parere, ad esempio in C il for a prima occhiata è più semplice da gestire ??‍♂️
le graffe sono f-strings, introdotte in python3.6. In pratica puoi inserire una variable in una stringa e lui la converte automaticamente. Moooolto utili quando devi loggare. passi da

Codice:
print( a + "_" + b + "_" +c  ...)

a

Codice:
print( f"{a}_{b}_{c}...")

Variabili in inglese perche' programmo "in inglese", quindi abitudine :D

cosa non ti e' chiaro del ciclo? in python puoi looppare qualsiasi oggetto che sia iterabile (tra l'altro in python c'e' proprio il concetto di iteratore, che e' molto comodo da usare).
 

piotor

Pallone d'oro
  Moderatore
un altro modo di approcciarlo, molto piu' Pythonic:
Codice:
def is_prime(num):
   # dammi tutti i divisori del numero con una list comprehension
    divisors = [elem for elem in range(2,num) if not (num % elem)]
    print("NOT PRIME") if divisors else print("PRIME")
QUesto e' un esempio lampante dei pro e contro di python.
La list comprehension puo' essere lentissima ma ti permette concettualmente e visivamente di compattare il codice in maniera bestiale. Se quel numero e' grande quell'operazione e' mostruosa, ma allo stesso tempo se uno legge il codice capisce subito cosa succede.
 
Alto