SlideShare uma empresa Scribd logo
1 de 15
Baixar para ler offline
Introducing Python
by Example

Enrico Franchi
efranchi@ce.unipr.it


                       1
Outline                                       2

 Very (very )* short introduction to Python
 Some small examples
 Evolutionary game
Parlando del
futuro...                               3
We will perhaps eventually be
writing only small modules that are
identified by name as they are
used to build larger ones, so that
devices like indentation, rather than
delimiters, might become feasible
for expressing local structure in the
source language.

Donald E. Knuth, Structured
Programming with go to
Statements, 1974
Introduzione                                                 4

 Python è concepito da Guido van Rossum alla fine
 degli anni ‘80 per Amoeba
 Pubblico 1991, stabile 1994.
 Linguaggio di alto livello ed orientato agli oggetti.
 Utilizzato per programmazione di sistema e di rete, e
 calcolo scientifico, applicazioni desktop, integrazione di
 videogiochi, MMORPG backend, ...
 Si impone in ambito web/enterprise, con soluzioni
 come Zope/Plone, Django,Twisted, GAE, OpenERP.
5



READABILITY
  COUNTS
        Zen of Python
Oggetti in Python                              6

 In Python tutto è un oggetto:
   Un numero, una stringa sono oggetti
   Gli oggetti sono oggetti (ehm...)
   Una funzione è un oggetto
   Una classe è un oggetto
 Gli oggetti sono cittadini di prima classe,
 possiamo manipolarli riccamente e
 comodamente (introspezione, etc.)
 Possiamo fare, in definitiva, tutto
Tipizzazione in Python                                       7

 Python è un linguaggio ad oggetti a tipizzazione
 dinamica e forte
   Tipizzazione forte:
     Gli errori di tipo sono sempre generati. Es. Stringhe
     non diventano interi e viceversa
     Ogni oggetto ha una classe, questa non cambia
   Tipizzazione dinamica
     Gli errori di tipo sono generati a runtime
     Duck typing
Hello, world!                  8




 print	
  “Hello,	
  world!”
Dettagli implementativi                                    9

                                $ cat hello.py
 Tipicamente Python viene
                                #!/usr/bin/python
 compilato a byte-code e
 questo viene interpretato da   print "Hello, world!"
 una macchina virtuale (come
                                $ python hello.py
 Java)                          Hello, world!
 Diversamente da Java la        $ chmod 755 hello.py
                                $ ./hello.py
 compilazione è trasparente     Hello, world!
 per l’utente                   $ python
                                Python 2.5.1 (...)
 Possiamo anche usare           ...
 l’interprete interattivo       >>> print "Hello, world"
                                Hello, world
Interprete interattivo                                              10

 L’interprete interattivo ufficiale ha
                                        >>> import os
 come prompt >>>                        >>> print “foo”
                                        foo
 Scriviamo comandi (statements)         >>> os.getcwd()
                                        “/Users/enric/pycourse”
 che vengono byte-compilati ed          >>> import sys
 eseguiti                               >>> sys.stdout.write(“ciaon”)
                                        ciao
 Se il comando valuta in un             >>> def f(a):
                                        ...      sys.stdout.write(a)
 espressione (es. un expression         ...      return a
                                        ...
 statement), l’espressione viene        >>> f(“ciaon”)
 stampata                               ciao
                                        “ciaon”
Esempio 01:
System Scripting                                  11




     import os
     import shutil

     for fname in os.listdir(os.getcwd()):
         if fname.endswith(('pyc', 'pyo')):
             os.remove(fname)
         elif fname.endswith('py'):
             shutil.copy(fname, fname + '.bak')
Esempio 2:
“semplice wget” (GvR)                         12


      import sys
      import urllib
      import os


      def hook(*a):
          print '%s: %s' % (fn, a)

      for url in sys.argv[1:]:
          fn = os.path.basename(url)
          print url, "->", fn
          urllib.urlretrieve(url, fn, hook)
Evolution!                              13




             https://github.com/rik0/isle
Animals                                                             14

                         Animal                      Dir    Gene
 0   1   2
             + x : int
             + y : int                                0      1
 7   M   3                                            1      1
             + energy : int
             + dir : int                              2      10
 6   5   4                                            3      1
             + genes : int[8]
             + move() : void                          4      1
             + turn() : void                          5      1
             + eat(plants : cell[0..]) : void         6      1
             + reproduce() : Animal[0..1]             7      1




                                         https://github.com/rik0/isle
