Python

python

Beautiful is better than ugly.

Explicit is better than implicit.

Simple is better than complex.

Complex is better than complicated.

(The zen of python)

Presenter Notes

Chi sono io e cosa faccio

Andrea Manzini ilmanzo@gmail.com

QR Code

http://ilmanzo.github.io

Presenter Notes

alcuni miei progetti:

  • forum di python-it.org
  • articoli tecnici (Linux&C, LinuxPro)
  • resonare, UIC
  • c++ MFC (Win32)
  • cloudmanager
  • enerduino
  • dlangkoans
  • interfacciamenti PLC BeckHoff, modbus
  • ansible

Presenter Notes

Cos'e' Python ?

Linguaggio di programmazione GENERAL-PURPOSE

nato circa nel 1989 dalla mente di Guido Van Rossum

rilasciato come free software

attualmente promosso, mantenuto e sviluppato dalla Python Software Foundation.

https://www.python.org/

il nome Python deriva da uno show comico trasmesso dalla BBC: "Monty Python's Flying Circus", di cui Van Rossum era appassionato.

Presenter Notes

chi ?

guido

Presenter Notes

quando ?

Van Rossum inizio' a lavorare su Python nel 1989, le prime release sono del 1991, mentre la versione 1 e' del 1994

  • 1.0 - 1.6 Gennaio 1994 - Settembre 2000

  • 2.0 - 2.7 Ottobre 2000 - Luglio 2010

  • 3.0 - 3.5 Dicembre 2008 - Settembre 2015

La versione che viene attualmente sviluppata e' la versione 3, mentre la versione 2 e' ferma alla versione 2.7, del 2010, ove sono state riportate alcune funzionalita' della versione 3.

Presenter Notes

caratteristiche

  • facile da imparare
  • leggibile
  • multipiattaforma
  • software libero
  • opensource, vasta comunita'
  • multiparadigma : procedurale, funzionale e orientato agli oggetti
  • ricca libreria standard: "batterie incluse"
  • estensibile
  • "embeddabile"
  • veloce (di solito quanto basta)

Presenter Notes

facile e leggibile

  • Python ha una sintassi minimale: non utilizza simboli o parole chiave per delimitare i blocchi di codice
  • L'indentazione fa parte della sintassi del linguaggio
  • Il risultato e' codice ad alta leggibilita'

"Code is read much more often than it is written, so plan accordingly" (Raymond Chen, 1997)

"Programs are read much more often than written and therefore should communicate clearly their intent. Code is primarily means of communication." (Kent Beck)

Presenter Notes

multipiattaforma, software libero

l'implementazione di riferimento di Python e' scritta in C e disponibile per tutti i sistemi operativi

il sorgente e' distribuito con la PSF License che e' compatibile con la GPL

esistono altre implementazioni : Jython, IronPython, PyPy ...

python-everywhere

Presenter Notes

Altre caratteristiche

  • Gestione tipi dinamica:

le variabili possono cambiare tipo nel corso dell'esecuzione del codice. Non viene quindi effettuato alcun controllo statico sul tipo di valore assegnato ad una variabile.

  • Tipizzazione forte:

le operazioni tra tipi di dati diversi devono essere specificate esplicitamente nel codice (casting). Non vengono effettuate conversioni automatiche dei tipi delle variabili.

Presenter Notes

Altre caratteristiche

  • Gestione automatizzata della memoria (Garbage Collection)

  • Python permette la programmazione iterativa, object-oriented e funzionale.

Presenter Notes

batterie incluse!

La libreria standard di Python contiene moduli delle piu' svariate funzionalità: applicazioni web, interfacce grafiche, database, aritmetica, espressioni regolari, email, crittazione, xml, calendario, ecc.

L'installazione di Python comprende sempre la libreria standard considerata elemento fondamentale: la cosidetta filosofia "Batteries Included"

batteries_included

Presenter Notes

OK... ma a cosa serve ?

  • linguaggio didattico
  • e' come il "nastro adesivo" per l'informatica
  • script di applicazioni (blender, autodesk maya)
  • automazione di compiti ripetitivi
  • programmi desktop con interfacce grafiche
  • programmi server / applicazioni web
  • mobile app
  • interfacciamenti, migrazioni dati
  • prototipazione rapida

Presenter Notes

OK... ma chi lo usa ?

https://wiki.python.org/moin/OrganizationsUsingPython

Google, Facebook, Yahoo, Dropbox, EventBrite, Reddit, Disqus, NASA usano Python

harrypotter

Presenter Notes

Perche' un corso Python ?

"il modo migliore per imparare a programmare e' scrivere codice"

yoda

Presenter Notes

Perche' un corso Python ?

Python facilita il compito del programmatore sollevandolo dalle operazioni di basso livello tipiche di linguaggi come C/C++ e simili

Seguendo alcune semplici regole di sviluppo e' possibile creare software multi piattaforma anche se non si conosce nel dettaglio l'architettura su cui sara' eseguito

Facilitare lo sviluppo del software significa permettere ad un numero maggiore di persone di contribuire a progetti OpenSource

