NOTA BENE: NON si tratta dell'uso di eval(), si tratta della qualità potenziale (o meno) di un libro in cui viene utilizzato e insegnato. COSÌ ha già innumerevoli discussioni su eval() in Python.Python - Il libro di Zelle usa eval(), è sbagliato?
Rischiando di invitare l'ira ei downvotes di SO, ho comunque deciso di porre questa domanda, per ogni evenienza. Per favore, sopportami. Ho provato Google e SO per questa specifica domanda (come vedrai) e non ho ottenuto nulla. Potrei essere cieco, però.
Questa domanda riguarda l'uso della famigerata funzione eval().
C'è un relativamente ben noto (e ben recensito, come si può vedere) libro di John Zelle: http://www.amazon.com/Python-Programming-Introduction-Computer-Science/dp/1590282418/ref=pd_sim_b_3
Tecnicamente, è un libro CS1 che utilizza Python come linguaggio di programmazione. Abbastanza corretto, questo tipo di responsabilità trae dalle spalle dell'autore ("Ehi, sto cercando di insegnarti qualcosa di ampio qui, non tutti questi dettagli di sintassi e sicurezza"), ma quando ho iniziato a leggerlo ho notato, letteralmente il primo esempio, l'uso di
x = eval(input("Enter your number: "))
dove x deve essere un int e quindi dobbiamo convertire input dell'utente in un int.
Sto usando Python 2.7.4 e il libro parla di Python 3, quindi ho dovuto affrontare un sacco di problemi con print() e input() ed eval() fin dall'inizio e ho dovuto fare qualcosa ricerca per far funzionare gli esempi. Nel corso della mia ricerca, ho letto innumerevoli opinioni su eval() in Python (principalmente qui su SO) che si riducono quasi sempre a un rischio di sicurezza, a un sovraccarico tecnico non necessario e così via. Le domande degli utenti erano molto più elaborate (ce n'era una sull'utilizzo di eval() quando si esegue un progetto wxPython), quindi non posso garantire la totale somiglianza tra il mio caso e i loro casi, ma ...
Quindi, lo ammetto, non sono troppo avanti nel libro, ma ho raggiunto il punto in cui, un po 'più avanti, l'autore ha spiegato l'uso di eval() senza alcun riferimento alla sua natura controversa. Ha praticamente detto quello che ho appena detto: abbiamo bisogno che x diventi un int, quindi ecco un modo pratico per farlo. E sembra che lo stia usando da sempre.
La mia domanda è questa: se, fin dall'inizio, un autore commette un tale errore (o NON è un errore? Potrei mancare qualcosa qui), è un libro che vale la pena imparare? Credo che il signor Zelle sia un grande insegnante di CS, e mostra, ma che lo voglia o no, le persone impareranno comunque Python dal suo libro, oltre agli algoritmi e all'arte della programmazione. Vale quindi la pena di imparare Python da un libro che tace su un problema apparentemente universale nella comunità Python? Non voglio che il signor Zelle sia un hacker di Python e scopra tutti i suoi segreti, ma piccoli dettagli come questi possono creare o distruggere qualcuno che è auto-insegnante/auto-apprendimento. Quale sarà il tuo consiglio riguardo a questo materiale didattico?
P.S. D'altra parte, farmi fare un bel po 'di ricerca e sperimentazione (inconsapevolmente) fin dall'inizio è abbastanza bello :-)
Grazie!
Ho pensato che eval fosse malvagio solo in JavaScript –
@JasonSperske È malvagio ovunque – jamylak
Suggerire eval() invece di int() sembra fuorviato. –