UI
https://github.com/rik0/isle        15

Mais conteúdo relacionado

Mais procurados

Spyppolare o non spyppolare
Spyppolare o non spyppolareSpyppolare o non spyppolare
Spyppolare o non spyppolarePyCon Italia
 
Pycrashcourse2.0
Pycrashcourse2.0Pycrashcourse2.0
Pycrashcourse2.0rik0
 
Gestione delle dipendenze con Composer
Gestione delle dipendenze con ComposerGestione delle dipendenze con Composer
Gestione delle dipendenze con ComposerMassimiliano Arione
 
Linux day 2016 la shell in linux
Linux day 2016   la shell in linuxLinux day 2016   la shell in linux
Linux day 2016 la shell in linuxGiuseppe Piccolo
 
Cattive abitudini e-lineeguida
Cattive abitudini e-lineeguidaCattive abitudini e-lineeguida
Cattive abitudini e-lineeguidaRobert Casanova
 

Mais procurados (6)

Spyppolare o non spyppolare
Spyppolare o non spyppolareSpyppolare o non spyppolare
Spyppolare o non spyppolare
 
Pycrashcourse2.0
Pycrashcourse2.0Pycrashcourse2.0
Pycrashcourse2.0
 
Gestione delle dipendenze con Composer
Gestione delle dipendenze con ComposerGestione delle dipendenze con Composer
Gestione delle dipendenze con Composer
 
Linux day 2016 la shell in linux
Linux day 2016   la shell in linuxLinux day 2016   la shell in linux
Linux day 2016 la shell in linux
 
Bash intro
Bash introBash intro
Bash intro
 
Cattive abitudini e-lineeguida
Cattive abitudini e-lineeguidaCattive abitudini e-lineeguida
Cattive abitudini e-lineeguida
 

Destaque

Twcrashcourse
TwcrashcourseTwcrashcourse
Twcrashcourserik0
 
Social Network Analysis
Social Network AnalysisSocial Network Analysis
Social Network Analysisrik0
 
Clojure Interoperability
Clojure InteroperabilityClojure Interoperability
Clojure Interoperabilityrik0
 
Game theory
Game theoryGame theory
Game theoryrik0
 
Pydiomatic
PydiomaticPydiomatic
Pydiomaticrik0
 
Pyimproved again
Pyimproved againPyimproved again
Pyimproved againrik0
 
Social network analysis part ii
Social network analysis part iiSocial network analysis part ii
Social network analysis part iiTHomas Plotkowiak
 
PyCon APAC 2014 - Social Network Analysis Using Python (David Chiu)
PyCon APAC 2014 - Social Network Analysis Using Python (David Chiu)PyCon APAC 2014 - Social Network Analysis Using Python (David Chiu)
PyCon APAC 2014 - Social Network Analysis Using Python (David Chiu)David Chiu
 
Social Network Analysis (SNA) and its implications for knowledge discovery in...
Social Network Analysis (SNA) and its implications for knowledge discovery in...Social Network Analysis (SNA) and its implications for knowledge discovery in...
Social Network Analysis (SNA) and its implications for knowledge discovery in...ACMBangalore
 
Python intro
Python introPython intro
Python introrik0
 
Social choice
Social choiceSocial choice
Social choicerik0
 
Social Network Analysis in Two Parts
Social Network Analysis in Two PartsSocial Network Analysis in Two Parts
Social Network Analysis in Two PartsPatti Anklam
 
Matemática das redes - parte II
Matemática das redes - parte IIMatemática das redes - parte II
Matemática das redes - parte IIDalton Martins
 
Matemática das Redes - Parte I
Matemática das Redes - Parte IMatemática das Redes - Parte I
Matemática das Redes - Parte IDalton Martins
 
Complex and Social Network Analysis in Python
Complex and Social Network Analysis in PythonComplex and Social Network Analysis in Python
Complex and Social Network Analysis in Pythonrik0
 
Introdução à Teoria dos Grafos e Análise de Redes Sociais
Introdução à Teoria dos Grafos e Análise de Redes SociaisIntrodução à Teoria dos Grafos e Análise de Redes Sociais
Introdução à Teoria dos Grafos e Análise de Redes Sociaisfabiomalini
 
Exploratory social network analysis with pajek
Exploratory social network analysis with pajekExploratory social network analysis with pajek
Exploratory social network analysis with pajekTHomas Plotkowiak
 