minions

Presenter Notes

a chi e' rivolto il corso ?

  • A chiunque voglia sviluppare software (meglio se opensource)
  • A chi vuole scoprire un nuovo linguaggio
  • A chi vuole riscoprire il piacere di programmare
  • A chi vuole un linguaggio che gli permetta di concentrarsi maggiormente sugli obiettivi da raggiungere piu' che al modo di raggiungerli
  • A chi vuole sfruttare le librerie gia' pronte e messe a disposizione da altri

Presenter Notes

qualche esempio!

"papa', quanti giorni mancano a Natale ?"

from datetime import date
print(date(2015,12,25)-date.today())

xmaskid

Presenter Notes

qualche esempio!

"papa' quanto fa la somma dei numeri dispari fino a 10 milioni ?"

somma=0
for i in range(1,10000000,2):
  somma=somma+i
print(somma)

darthfather

Presenter Notes

[Es.]: list comprehension

prezzi = {'mele': 0.40,'banane': 0.50,'arance': 0.30}

cestino = {
    'arance': 6,
    'banane': 3,
    'mele': 4,
}

totale = sum(prezzi[frutto] * cestino[frutto]
  for frutto in cestino)
print('Devo pagare €%.2f' % totale)

Presenter Notes

come vanno le azioni in borsa ?

installo il modulo apposito scaricandolo da internet

pip install ystockquote

leggo la documentazione sul sito e lo uso nel mio codice

import ystockquote
ystockquote.get_price('GOOG')
ystockquote.get_all('UCG.MI')

Presenter Notes

[Es.]: interfacce grafiche

import tkinter as tk

class App(tk.Frame):

    def __init__(self, master=None):
        tk.Frame.__init__(self,master)
        self.pack()
        self.btn = tk.Button(self, 
          text="STRUCA EL BOTON", command=self.ciao)
        self.btn.pack()

    def ciao(self):
        print("ciao vecio!")

app = App()
app.mainloop()

Presenter Notes

[Es.] troppi gattini!

  • ho 2200 foto di gattini divise in varie cartelle
  • vorrei trovare quelle venute troppo scure

gattino

Presenter Notes

codice felino (=^・^=)

pip install Pillow

import os
from PIL import Image,ImageStat

#converte immagine in scala di grigio, 
#per calcolare la luminosita' media
def brightness( im_file ):
    im = Image.open(im_file).convert('L')
    stat = ImageStat.Stat(im)
    return stat.rms[0]

#percorre ricorsivamente dalla directory 
#'foto' in giu' tutti i file
for root, directories, filenames in os.walk('foto'):
    for filename in filenames:
        immagine=os.path.join(root,filename)
        if brightness(immagine)<50:
            print("eog '"+immagine+"'")

Presenter Notes

Di cosa parleremo al corso

Essendo un breve corso introduttivo, sostanzialmente copriremo gli argomenti del "tutorial per principianti".

  • installazione
  • input/output
  • variabili e tipi di dato
  • stringhe
  • cicli
  • istruzioni condizionali
  • funzioni
  • liste, dizionari
  • usare i moduli della libreria

Presenter Notes

Di cosa parleremo al corso

Se abbiamo tempo, faremo qualche accenno a cose piu' avanzate

advanced

Presenter Notes

Di cosa NON parleremo al corso

NON approfondiremo argomenti non inerenti al linguaggio

  • linux, windows, CAD, arduino ...
  • quanto e' meglio X rispetto a Y
  • grafica, stampa, database, programmazione web

ognuno di questi argomenti meriterebbe un corso a parte

Presenter Notes

si', ma ...

e' nostra opinione che prima di affrontare tematiche complesse e' necessario avere basi solide nel linguaggio

prima si impara a stare in piedi, poi a camminare e anche a correre :)

memekid

Presenter Notes

Quando, dove, come

  • 4 mercoledi' di dicembre: 2, 9, 16, 23(*)
  • qui al FabLab
  • prime due sere dalle 20 alle 22 con Andrea Manzini
  • altre due sere dalle 20 alle 22.30 con Maurizio Boscaini
  • per garantire una adeguata formazione, accettiamo un numero ristretto di persone (max 10-12)
  • Costo indicativo: 100-120€ a persona, per info chiedere @Fablab
  • se c'e' richiesta, il corso base sara' ripetuto l'anno prossimo
  • per chi vorra' proseguire, stiamo preparando il corso intermedio e avanzato

*il 23 portare pandoro e spumante!

Presenter Notes

Domande

picard

Presenter Notes

Domande-risposte

  • Perche' Python e non Altro-linguaggio X ?

Presenter Notes

Domande-risposte

  • Python 2 o Python 3 ?

Presenter Notes

Domande-risposte

  • cosa devo portare ?

Presenter Notes

GRAZIE

per l'attenzione

smiling

Presenter Notes

bonus : queste slide sono fatte con ...

landslide e' un programma Python che converte testo in formato markdown in slide HTML5

https://github.com/adamzap/landslide

Presenter Notes