Please ignore secret bonuses. Secret tests do NOT award bonus. Max hw grade is 30+2 bonus efficiency

Do you need help?

Notice Board

Per partecipare al corso di Fondamenti di programmazione 2023-24 loggatevi e attivatelo nella vostra pagina dei corsi preferiti. A quel punto il corso appare nel menù personale cliccando sul proprio avatar. Per i materiali degli anni precedenti seguite lo stesso metodo.

To join the Programming/Lab 2023-24 course, log-on and select it on the my courses page. It will appear on the personal menu of your avatar. For earlier years use the same method.

C'è differenza nell'usare diversi tipi di 'import'?

Alexander S.C. (260 points)
1 2 4
in Programmare in python by (260 points)
closed by

Mentre programmavo, più volte mi è venuto questo dubbio: esistono svantaggi\vantaggi nell'usare un tipo di ' import ' rispetto all'altro?

( es. ' import module '  /  ' from module import foo ' ' from module import * ' )

Io uso principalmente ' from module import * '  perché trovo abbia 2 vantaggi principali:

1- Mi permette di avere a mia disposizione tutte le funzioni della libreria di cui potrei aver bisogno durante la scrittura del codice, togliendomi il pensiero di dover andare ad importare ogni singola funzione che mi potrebbe servire sul momento;

2-Mi permette di chiamare una funzione, senza la necessità di dover ogni volta usare il prefisso ' module. ';

Nonostante questo ho visto nelle lezioni ( ma anche online), che molti programmatori usano alternativamente ' import module ' e ' from module import foo ' , evitando come la peste quello che uso io, e qui ritorno alla mia domanda, ci sono vantaggi/svantaggi (che magari non vedo), non solo nell'uso di ' form module import * ' , ma nell'uso di tutti i tipi di ' import '

E quali sono? 

483 views
closed with the note: answered

2 Answers

_andrea_ (45670 points)
11 42 297
by (45.7k points)
' From module import foo ' importa solo la specifica funzione, quindi occupa meno memoria. Dal punto di vista del tempo non saprei, ma credo che importare cento funzioni o importarne una sia diverso, anche se di poco. Comunque penso sia meglio importare solo quelle di cui hai bisogno
andrea.sterbini (207920 points)
750 1267 2373
by (208k points)

Importare tutte le funzioni ne crea degli alias nel namespace globale.
Questo impedisce di far convivere funzioni e classi che hanno lo stesso nome in moduli diversi.
Ad esempio se devi usare il modulo math ed anche il modulo cmath (funzioni su numeri complessi) non puoi importarli entrambi (con *) perchè quando importi il secondo tutte le sue funzioni sostituiscono quelle del primo.
Ne possono nascere bug difficili da "vedere" per cui in genere si tende

  • a importare solo le funzioni necessarie con from nome_modulo import nomefunzione
  • oppure ad abbreviare il nome del modulo ad esempio import numpy as np e poi chiamare np.nomefunzione