hydrodynamic journal bearing
hydrodynamic journal bearing hydrodynamic journal bearing
hydrodynamic journal bearing Shubham Shukla
 
Social network analysis course 2010 - 2011
Social network analysis course 2010 - 2011Social network analysis course 2010 - 2011
Social network analysis course 2010 - 2011guillaume ereteo
 

Destaque (20)

Twcrashcourse
TwcrashcourseTwcrashcourse
Twcrashcourse
 
Social Network Analysis
Social Network AnalysisSocial Network Analysis
Social Network Analysis
 
Clojure Interoperability
Clojure InteroperabilityClojure Interoperability
Clojure Interoperability
 
Game theory
Game theoryGame theory
Game theory
 
Pydiomatic
PydiomaticPydiomatic
Pydiomatic
 
Redes e sistemas complexos
Redes e sistemas complexosRedes e sistemas complexos
Redes e sistemas complexos
 
Pyimproved again
Pyimproved againPyimproved again
Pyimproved again
 
Social network analysis part ii
Social network analysis part iiSocial network analysis part ii
Social network analysis part ii
 
PyCon APAC 2014 - Social Network Analysis Using Python (David Chiu)
PyCon APAC 2014 - Social Network Analysis Using Python (David Chiu)PyCon APAC 2014 - Social Network Analysis Using Python (David Chiu)
PyCon APAC 2014 - Social Network Analysis Using Python (David Chiu)
 
Social Network Analysis (SNA) and its implications for knowledge discovery in...
Social Network Analysis (SNA) and its implications for knowledge discovery in...Social Network Analysis (SNA) and its implications for knowledge discovery in...
Social Network Analysis (SNA) and its implications for knowledge discovery in...
 
Python intro
Python introPython intro
Python intro
 
Social choice
Social choiceSocial choice
Social choice
 
Social Network Analysis in Two Parts
Social Network Analysis in Two PartsSocial Network Analysis in Two Parts
Social Network Analysis in Two Parts
 
Matemática das redes - parte II
Matemática das redes - parte IIMatemática das redes - parte II
Matemática das redes - parte II
 
Matemática das Redes - Parte I
Matemática das Redes - Parte IMatemática das Redes - Parte I
Matemática das Redes - Parte I
 
Complex and Social Network Analysis in Python
Complex and Social Network Analysis in PythonComplex and Social Network Analysis in Python
Complex and Social Network Analysis in Python
 
Introdução à Teoria dos Grafos e Análise de Redes Sociais
Introdução à Teoria dos Grafos e Análise de Redes SociaisIntrodução à Teoria dos Grafos e Análise de Redes Sociais
Introdução à Teoria dos Grafos e Análise de Redes Sociais
 
Exploratory social network analysis with pajek
Exploratory social network analysis with pajekExploratory social network analysis with pajek
Exploratory social network analysis with pajek
 
hydrodynamic journal bearing
hydrodynamic journal bearing hydrodynamic journal bearing
hydrodynamic journal bearing
 
Social network analysis course 2010 - 2011
Social network analysis course 2010 - 2011Social network analysis course 2010 - 2011
Social network analysis course 2010 - 2011
 

Semelhante a Pycrashcourse4.0 pdfjam

Multithreading, multiprocessing e Asincronia
Multithreading, multiprocessing e AsincroniaMultithreading, multiprocessing e Asincronia
Multithreading, multiprocessing e AsincroniaSebastiano Merlino (eTr)
 
Python@Unina - Theory
Python@Unina - TheoryPython@Unina - Theory
Python@Unina - TheoryNaLUG
 
Let's give it a GO!
Let's give it a GO!Let's give it a GO!
Let's give it a GO!MarioTraetta
 
Come sviluppo le applicazioni web
Come sviluppo le applicazioni webCome sviluppo le applicazioni web
Come sviluppo le applicazioni webAndrea Lazzarotto
 
breve introduzione a node.js
breve introduzione a node.jsbreve introduzione a node.js
breve introduzione a node.jsnetmeansnet
 
Introduzione a Node.js
Introduzione a Node.jsIntroduzione a Node.js
Introduzione a Node.jsMichele Capra
 
06 Android - lavorare in background
06 Android - lavorare in background06 Android - lavorare in background
06 Android - lavorare in backgroundspawn150
 
Esercitazione 1 (27 febbraio 2012)
Esercitazione 1 (27 febbraio 2012)Esercitazione 1 (27 febbraio 2012)
Esercitazione 1 (27 febbraio 2012)STELITANO
 
