SlideShare ist ein Scribd-Unternehmen logo
1 von 52
BreizhCamp 2015 #BzhCmp
#python #bzhcmp
BreizhCamp 2015 #BzhCmp
Python après 15 ans de
JAVA
Pierre-Alban DEWITTE - @__pad__
dev.myscript.com
PYTHON
● Langage généraliste
● Dynamiquement typé
● Orienté objet
● Fonctionnel
● Gestion de la mémoire par un garbage
collector
PYTHON
● Créé par Guido van Rossum
● Version 0.9 datant de 1991
● Version 1.0 datant de 1994
● Développé par la communauté
● Code détenu par la Python Software
Fundation
● Evolution à travers des PEP (≈JSR)
PYTHON
Python 2 ou Python 3
● Quelques changement de syntaxe
● Portée des variables limitées
● Fusion de librairies
● Utilisation de l’UTF-8 par défaut
● Exceptions
Python 2 ou Python 3
for ind in [1, 2, 3]:
squared = [ind**2 for ind in (20, 30, 40, 50)]
print(ind)
● Contraint par l’environnement
● Contraint par des librairies
http://python3wos.appspot.com/ et
notamment Spark
● Vous voulez utiliser Jython
Pourquoi choisir Python 2
Le langage
● Bye bye les accolades !
● Ne pas mélanger espaces et tabulations
Identation
• En python3 toute les chaines sont unicodes
(comme java)
• Le préfixe r indique de ne pas échapper la
chaine
• Nombreuses fonctions disponibles
nativement
System.out.println()
c: empdir
c:tempdir
c:tempdir
print('c:tempdir')
print('c:tempdir')
print(r'c:tempdir')
● List est un type natif
● Les tuples sont des listes immutables
● Les fonctions de manipulation sont intégrées
au langage
● Comme si Guava était inclus nativement
ArrayList
ArrayList
uneListe = ['Morbihan', 'Finistère', 'Côtes-
d''Armor', 'Ile et Vilaine']
uneListe.append('Loire-Atlantique')
uneListe.append(50)
print(uneListe)
uneListe.pop()
print(uneListe)
unTuple = (22, 29, 56, 35)
print(unTuple)
['Morbihan', 'Finistère', 'Côtes-dArmor',
'Ile et Vilaine', 'Loire-Atlantique', 50]
['Morbihan', 'Finistère', 'Côtes-dArmor',
'Ile et Vilaine', 'Loire-Atlantique']
(22, 29, 56, 35)
ArrayList
print(unTuple)
# Dernier élément
print(unTuple[-1])
# Entre le second et l'avant dernier élément
print(unTuple[1:-1])
# Un élément sur deux de la liste
print(unTuple[::2])
# En inversant l'ordre
print(unTuple[::-1])
(22, 29, 56, 35)
35
(29, 56)
(22, 56)
(35, 56, 29, 22)
ArrayList
# Equivalent du .equals() en Java
print(copie == uneListe)
# Equivalent du == en Java
print(copie is uneListe)
# Equivalent du hashCode() en java
print(id(copie), id(uneListe))
True
False
51316416 51315096
ArrayList
print("for ... in ...")
for dpt in uneListe:
print(dpt)
print("for ... in enumerate(...)")
for idx, dpt in enumerate(uneListe):
print(idx, " -> ", dpt)
for ... in ...
Morbihan
...
Loire-Atlantique
for ... in enumerate(...)
0 -> Morbihan
...
4 -> Loire-Atlantique
ArrayList
if 'Morbihan' in uneListe :
print("A moitié bretons")
uneListe.remove('Morbihan')
print(uneListe)
uneListe.sort()
print(uneListe)
A moitié bretons
['Finistère', 'Côtes-dArmor', 'Ile et
Vilaine', 'Loire-Atlantique']
['Côtes-dArmor', 'Finistère', 'Ile et
Vilaine', 'Loire-Atlantique']
Set
# Création de la patte à galette
myset = {'farine', 'eau', 'sel', 'oeufs'}
print(myset)
# Finalement double dose de farine
myset.add('farine')
print(myset)
# Jamais de la vie avec des oeufs
myset.remove('oeufs')
print(myset)
{'eau', 'sel', 'farine', 'oeufs'}
{'eau', 'sel', 'farine', 'oeufs'}
{'eau', 'sel', 'farine'}
Map
mydict = {
# Tableau comme valeur
'ingredients':
['farine', 'eau'],
# Set comme valeur
'ustensiles': {'spatule', 'poele'},
# Tout type
'duree': 10,
# Imbrication des dictionaires entre eux
'difficulte': {
'debutants': 'facile',
'experimente': 'super facile'}
}
print(mydict)
mydict.pop('ustensiles')
print(json.dumps(mydict, indent=2, separators=(',',
': ')))
Map
{'ustensiles': {'poele', 'spatule'},
'duree': 10, 'difficulte': {'debutants':
'facile', 'experimente': 'super facile'},
'ingredients': ['farine', 'eau']}
{
"duree": 10,
"difficulte": {
"debutants": "facile",
"experimente": "super facile"
},
"ingredients": [
"farine",
"eau"
]
}
Fonctions
def ma_fonction(arg1, arg2="default", *args,
**kwargs):
# arg1 est obligatoire
print("arg1:", arg1)
# arg2 optionel avec une valeur par défaut
print("arg2:", arg2)
# args est un tableau
print("args:", args)
# kwargs est un dictionnaire
print("kwargs:", kwargs)
if __name__ == '__main__':
print('########### appel 1 ###########')
ma_fonction('1')
print('########### appel 2 ###########')
ma_fonction('2', 'la','decl.', 'est',
'flexible',vous_en='pensez quoi ?')
Fonctions
########### appel 1 ###########
arg1: 1
arg2: default
args: ()
kwargs: {}
########### appel 2 ###########
arg1: 2
arg2: la
args: ('declaration', 'est', 'tres',
'flexible')
kwargs: {'pensez': 'quoi ?', 'vous': 'en'}
Classes
class MaClasse(object):
def __init__(self, transform):
self.attribut = 'un attribut'
self.transform = transform
def affiche(self):
print(self.transform(self.attribut))
if __name__ == '__main__':
uneIntance = MaClasse(lambda x:x.upper())
uneIntance.affiche()
UN ATTRIBUT
● Favoriser autant que possible l’utilisation de
fonctions
● Toujours préférer une fonction à l’utilisation
de l’héritage
Classes et fonctions
● Notion de package comme en java
● Un répertoire doit contenir un fichier
__init__.py
● Possibilité d’importer un package dans son
intégralité ou bien seulement un module
● Le mot clé as permet de gérer les éventuels
conflits de nommage
● Recherche relativement à la variable
PYTHON_PATH
Import
Et vraiment beaucoup de choses
Eco-système
● De nombreuses librairies sont disponibles
dans le runtime Python
● Eco-système très riche et très
communautaire
Librairies
Librairies natives
Jetty <> http.server
python –m http.server 8080
● Utile créer un serveur HTTP minimaliste
Documentation
def max(*args, key=None):
"""
max(iterable, *[, default=obj, key=func]) -
> value
max(arg1, arg2, *args, *[, key=func]) ->
value
With a single iterable argument, return its
biggest item. The default keyword-only
argument specifies an object to return if
the provided iterable is empty. With two or
more arguments, return the largest
argument.
"""
pydoc permet de générer la doc
JUNIT, TestNG <> unittest
import unittest
def fun(x,y):
return x + y
class MyTest(unittest.TestCase):
def setUp(self):
self.inc = 1
def test_premier(self):
self.assertEqual(fun(3,self.inc), 4)
def test_second(self):
self.assertEqual(fun(3,self.inc), 'wrong')
Mockito <> unittest.mock
from unittest.mock import MagicMock
class ProductionClass(object):
def method(self):
self.something(1, 2, 3)
def something(self, a, b, c):
pass
real = ProductionClass()
real.something = MagicMock()
real.method()
real.something.assert_called_once_with(1, 2, 3)
Dans la librairie standard depuis
Python 3.3
● Extrêmement complet
● Attention à ne bien initialiser qu’une fois
● Pas tout le temps compatible avec d’autre
modules (multithread windows par exemple)
xxx4J, LogPack <>Logging
import logging
logging.basicConfig(filename='example.log',level=l
ogging.DEBUG)
logging.debug('This message should go to the log
file')
logging.info('So should this')
logging.warning('And this, too')
Jackson <> json
json_string = '{"first_name": "Guido",
"last_name":"Rossum"}'
parsed_json = json.loads(json_string)
print(parsed_json['first_name'])
d = {
'first_name': 'Guido',
'titles': ['BDFL', 'Developer'],
}
print(json.dumps(d, sort_keys=True, indent=4))
Guido
{ "first_name": "Guido",
"titles": [
"BDFL",
"Developer"
]}
Autres équivalences
JAVA PYTHON
Commons IO os, shutil, subprocess
et sys
Commons Collections collections
Commons Codec codecs
Guava Ba y’en a pas besoin
Gestion des dépendances
● Pip est le gestionnaire de dépendance
couramment utilisé
● Par convention la liste des dépendance est
contenue dans le fichier requirements.txt
● Pour installer / upgrader
Gestion des dépendances
pymongo==2.8.0
pymssql==2.1.1
pip install requirements.txt
Virtualenv
● VENV permet d’isoler un environnement
d’éxécution
● Permet de figer une version de Python et les
dépendances
● Absolument nécessaire en toute occasion
python -m venv myenv
myenv/Scripts/activate.bat
Librairies disponibles dans PyPi
Jodatime <> dateutil
from dateutil.relativedelta import *
from dateutil.easter import *
from dateutil.rrule import *
from dateutil.parser import *
now = parse("Sat May 30 15:20:08 GMT 2015")
today = now.date()
year =
rrule(YEARLY,bymonth=8,bymonthday=13,byweekday=FR
)[0].year
rdelta = relativedelta(easter(year), today)
print(…)
Today is: 2015-05-30
Year with next Aug 13th on a Friday is: 2021
How far is the Easter of that year:
relativedelta(years=+5, months=+10, days=+5)
And the Easter of that year is: 2021-04-04
HTTPClient <> Requests
r = requests.get('https://…/json', auth=('u','p'))
print(r.status_code)
print(r.headers['content-type'])
os.system("pause")
print(r.text)
os.system("pause")
print(r.json()['releases']['1.0.4 '])
● Mises à jour de sécurité fréquentes
● Pool de connections
● Gestion multi-part
● Persistance de cookies
● …
Bootle <> Spring MVC
from bottle import get, post, request # or route
@get('/login') # or @route('/login')
def login():
return '''<form action="/login … '''
@post('/login') # or @route('/login', method='POST')
def do_login():
username = request.forms.get('username')
if check_login(username, password):
return "<p>Your login was correct.</p>"
else:
return "<p>Login failed.</p>"
● Template, routing, serialization …
● SQLAlchemy est Spring JDBC et Hibernate
réunis
● DJANGO est à Python de que Grails est à
Groovy
● Des librairies scientifique pour grapher des
résultats
● Spark et son API PYTHON
● Des drivers pour toutes les bases de
données No-SQL
● …
Et aussi
PEP8
● classes : CorrectClassName
● exceptions : IncorrectClassNameError (suffixe
"Error" !)
● fonctions : get_correct_number()
● méthodes : get_correct_number(self)
● arguments des méthodes et fonctions :
get_correct_number(random=False)
● variables : number =
my_object.get_correct_number()
● constantes : ANSWER_TO_LIFE = 42
Conventions de nommage
● Script PEP 8
● autre
Pour vérifier
Sources
● http://sametmax.com/cours-et-tutos/les-
articles-pour-apprendre-python-dans-le-bon-
ordre/
● http://docs.python-guide.org/en/latest/
● http://antrix.net/static/pages/python-for-
java/online/
● http://stackoverflow.com/questions/1052435/
moving-from-java-to-python
Pour bien commencer
● http://sametmax.com
● http://www.talkpythontome.com/
● http://pycoders.com/
Pour se tenir au courant
• VIDEO PYCON 2015
Questions
#python #bzhcmp
@__pad__

Weitere ähnliche Inhalte

Was ist angesagt?

Python avancé : Ensemble, dictionnaire et base de données
Python avancé : Ensemble, dictionnaire et base de donnéesPython avancé : Ensemble, dictionnaire et base de données
Python avancé : Ensemble, dictionnaire et base de donnéesECAM Brussels Engineering School
 
Introduction à la programmation
Introduction à la programmationIntroduction à la programmation
Introduction à la programmationpierrepo
 
Python avancé : Gestion d'erreurs et mécanisme d'exception
Python avancé : Gestion d'erreurs et mécanisme d'exceptionPython avancé : Gestion d'erreurs et mécanisme d'exception
Python avancé : Gestion d'erreurs et mécanisme d'exceptionECAM Brussels Engineering School
 
Asyncio: offrez des tulipes à vos entrées sorties asynchrones
Asyncio: offrez des tulipes à vos entrées sorties asynchronesAsyncio: offrez des tulipes à vos entrées sorties asynchrones
Asyncio: offrez des tulipes à vos entrées sorties asynchronestchappui
 
Développement informatique : Programmation fonctionnelle, décorateur et génér...
Développement informatique : Programmation fonctionnelle, décorateur et génér...Développement informatique : Programmation fonctionnelle, décorateur et génér...
Développement informatique : Programmation fonctionnelle, décorateur et génér...ECAM Brussels Engineering School
 
Développement informatique : Algorithmique I : Récursion et arbre
Développement informatique : Algorithmique I : Récursion et arbreDéveloppement informatique : Algorithmique I : Récursion et arbre
Développement informatique : Algorithmique I : Récursion et arbreECAM Brussels Engineering School
 
Interception de signal avec dump de la pile d'appel
Interception de signal avec dump de la pile d'appelInterception de signal avec dump de la pile d'appel
Interception de signal avec dump de la pile d'appelThierry Gayet
 
Initiation à l'algorithmique
Initiation à l'algorithmiqueInitiation à l'algorithmique
Initiation à l'algorithmiqueAbdoulaye Dieng
 
Développement informatique : Chaines de caractères et expressions regulières
Développement informatique : Chaines de caractères et expressions regulièresDéveloppement informatique : Chaines de caractères et expressions regulières
Développement informatique : Chaines de caractères et expressions regulièresECAM Brussels Engineering School
 
Chapitre 2: String en Java
Chapitre 2:  String en JavaChapitre 2:  String en Java
Chapitre 2: String en JavaAziz Darouichi
 
Développer en natif avec C++11
Développer en natif avec C++11Développer en natif avec C++11
Développer en natif avec C++11Microsoft
 
C++11 en 12 exemples simples
C++11 en 12 exemples simplesC++11 en 12 exemples simples
C++11 en 12 exemples simplesPethrvs
 

Was ist angesagt? (20)

Python
PythonPython
Python
 
Formation python
Formation pythonFormation python
Formation python
 
Python avancé : Ensemble, dictionnaire et base de données
Python avancé : Ensemble, dictionnaire et base de donnéesPython avancé : Ensemble, dictionnaire et base de données
Python avancé : Ensemble, dictionnaire et base de données
 
Introduction à la programmation
Introduction à la programmationIntroduction à la programmation
Introduction à la programmation
 
Python avancé : Lecture et écriture de fichiers
Python avancé : Lecture et écriture de fichiersPython avancé : Lecture et écriture de fichiers
Python avancé : Lecture et écriture de fichiers
 
Python avancé : Gestion d'erreurs et mécanisme d'exception
Python avancé : Gestion d'erreurs et mécanisme d'exceptionPython avancé : Gestion d'erreurs et mécanisme d'exception
Python avancé : Gestion d'erreurs et mécanisme d'exception
 
Asyncio: offrez des tulipes à vos entrées sorties asynchrones
Asyncio: offrez des tulipes à vos entrées sorties asynchronesAsyncio: offrez des tulipes à vos entrées sorties asynchrones
Asyncio: offrez des tulipes à vos entrées sorties asynchrones
 
Développement informatique : Programmation fonctionnelle, décorateur et génér...
Développement informatique : Programmation fonctionnelle, décorateur et génér...Développement informatique : Programmation fonctionnelle, décorateur et génér...
Développement informatique : Programmation fonctionnelle, décorateur et génér...
 
Développement informatique : Algorithmique I : Récursion et arbre
Développement informatique : Algorithmique I : Récursion et arbreDéveloppement informatique : Algorithmique I : Récursion et arbre
Développement informatique : Algorithmique I : Récursion et arbre
 
Interception de signal avec dump de la pile d'appel
Interception de signal avec dump de la pile d'appelInterception de signal avec dump de la pile d'appel
Interception de signal avec dump de la pile d'appel
 
Formation python 3
Formation python 3Formation python 3
Formation python 3
 
Initiation à l'algorithmique
Initiation à l'algorithmiqueInitiation à l'algorithmique
Initiation à l'algorithmique
 
Theme 7
Theme 7Theme 7
Theme 7
 
Développement informatique : Chaines de caractères et expressions regulières
Développement informatique : Chaines de caractères et expressions regulièresDéveloppement informatique : Chaines de caractères et expressions regulières
Développement informatique : Chaines de caractères et expressions regulières
 
Introduction à Python
Introduction à PythonIntroduction à Python
Introduction à Python
 
Python avancé : Qualité de code et convention de codage
Python avancé : Qualité de code et convention de codagePython avancé : Qualité de code et convention de codage
Python avancé : Qualité de code et convention de codage
 
Chapitre 2: String en Java
Chapitre 2:  String en JavaChapitre 2:  String en Java
Chapitre 2: String en Java
 
Développer en natif avec C++11
Développer en natif avec C++11Développer en natif avec C++11
Développer en natif avec C++11
 
Formation python
Formation pythonFormation python
Formation python
 
C++11 en 12 exemples simples
C++11 en 12 exemples simplesC++11 en 12 exemples simples
C++11 en 12 exemples simples
 

Andere mochten auch

Cours python
Cours pythonCours python
Cours pythonsalmazen
 
Base NoSql et Python
Base NoSql et PythonBase NoSql et Python
Base NoSql et Pythonyboussard
 
Python et les bases de données non sql
Python et les bases de données non sqlPython et les bases de données non sql
Python et les bases de données non sqlbchesneau
 
Formation python
Formation pythonFormation python
Formation pythonj_lipaz
 
Les technologies Open Source pour les interfaces graphiques embarquées
Les technologies Open Source pour les interfaces graphiques embarquéesLes technologies Open Source pour les interfaces graphiques embarquées
Les technologies Open Source pour les interfaces graphiques embarquéesAlexandre LAHAYE
 
Cypyth formation-programmation-objet-en-langage-python
Cypyth formation-programmation-objet-en-langage-pythonCypyth formation-programmation-objet-en-langage-python
Cypyth formation-programmation-objet-en-langage-pythonCERTyou Formation
 
OpenStack Havana, tour d'horizon
OpenStack Havana, tour d'horizonOpenStack Havana, tour d'horizon
OpenStack Havana, tour d'horizonYannick Foeillet
 
SeSQL : un moteur de recherche en Python et PostgreSQL
SeSQL : un moteur de recherche en Python et PostgreSQLSeSQL : un moteur de recherche en Python et PostgreSQL
SeSQL : un moteur de recherche en Python et PostgreSQLParis, France
 
Les langages de programmation sont trop compliqués
Les langages de programmation sont trop compliquésLes langages de programmation sont trop compliqués
Les langages de programmation sont trop compliquésmercury_wood
 
Rendez votre code Python plus beau !
Rendez votre code Python plus beau !Rendez votre code Python plus beau !
Rendez votre code Python plus beau !Ronan Amicel
 
Python as the Zen of Data Science
Python as the Zen of Data SciencePython as the Zen of Data Science
Python as the Zen of Data ScienceTravis Oliphant
 
Modelisation agile 03122011
Modelisation agile  03122011Modelisation agile  03122011
Modelisation agile 03122011agnes_crepet
 
Chp3 - Diagramme de Classes
Chp3 - Diagramme de ClassesChp3 - Diagramme de Classes
Chp3 - Diagramme de ClassesLilia Sfaxi
 
Python et son intégration avec Odoo
Python et son intégration avec OdooPython et son intégration avec Odoo
Python et son intégration avec OdooHassan WAHSISS
 

Andere mochten auch (20)

Cours python
Cours pythonCours python
Cours python
 
Base NoSql et Python
Base NoSql et PythonBase NoSql et Python
Base NoSql et Python
 
Python et les bases de données non sql
Python et les bases de données non sqlPython et les bases de données non sql
Python et les bases de données non sql
 
Formation python
Formation pythonFormation python
Formation python
 
Les technologies Open Source pour les interfaces graphiques embarquées
Les technologies Open Source pour les interfaces graphiques embarquéesLes technologies Open Source pour les interfaces graphiques embarquées
Les technologies Open Source pour les interfaces graphiques embarquées
 
Cypyth formation-programmation-objet-en-langage-python
Cypyth formation-programmation-objet-en-langage-pythonCypyth formation-programmation-objet-en-langage-python
Cypyth formation-programmation-objet-en-langage-python
 
OpenStack Havana, tour d'horizon
OpenStack Havana, tour d'horizonOpenStack Havana, tour d'horizon
OpenStack Havana, tour d'horizon
 
La sabiduría
La sabiduríaLa sabiduría
La sabiduría
 
Solucion y Psicologia del Bienestar
Solucion y Psicologia del BienestarSolucion y Psicologia del Bienestar
Solucion y Psicologia del Bienestar
 
Python debugger
Python debuggerPython debugger
Python debugger
 
python
pythonpython
python
 
SeSQL : un moteur de recherche en Python et PostgreSQL
SeSQL : un moteur de recherche en Python et PostgreSQLSeSQL : un moteur de recherche en Python et PostgreSQL
SeSQL : un moteur de recherche en Python et PostgreSQL
 
Les langages de programmation sont trop compliqués
Les langages de programmation sont trop compliquésLes langages de programmation sont trop compliqués
Les langages de programmation sont trop compliqués
 
R versur Python
R versur PythonR versur Python
R versur Python
 
Rendez votre code Python plus beau !
Rendez votre code Python plus beau !Rendez votre code Python plus beau !
Rendez votre code Python plus beau !
 
Python as the Zen of Data Science
Python as the Zen of Data SciencePython as the Zen of Data Science
Python as the Zen of Data Science
 
Modelisation agile 03122011
Modelisation agile  03122011Modelisation agile  03122011
Modelisation agile 03122011
 
Chp3 - Diagramme de Classes
Chp3 - Diagramme de ClassesChp3 - Diagramme de Classes
Chp3 - Diagramme de Classes
 
Python et son intégration avec Odoo
Python et son intégration avec OdooPython et son intégration avec Odoo
Python et son intégration avec Odoo
 
UML+Python
UML+PythonUML+Python
UML+Python
 

Ähnlich wie Python après 15 ans de JAVA

découverte du langage python dans tous ses aspects
découverte du langage python dans tous ses aspectsdécouverte du langage python dans tous ses aspects
découverte du langage python dans tous ses aspectsThierry Gayet
 
Ops@viadeo : Puppet & Co... 6 mois après par Xavier Krantz
Ops@viadeo : Puppet & Co... 6 mois après par Xavier KrantzOps@viadeo : Puppet & Co... 6 mois après par Xavier Krantz
Ops@viadeo : Puppet & Co... 6 mois après par Xavier KrantzOlivier DASINI
 
Les nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ ModerneLes nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ ModerneMicrosoft
 
PyConFR - testons en python
PyConFR - testons en pythonPyConFR - testons en python
PyConFR - testons en pythongburet
 
Comment développer un serveur métier en python/C++
Comment développer un serveur métier en python/C++Comment développer un serveur métier en python/C++
Comment développer un serveur métier en python/C++cppfrug
 
01 - Introduction à Python chaines de caractères.pdf
01 - Introduction à Python chaines de caractères.pdf01 - Introduction à Python chaines de caractères.pdf
01 - Introduction à Python chaines de caractères.pdfMARYAM510573
 
pythonxxzexexzxzexzexzexzxzexezxzexzxz.pdf
pythonxxzexexzxzexzexzexzxzexezxzexzxz.pdfpythonxxzexexzxzexzexzexzxzexezxzexzxz.pdf
pythonxxzexexzxzexzexzexzxzexezxzexzxz.pdfMehdiHarchenifChassa
 
IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES (2022-2023)
IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES  (2022-2023)IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES  (2022-2023)
IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES (2022-2023)Tunisie collège
 
Presentation langage go_19022015
Presentation langage go_19022015Presentation langage go_19022015
Presentation langage go_19022015Stéphane Legrand
 
Nio sur Netty par Mouhcine Moulou - 3 avril 2014
Nio sur Netty par Mouhcine Moulou - 3 avril 2014Nio sur Netty par Mouhcine Moulou - 3 avril 2014
Nio sur Netty par Mouhcine Moulou - 3 avril 2014SOAT
 
Chap XIII : calcul scientifique avec python
Chap XIII : calcul scientifique avec pythonChap XIII : calcul scientifique avec python
Chap XIII : calcul scientifique avec pythonMohammed TAMALI
 
Firewalls
FirewallsFirewalls
Firewallsc0r3war
 
FormationPython2019.pptx
FormationPython2019.pptxFormationPython2019.pptx
FormationPython2019.pptxLamissGhoul1
 
Terraform OpenStack : Mise en pratique sur infrastructure OVH (Rennes devops)
Terraform OpenStack : Mise en pratique sur infrastructure OVH (Rennes devops) Terraform OpenStack : Mise en pratique sur infrastructure OVH (Rennes devops)
Terraform OpenStack : Mise en pratique sur infrastructure OVH (Rennes devops) Joël Séguillon
 
Rapport openembedded
Rapport openembeddedRapport openembedded
Rapport openembeddedAyoub Rouzi
 
Présentation de Django @ Orange Labs (FR)
Présentation de Django @ Orange Labs (FR)Présentation de Django @ Orange Labs (FR)
Présentation de Django @ Orange Labs (FR)Martin Latrille
 

Ähnlich wie Python après 15 ans de JAVA (20)

découverte du langage python dans tous ses aspects
découverte du langage python dans tous ses aspectsdécouverte du langage python dans tous ses aspects
découverte du langage python dans tous ses aspects
 
Ops@viadeo : Puppet & Co... 6 mois après par Xavier Krantz
Ops@viadeo : Puppet & Co... 6 mois après par Xavier KrantzOps@viadeo : Puppet & Co... 6 mois après par Xavier Krantz
Ops@viadeo : Puppet & Co... 6 mois après par Xavier Krantz
 
Les nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ ModerneLes nouveautés de C++11 : Ecrire du C++ Moderne
Les nouveautés de C++11 : Ecrire du C++ Moderne
 
PyConFR - testons en python
PyConFR - testons en pythonPyConFR - testons en python
PyConFR - testons en python
 
Comment développer un serveur métier en python/C++
Comment développer un serveur métier en python/C++Comment développer un serveur métier en python/C++
Comment développer un serveur métier en python/C++
 
01 - Introduction à Python chaines de caractères.pdf
01 - Introduction à Python chaines de caractères.pdf01 - Introduction à Python chaines de caractères.pdf
01 - Introduction à Python chaines de caractères.pdf
 
pythonxxzexexzxzexzexzexzxzexezxzexzxz.pdf
pythonxxzexexzxzexzexzexzxzexezxzexzxz.pdfpythonxxzexexzxzexzexzexzxzexezxzexzxz.pdf
pythonxxzexexzxzexzexzexzxzexezxzexzxz.pdf
 
IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES (2022-2023)
IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES  (2022-2023)IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES  (2022-2023)
IMPLEMENTATION EN PYTHON DES CONVENTIONS ALGORITHMIQUES (2022-2023)
 
Presentation langage go_19022015
Presentation langage go_19022015Presentation langage go_19022015
Presentation langage go_19022015
 
Nio sur Netty par Mouhcine Moulou - 3 avril 2014
Nio sur Netty par Mouhcine Moulou - 3 avril 2014Nio sur Netty par Mouhcine Moulou - 3 avril 2014
Nio sur Netty par Mouhcine Moulou - 3 avril 2014
 
Chap XIII : calcul scientifique avec python
Chap XIII : calcul scientifique avec pythonChap XIII : calcul scientifique avec python
Chap XIII : calcul scientifique avec python
 
Go
GoGo
Go
 
Google Developer Group (GDG) Aix-Marseille #1 (27/08/2018)
Google Developer Group (GDG) Aix-Marseille #1 (27/08/2018)Google Developer Group (GDG) Aix-Marseille #1 (27/08/2018)
Google Developer Group (GDG) Aix-Marseille #1 (27/08/2018)
 
Installation open erp
Installation open erpInstallation open erp
Installation open erp
 
Python + ansible = ♥
Python + ansible = ♥Python + ansible = ♥
Python + ansible = ♥
 
Firewalls
FirewallsFirewalls
Firewalls
 
FormationPython2019.pptx
FormationPython2019.pptxFormationPython2019.pptx
FormationPython2019.pptx
 
Terraform OpenStack : Mise en pratique sur infrastructure OVH (Rennes devops)
Terraform OpenStack : Mise en pratique sur infrastructure OVH (Rennes devops) Terraform OpenStack : Mise en pratique sur infrastructure OVH (Rennes devops)
Terraform OpenStack : Mise en pratique sur infrastructure OVH (Rennes devops)
 
Rapport openembedded
Rapport openembeddedRapport openembedded
Rapport openembedded
 
Présentation de Django @ Orange Labs (FR)
Présentation de Django @ Orange Labs (FR)Présentation de Django @ Orange Labs (FR)
Présentation de Django @ Orange Labs (FR)
 

Python après 15 ans de JAVA

  • 1. BreizhCamp 2015 #BzhCmp #python #bzhcmp BreizhCamp 2015 #BzhCmp Python après 15 ans de JAVA Pierre-Alban DEWITTE - @__pad__
  • 3.
  • 5. ● Langage généraliste ● Dynamiquement typé ● Orienté objet ● Fonctionnel ● Gestion de la mémoire par un garbage collector PYTHON
  • 6. ● Créé par Guido van Rossum ● Version 0.9 datant de 1991 ● Version 1.0 datant de 1994 ● Développé par la communauté ● Code détenu par la Python Software Fundation ● Evolution à travers des PEP (≈JSR) PYTHON
  • 7. Python 2 ou Python 3
  • 8. ● Quelques changement de syntaxe ● Portée des variables limitées ● Fusion de librairies ● Utilisation de l’UTF-8 par défaut ● Exceptions Python 2 ou Python 3 for ind in [1, 2, 3]: squared = [ind**2 for ind in (20, 30, 40, 50)] print(ind)
  • 9. ● Contraint par l’environnement ● Contraint par des librairies http://python3wos.appspot.com/ et notamment Spark ● Vous voulez utiliser Jython Pourquoi choisir Python 2
  • 11. ● Bye bye les accolades ! ● Ne pas mélanger espaces et tabulations Identation
  • 12. • En python3 toute les chaines sont unicodes (comme java) • Le préfixe r indique de ne pas échapper la chaine • Nombreuses fonctions disponibles nativement System.out.println() c: empdir c:tempdir c:tempdir print('c:tempdir') print('c:tempdir') print(r'c:tempdir')
  • 13. ● List est un type natif ● Les tuples sont des listes immutables ● Les fonctions de manipulation sont intégrées au langage ● Comme si Guava était inclus nativement ArrayList
  • 14. ArrayList uneListe = ['Morbihan', 'Finistère', 'Côtes- d''Armor', 'Ile et Vilaine'] uneListe.append('Loire-Atlantique') uneListe.append(50) print(uneListe) uneListe.pop() print(uneListe) unTuple = (22, 29, 56, 35) print(unTuple) ['Morbihan', 'Finistère', 'Côtes-dArmor', 'Ile et Vilaine', 'Loire-Atlantique', 50] ['Morbihan', 'Finistère', 'Côtes-dArmor', 'Ile et Vilaine', 'Loire-Atlantique'] (22, 29, 56, 35)
  • 15. ArrayList print(unTuple) # Dernier élément print(unTuple[-1]) # Entre le second et l'avant dernier élément print(unTuple[1:-1]) # Un élément sur deux de la liste print(unTuple[::2]) # En inversant l'ordre print(unTuple[::-1]) (22, 29, 56, 35) 35 (29, 56) (22, 56) (35, 56, 29, 22)
  • 16. ArrayList # Equivalent du .equals() en Java print(copie == uneListe) # Equivalent du == en Java print(copie is uneListe) # Equivalent du hashCode() en java print(id(copie), id(uneListe)) True False 51316416 51315096
  • 17. ArrayList print("for ... in ...") for dpt in uneListe: print(dpt) print("for ... in enumerate(...)") for idx, dpt in enumerate(uneListe): print(idx, " -> ", dpt) for ... in ... Morbihan ... Loire-Atlantique for ... in enumerate(...) 0 -> Morbihan ... 4 -> Loire-Atlantique
  • 18. ArrayList if 'Morbihan' in uneListe : print("A moitié bretons") uneListe.remove('Morbihan') print(uneListe) uneListe.sort() print(uneListe) A moitié bretons ['Finistère', 'Côtes-dArmor', 'Ile et Vilaine', 'Loire-Atlantique'] ['Côtes-dArmor', 'Finistère', 'Ile et Vilaine', 'Loire-Atlantique']
  • 19. Set # Création de la patte à galette myset = {'farine', 'eau', 'sel', 'oeufs'} print(myset) # Finalement double dose de farine myset.add('farine') print(myset) # Jamais de la vie avec des oeufs myset.remove('oeufs') print(myset) {'eau', 'sel', 'farine', 'oeufs'} {'eau', 'sel', 'farine', 'oeufs'} {'eau', 'sel', 'farine'}
  • 20. Map mydict = { # Tableau comme valeur 'ingredients': ['farine', 'eau'], # Set comme valeur 'ustensiles': {'spatule', 'poele'}, # Tout type 'duree': 10, # Imbrication des dictionaires entre eux 'difficulte': { 'debutants': 'facile', 'experimente': 'super facile'} } print(mydict) mydict.pop('ustensiles') print(json.dumps(mydict, indent=2, separators=(',', ': ')))
  • 21. Map {'ustensiles': {'poele', 'spatule'}, 'duree': 10, 'difficulte': {'debutants': 'facile', 'experimente': 'super facile'}, 'ingredients': ['farine', 'eau']} { "duree": 10, "difficulte": { "debutants": "facile", "experimente": "super facile" }, "ingredients": [ "farine", "eau" ] }
  • 22. Fonctions def ma_fonction(arg1, arg2="default", *args, **kwargs): # arg1 est obligatoire print("arg1:", arg1) # arg2 optionel avec une valeur par défaut print("arg2:", arg2) # args est un tableau print("args:", args) # kwargs est un dictionnaire print("kwargs:", kwargs) if __name__ == '__main__': print('########### appel 1 ###########') ma_fonction('1') print('########### appel 2 ###########') ma_fonction('2', 'la','decl.', 'est', 'flexible',vous_en='pensez quoi ?')
  • 23. Fonctions ########### appel 1 ########### arg1: 1 arg2: default args: () kwargs: {} ########### appel 2 ########### arg1: 2 arg2: la args: ('declaration', 'est', 'tres', 'flexible') kwargs: {'pensez': 'quoi ?', 'vous': 'en'}
  • 24. Classes class MaClasse(object): def __init__(self, transform): self.attribut = 'un attribut' self.transform = transform def affiche(self): print(self.transform(self.attribut)) if __name__ == '__main__': uneIntance = MaClasse(lambda x:x.upper()) uneIntance.affiche() UN ATTRIBUT
  • 25. ● Favoriser autant que possible l’utilisation de fonctions ● Toujours préférer une fonction à l’utilisation de l’héritage Classes et fonctions
  • 26. ● Notion de package comme en java ● Un répertoire doit contenir un fichier __init__.py ● Possibilité d’importer un package dans son intégralité ou bien seulement un module ● Le mot clé as permet de gérer les éventuels conflits de nommage ● Recherche relativement à la variable PYTHON_PATH Import
  • 27. Et vraiment beaucoup de choses
  • 29. ● De nombreuses librairies sont disponibles dans le runtime Python ● Eco-système très riche et très communautaire Librairies
  • 31. Jetty <> http.server python –m http.server 8080 ● Utile créer un serveur HTTP minimaliste
  • 32. Documentation def max(*args, key=None): """ max(iterable, *[, default=obj, key=func]) - > value max(arg1, arg2, *args, *[, key=func]) -> value With a single iterable argument, return its biggest item. The default keyword-only argument specifies an object to return if the provided iterable is empty. With two or more arguments, return the largest argument. """ pydoc permet de générer la doc
  • 33. JUNIT, TestNG <> unittest import unittest def fun(x,y): return x + y class MyTest(unittest.TestCase): def setUp(self): self.inc = 1 def test_premier(self): self.assertEqual(fun(3,self.inc), 4) def test_second(self): self.assertEqual(fun(3,self.inc), 'wrong')
  • 34. Mockito <> unittest.mock from unittest.mock import MagicMock class ProductionClass(object): def method(self): self.something(1, 2, 3) def something(self, a, b, c): pass real = ProductionClass() real.something = MagicMock() real.method() real.something.assert_called_once_with(1, 2, 3) Dans la librairie standard depuis Python 3.3
  • 35. ● Extrêmement complet ● Attention à ne bien initialiser qu’une fois ● Pas tout le temps compatible avec d’autre modules (multithread windows par exemple) xxx4J, LogPack <>Logging import logging logging.basicConfig(filename='example.log',level=l ogging.DEBUG) logging.debug('This message should go to the log file') logging.info('So should this') logging.warning('And this, too')
  • 36. Jackson <> json json_string = '{"first_name": "Guido", "last_name":"Rossum"}' parsed_json = json.loads(json_string) print(parsed_json['first_name']) d = { 'first_name': 'Guido', 'titles': ['BDFL', 'Developer'], } print(json.dumps(d, sort_keys=True, indent=4)) Guido { "first_name": "Guido", "titles": [ "BDFL", "Developer" ]}
  • 37. Autres équivalences JAVA PYTHON Commons IO os, shutil, subprocess et sys Commons Collections collections Commons Codec codecs Guava Ba y’en a pas besoin
  • 39. ● Pip est le gestionnaire de dépendance couramment utilisé ● Par convention la liste des dépendance est contenue dans le fichier requirements.txt ● Pour installer / upgrader Gestion des dépendances pymongo==2.8.0 pymssql==2.1.1 pip install requirements.txt
  • 40. Virtualenv ● VENV permet d’isoler un environnement d’éxécution ● Permet de figer une version de Python et les dépendances ● Absolument nécessaire en toute occasion python -m venv myenv myenv/Scripts/activate.bat
  • 42. Jodatime <> dateutil from dateutil.relativedelta import * from dateutil.easter import * from dateutil.rrule import * from dateutil.parser import * now = parse("Sat May 30 15:20:08 GMT 2015") today = now.date() year = rrule(YEARLY,bymonth=8,bymonthday=13,byweekday=FR )[0].year rdelta = relativedelta(easter(year), today) print(…) Today is: 2015-05-30 Year with next Aug 13th on a Friday is: 2021 How far is the Easter of that year: relativedelta(years=+5, months=+10, days=+5) And the Easter of that year is: 2021-04-04
  • 43. HTTPClient <> Requests r = requests.get('https://…/json', auth=('u','p')) print(r.status_code) print(r.headers['content-type']) os.system("pause") print(r.text) os.system("pause") print(r.json()['releases']['1.0.4 ']) ● Mises à jour de sécurité fréquentes ● Pool de connections ● Gestion multi-part ● Persistance de cookies ● …
  • 44. Bootle <> Spring MVC from bottle import get, post, request # or route @get('/login') # or @route('/login') def login(): return '''<form action="/login … ''' @post('/login') # or @route('/login', method='POST') def do_login(): username = request.forms.get('username') if check_login(username, password): return "<p>Your login was correct.</p>" else: return "<p>Login failed.</p>" ● Template, routing, serialization …
  • 45. ● SQLAlchemy est Spring JDBC et Hibernate réunis ● DJANGO est à Python de que Grails est à Groovy ● Des librairies scientifique pour grapher des résultats ● Spark et son API PYTHON ● Des drivers pour toutes les bases de données No-SQL ● … Et aussi
  • 46. PEP8
  • 47. ● classes : CorrectClassName ● exceptions : IncorrectClassNameError (suffixe "Error" !) ● fonctions : get_correct_number() ● méthodes : get_correct_number(self) ● arguments des méthodes et fonctions : get_correct_number(random=False) ● variables : number = my_object.get_correct_number() ● constantes : ANSWER_TO_LIFE = 42 Conventions de nommage
  • 48. ● Script PEP 8 ● autre Pour vérifier
  • 50. ● http://sametmax.com/cours-et-tutos/les- articles-pour-apprendre-python-dans-le-bon- ordre/ ● http://docs.python-guide.org/en/latest/ ● http://antrix.net/static/pages/python-for- java/online/ ● http://stackoverflow.com/questions/1052435/ moving-from-java-to-python Pour bien commencer
  • 51. ● http://sametmax.com ● http://www.talkpythontome.com/ ● http://pycoders.com/ Pour se tenir au courant • VIDEO PYCON 2015

Hinweis der Redaktion

  1. Me relire MAJ le ws et uploader sur Github Répéter
  2. Usage script de python Envie de faire un projet plus conséquent avec Python Impression de recommencer de zéro
  3. Source : http://antrix.net/static/pages/python-for-java/online/#what_is_python http://fr.wikipedia.org/wiki/Python_%28langage%29
  4. PEP = Python Enchancement Proposal
  5. http://python3wos.appspot.com/ http://sametmax.com/dois-je-apprendre-python-2-ou-python-3/ https://speakerdeck.com/pyconslides/python-3-dot-3-trust-me-its-better-than-python-2-dot-7-by-dr-brett-cannon http://sametmax.com/python-3-est-fait-pour-les-nouveaux-venus/
  6. http://python.lycee.free.fr/annexes.html https://spark.apache.org/docs/latest/programming-guide.html
  7. http://antrix.net/static/pages/python-for-java/online/#fun_with_lists
  8. http://antrix.net/static/pages/python-for-java/online/#fun_with_lists
  9. http://antrix.net/static/pages/python-for-java/online/#fun_with_lists
  10. http://antrix.net/static/pages/python-for-java/online/#fun_with_lists
  11. http://antrix.net/static/pages/python-for-java/online/#fun_with_lists
  12. Encore énormément de choses… Si vous aimez Groovy vous serez comme chez vous
  13. https://docs.python.org/3/library/
  14. https://docs.python.org/3.4/library/unittest.html
  15. https://docs.python.org/3.4/library/unittest.mock.html
  16. https://labix.org/python-dateutil
  17. http://docs.python-requests.org/en/latest/
  18. http://media.jehaisleprintemps.net/talks/pep8-talk/#slide85