Sviluppo Di Applicazioni Su I Os
Sviluppo Di Applicazioni Su I OsSviluppo Di Applicazioni Su I Os
Sviluppo Di Applicazioni Su I OsNoDelay Software
 
Vogliamo programmatori stupidi e pigri!
Vogliamo programmatori stupidi e pigri!Vogliamo programmatori stupidi e pigri!
Vogliamo programmatori stupidi e pigri!Marcello Missiroli
 
[Luca Cracco] - DevOps: strumenti di automazione per Drupal8
[Luca Cracco] - DevOps: strumenti di automazione per Drupal8[Luca Cracco] - DevOps: strumenti di automazione per Drupal8
[Luca Cracco] - DevOps: strumenti di automazione per Drupal8Wellnet srl
 

Semelhante a Pycrashcourse4.0 pdfjam (20)

Python su ipad pycon 8
Python su ipad pycon 8Python su ipad pycon 8
Python su ipad pycon 8
 
Rest sdk
Rest sdkRest sdk
Rest sdk
 
Inferno Limbo Italian
Inferno Limbo ItalianInferno Limbo Italian
Inferno Limbo Italian
 
Multithreading, multiprocessing e Asincronia
Multithreading, multiprocessing e AsincroniaMultithreading, multiprocessing e Asincronia
Multithreading, multiprocessing e Asincronia
 
Python@Unina - Theory
Python@Unina - TheoryPython@Unina - Theory
Python@Unina - Theory
 
Corso c++
Corso c++Corso c++
Corso c++
 
Let's give it a GO!
Let's give it a GO!Let's give it a GO!
Let's give it a GO!
 
Pycon
PyconPycon
Pycon
 
Come sviluppo le applicazioni web
Come sviluppo le applicazioni webCome sviluppo le applicazioni web
Come sviluppo le applicazioni web
 
breve introduzione a node.js
breve introduzione a node.jsbreve introduzione a node.js
breve introduzione a node.js
 
Introduzione a node.js
Introduzione a node.jsIntroduzione a node.js
Introduzione a node.js
 
Introduzione a Node.js
Introduzione a Node.jsIntroduzione a Node.js
Introduzione a Node.js
 
06 Android - lavorare in background
06 Android - lavorare in background06 Android - lavorare in background
06 Android - lavorare in background
 
introduzione a symfony 2
introduzione a symfony 2 introduzione a symfony 2
introduzione a symfony 2
 
[Objective-C] - Introduzione
[Objective-C] - Introduzione[Objective-C] - Introduzione
[Objective-C] - Introduzione
 
Esercitazione 1 (27 febbraio 2012)
Esercitazione 1 (27 febbraio 2012)Esercitazione 1 (27 febbraio 2012)
Esercitazione 1 (27 febbraio 2012)
 
Sviluppo Di Applicazioni Su I Os
Sviluppo Di Applicazioni Su I OsSviluppo Di Applicazioni Su I Os
Sviluppo Di Applicazioni Su I Os
 
Vogliamo programmatori stupidi e pigri!
Vogliamo programmatori stupidi e pigri!Vogliamo programmatori stupidi e pigri!
Vogliamo programmatori stupidi e pigri!
 
Programming iOS lezione 1
Programming iOS lezione 1Programming iOS lezione 1
Programming iOS lezione 1
 
[Luca Cracco] - DevOps: strumenti di automazione per Drupal8
[Luca Cracco] - DevOps: strumenti di automazione per Drupal8[Luca Cracco] - DevOps: strumenti di automazione per Drupal8
[Luca Cracco] - DevOps: strumenti di automazione per Drupal8
 

Último

Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Associazione Digital Days
 
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Associazione Digital Days
 
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Associazione Digital Days
 
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Associazione Digital Days
 
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Associazione Digital Days
 
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Associazione Digital Days
 
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Associazione Digital Days
 
Programma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 TorinoProgramma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 TorinoQuotidiano Piemontese
 
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Associazione Digital Days
 

Último (9)

Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
Daniele Lunassi, CEO & Head of Design @Eye Studios – “Creare prodotti e servi...
 
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
Edoardo Di Pietro – “Virtual Influencer vs Umano: Rubiamo il lavoro all’AI”
 
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
Mael Chiabrera, Software Developer; Viola Bongini, Digital Experience Designe...
 
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
Alessio Mazzotti, Aaron Brancotti; Writer, Screenwriter, Director, UX, Autore...
 
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
Luigi Di Carlo, CEO & Founder @Evometrika srl – “Ruolo della computer vision ...
 
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
Alessandro Nasi, COO @Djungle Studio – “Cosa delegheresti alla copia di te st...
 
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
Federico Bottino, Lead Venture Builder – “Riflessioni sull’Innovazione: La Cu...
 
Programma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 TorinoProgramma Biennale Tecnologia 2024 Torino
Programma Biennale Tecnologia 2024 Torino
 
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
Gabriele Mittica, CEO @Corley Cloud – “Come creare un’azienda “nativa in clou...
 

Pycrashcourse4.0 pdfjam

  • 1. Introducing Python by Example Enrico Franchi efranchi@ce.unipr.it 1
  • 2. Outline 2 Very (very )* short introduction to Python Some small examples Evolutionary game
  • 3. Parlando del futuro... 3 We will perhaps eventually be writing only small modules that are identified by name as they are used to build larger ones, so that devices like indentation, rather than delimiters, might become feasible for expressing local structure in the source language. Donald E. Knuth, Structured Programming with go to Statements, 1974
  • 4. Introduzione 4 Python è concepito da Guido van Rossum alla fine degli anni ‘80 per Amoeba Pubblico 1991, stabile 1994. Linguaggio di alto livello ed orientato agli oggetti. Utilizzato per programmazione di sistema e di rete, e calcolo scientifico, applicazioni desktop, integrazione di videogiochi, MMORPG backend, ... Si impone in ambito web/enterprise, con soluzioni come Zope/Plone, Django,Twisted, GAE, OpenERP.
  • 5. 5 READABILITY COUNTS Zen of Python
  • 6. Oggetti in Python 6 In Python tutto è un oggetto: Un numero, una stringa sono oggetti Gli oggetti sono oggetti (ehm...) Una funzione è un oggetto Una classe è un oggetto Gli oggetti sono cittadini di prima classe, possiamo manipolarli riccamente e comodamente (introspezione, etc.) Possiamo fare, in definitiva, tutto
  • 7. Tipizzazione in Python 7 Python è un linguaggio ad oggetti a tipizzazione dinamica e forte Tipizzazione forte: Gli errori di tipo sono sempre generati. Es. Stringhe non diventano interi e viceversa Ogni oggetto ha una classe, questa non cambia Tipizzazione dinamica Gli errori di tipo sono generati a runtime Duck typing
  • 8. Hello, world! 8 print  “Hello,  world!”
  • 9. Dettagli implementativi 9 $ cat hello.py Tipicamente Python viene #!/usr/bin/python compilato a byte-code e questo viene interpretato da print "Hello, world!" una macchina virtuale (come $ python hello.py Java) Hello, world! Diversamente da Java la $ chmod 755 hello.py $ ./hello.py compilazione è trasparente Hello, world! per l’utente $ python Python 2.5.1 (...) Possiamo anche usare ... l’interprete interattivo >>> print "Hello, world" Hello, world
  • 10. Interprete interattivo 10 L’interprete interattivo ufficiale ha >>> import os come prompt >>> >>> print “foo” foo Scriviamo comandi (statements) >>> os.getcwd() “/Users/enric/pycourse” che vengono byte-compilati ed >>> import sys eseguiti >>> sys.stdout.write(“ciaon”) ciao Se il comando valuta in un >>> def f(a): ... sys.stdout.write(a) espressione (es. un expression ... return a ... statement), l’espressione viene >>> f(“ciaon”) stampata ciao “ciaon”
  • 11. Esempio 01: System Scripting 11 import os import shutil for fname in os.listdir(os.getcwd()): if fname.endswith(('pyc', 'pyo')): os.remove(fname) elif fname.endswith('py'): shutil.copy(fname, fname + '.bak')
  • 12. Esempio 2: “semplice wget” (GvR) 12 import sys import urllib import os def hook(*a): print '%s: %s' % (fn, a) for url in sys.argv[1:]: fn = os.path.basename(url) print url, "->", fn urllib.urlretrieve(url, fn, hook)
  • 13. Evolution! 13 https://github.com/rik0/isle
  • 14. Animals 14 Animal Dir Gene 0 1 2 + x : int + y : int 0 1 7 M 3 1 1 + energy : int + dir : int 2 10 6 5 4 3 1 + genes : int[8] + move() : void 4 1 + turn() : void 5 1 + eat(plants : cell[0..]) : void 6 1 + reproduce() : Animal[0..1] 7 1 https://github.com/rik0/isle