mirror of
https://github.com/almet/notmyidea.git
synced 2025-04-28 19:42:37 +02:00
243 lines
No EOL
10 KiB
HTML
243 lines
No EOL
10 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
<meta http-equiv="content-type" content="text/html; charset=utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1">
|
|
<link rel="shortcut icon" type="image/x-icon" href="favicon.ico" />
|
|
|
|
<title>Python ? go ! - Alexis - Carnets en ligne</title>
|
|
|
|
<meta charset="utf-8" />
|
|
<link href="https://blog.notmyidea.org/feeds/all.atom.xml" type="application/atom+xml" rel="alternate" title="Alexis - Carnets en ligne Full Atom Feed" />
|
|
<link rel="stylesheet" href="https://blog.notmyidea.org/theme/css/poole.css"/>
|
|
<link rel="stylesheet" href="https://blog.notmyidea.org/theme/css/syntax.css"/>
|
|
<link rel="stylesheet" href="https://blog.notmyidea.org/theme/css/lanyon.css"/>
|
|
<link rel="stylesheet" href="//fonts.googleapis.com/css?family=PT+Serif:400,400italic,700%7CPT+Sans:400">
|
|
<link rel="stylesheet" href="https://blog.notmyidea.org/theme/css/styles.css"/>
|
|
|
|
|
|
|
|
<style>
|
|
|
|
h1 {
|
|
font-family: "Avant Garde", Avantgarde, "Century Gothic", CenturyGothic, "AppleGothic", sans-serif;
|
|
padding: 80px 50px;
|
|
text-align: center;
|
|
text-transform: uppercase;
|
|
text-rendering: optimizeLegibility;
|
|
color: #202020;
|
|
letter-spacing: .1em;
|
|
text-shadow:
|
|
-1px -1px 1px #111,
|
|
2px 2px 1px #eaeaea;
|
|
}
|
|
|
|
#main {
|
|
text-align: justify;
|
|
text-justify: inter-word;
|
|
}
|
|
#main h1 {
|
|
padding: 10px;
|
|
}
|
|
|
|
.post-headline {
|
|
padding: 15px;
|
|
}
|
|
</style>
|
|
</head>
|
|
|
|
<body>
|
|
<!-- Target for toggling the sidebar `.sidebar-checkbox` is for regular
|
|
styles, `#sidebar-checkbox` for behavior. -->
|
|
<input type="checkbox" class="sidebar-checkbox" id="sidebar-checkbox">
|
|
<!-- Toggleable sidebar -->
|
|
<div class="sidebar" id="sidebar">
|
|
<div class="sidebar-item">
|
|
<div class="profile">
|
|
<img src="https://blog.notmyidea.org/theme/img/profile.png"/>
|
|
</div>
|
|
</div>
|
|
|
|
<nav class="sidebar-nav">
|
|
<a class="sidebar-nav-item" href="/">Articles</a>
|
|
|
|
<a class="sidebar-nav-item" href="https://www.vieuxsinge.com">Brasserie du Vieux Singe</a>
|
|
<a class="sidebar-nav-item" href="http://blog.notmyidea.org/pages/about.html">A propos</a>
|
|
<a class="sidebar-nav-item" href="https://twitter.com/ametaireau">Messages courts</a>
|
|
<a class="sidebar-nav-item" href="https://github.com/almet">Code</a>
|
|
</nav>
|
|
</div> <div class="wrap">
|
|
<div class="masthead">
|
|
<div class="container">
|
|
<h3 class="masthead-title">
|
|
<a href="https://blog.notmyidea.org/" title="Home">Alexis - Carnets en ligne</a>
|
|
</h3>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="container content">
|
|
<div id="main" class="posts">
|
|
<h1 class="post-title">Python ? go !</h1>
|
|
<span class="post-date">17 décembre 2009, dans <a class="no-color" href="category/technologie.html">Technologie</a></span>
|
|
<img id="illustration" src="" />
|
|
|
|
<div class="post article">
|
|
<h1>🌟</h1>
|
|
|
|
<p>Cela fait maintenant un peu plus d'un mois que je travaille sur un
|
|
projet en <a href="http://www.djangoproject.org">django</a>, et que,
|
|
nécessairement, je me forme à <a href="http://python.org/">Python</a>. Je prends
|
|
un plaisir non dissimulé à découvrir ce langage (et à l'utiliser), qui
|
|
ne cesse de me surprendre. Les premiers mots qui me viennent à l'esprit
|
|
à propos de Python, sont "logique" et "simple". Et pourtant puissant
|
|
pour autant. Je ne manque d'ailleurs pas une occasion pour faire un peu
|
|
d'<em>évangélisation</em> auprès des quelques personnes qui veulent bien
|
|
m'écouter.</p>
|
|
<h2 id="the-zen-of-python">The Zen of Python</h2>
|
|
<p>Avant toute autre chose, je pense utile de citer Tim Peters, et <a href="http://www.python.org/dev/peps/pep-0020/">le
|
|
PEP20</a>, qui constituent une
|
|
très bonne introduction au langage, qui prends la forme d'un <em>easter
|
|
egg</em> présent dans python</p>
|
|
<p>``` sourceCode bash</p>
|
|
<blockquote>
|
|
<blockquote>
|
|
<blockquote>
|
|
<p>import this
|
|
The Zen of Python, by Tim Peters</p>
|
|
</blockquote>
|
|
</blockquote>
|
|
</blockquote>
|
|
<p>Beautiful is better than ugly.
|
|
Explicit is better than implicit.
|
|
Simple is better than complex.
|
|
Complex is better than complicated.
|
|
Flat is better than nested.
|
|
Sparse is better than dense.
|
|
Readability counts.
|
|
Special cases aren't special enough to break the rules.
|
|
Although practicality beats purity.
|
|
Errors should never pass silently.
|
|
Unless explicitly silenced.
|
|
In the face of ambiguity, refuse the temptation to guess.
|
|
There should be one-- and preferably only one --obvious way to do it.
|
|
Although that way may not be obvious at first unless you're Dutch.
|
|
Now is better than never.
|
|
Although never is often better than <em>right</em> now.
|
|
If the implementation is hard to explain, it's a bad idea.
|
|
If the implementation is easy to explain, it may be a good idea.
|
|
Namespaces are one honking great idea -- let's do more of those!
|
|
```</p>
|
|
<p>J'ai la vague impression que c'est ce que j'ai toujours cherché à faire
|
|
en PHP, et particulièrement dans <a href="http://www.spiral-project.org">le framework
|
|
Spiral</a>, mais en ajoutant ces concepts
|
|
dans une sur-couche au langage. Ici, c'est directement de <em>l'esprit</em> de
|
|
python qu'il s'agit, ce qui signifie que la plupart des bibliothèques
|
|
python suivent ces concepts. Elle est pas belle la vie ?</p>
|
|
<h2 id="comment-commencer-et-par-ou">Comment commencer, et par ou ?</h2>
|
|
<p>Pour ma part, j'ai commencé par la lecture de quelques livres et
|
|
articles intéressants, qui constituent une bonne entrée en matière sur
|
|
le sujet (La liste n'est bien évidemment pas exhaustive et vos
|
|
commentaires sont les bienvenus) :</p>
|
|
<ul>
|
|
<li><a href="http://diveintopython.adrahon.org/">Dive into python</a></li>
|
|
<li><a href="http://www.swaroopch.com/notes/Python_fr:Table_des_Matières">A byte of
|
|
python</a></li>
|
|
<li><a href="http://www.amazon.fr/Python-Petit-guide-lusage-développeur/dp/2100508830">Python: petit guide à l'usage du développeur
|
|
agile</a>
|
|
de <a href="http://tarekziade.wordpress.com/">Tarek Ziadé</a></li>
|
|
<li><a href="http://docs.python.org/index.html">La documentation officielle
|
|
python</a>, bien sûr !</li>
|
|
<li><a href="http://video.pycon.fr/videos/pycon-fr-2009/">Les vidéos du
|
|
pyconfr 2009</a>!</li>
|
|
<li>Un peu de temps, et une console python ouverte :)</li>
|
|
</ul>
|
|
<p>J'essaye par ailleurs de partager au maximum les ressources que je
|
|
trouve de temps à autres, que ce soit <a href="http://www.twitter.com/ametaireau">via
|
|
twitter</a> ou <a href="http://delicious.com/ametaireau">via mon compte
|
|
delicious</a>. Allez jeter un œil <a href="http://delicious.com/ametaireau/python">au tag
|
|
python</a> sur mon profil, peut
|
|
être que vous trouverez des choses intéressantes, qui sait!</p>
|
|
<h2 id="un-python-sexy">Un python sexy</h2>
|
|
<p>Quelques fonctionnalités qui devraient vous mettre l'eau à la bouche:</p>
|
|
<ul>
|
|
<li><a href="http://docs.python.org/library/stdtypes.html#comparisons">Le chaînage des opérateurs de
|
|
comparaison</a>
|
|
est possible (a\<b \<c dans une condition)</li>
|
|
<li>Assignation de valeurs multiples (il est possible de faire a,b,c =
|
|
1,2,3 par exemple)</li>
|
|
<li><a href="http://docs.python.org/tutorial/datastructures.html">Les listes</a>
|
|
sont simples à manipuler !</li>
|
|
<li>Les <a href="http://docs.python.org/tutorial/datastructures.html#list-comprehensions">list
|
|
comprehension</a>,
|
|
ou comment faire des opérations complexes sur les listes, de manière
|
|
simple.</li>
|
|
<li>Les
|
|
<a href="http://docs.python.org/library/doctest.html?highlight=doctest">doctests</a>:
|
|
ou comment faire des tests directement dans la documentation de vos
|
|
classes, tout en la documentant avec de vrais exemples.</li>
|
|
<li>Les
|
|
<a href="http://www.python.org/doc/essays/metaclasses/meta-vladimir.txt">métaclasses</a>,
|
|
ou comment contrôler la manière dont les classes se construisent</li>
|
|
<li>Python est <a href="http://wiki.python.org/moin/Why%20is%20Python%20a%20dynamic%20language%20and%20also%20a%20strongly%20typed%20language">un langage à typage fort
|
|
dynamique</a>:
|
|
c'est ce qui m'agaçait avec PHP qui est un langage à typage faible
|
|
dynamique.</li>
|
|
</ul>
|
|
<p>Cous pouvez également aller regarder <a href="http://video.pycon.fr/videos/free/53/">l'atelier donné par Victor Stinner
|
|
durant le Pyconfr 09</a>. Have fun
|
|
!</p>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<label for="sidebar-checkbox" class="sidebar-toggle"></label>
|
|
|
|
<script>
|
|
(function(document) {
|
|
var i = 0;
|
|
// snip empty header rows since markdown can't
|
|
var rows = document.querySelectorAll('tr');
|
|
for(i=0; i<rows.length; i++) {
|
|
var ths = rows[i].querySelectorAll('th');
|
|
var rowlen = rows[i].children.length;
|
|
if (ths.length > 0 && ths.length === rowlen) {
|
|
rows[i].remove();
|
|
}
|
|
}
|
|
})(document);
|
|
</script>
|
|
|
|
<script>
|
|
/* Lanyon & Poole are Copyright (c) 2014 Mark Otto. Adapted to Pelican 20141223 and extended a bit by @thomaswilley */
|
|
(function(document) {
|
|
var toggle = document.querySelector('.sidebar-toggle');
|
|
var sidebar = document.querySelector('#sidebar');
|
|
var checkbox = document.querySelector('#sidebar-checkbox');
|
|
document.addEventListener('click', function(e) {
|
|
var target = e.target;
|
|
if(!checkbox.checked ||
|
|
sidebar.contains(target) ||
|
|
(target === checkbox || target === toggle)) return;
|
|
checkbox.checked = false;
|
|
}, false);
|
|
})(document);
|
|
</script>
|
|
<!-- Piwik -->
|
|
<script type="text/javascript">
|
|
var _paq = _paq || [];
|
|
_paq.push(['trackPageView']);
|
|
_paq.push(['enableLinkTracking']);
|
|
(function() {
|
|
var u="//tracker.notmyidea.org/";
|
|
_paq.push(['setTrackerUrl', u+'piwik.php']);
|
|
_paq.push(['setSiteId', 3]);
|
|
var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];
|
|
g.type='text/javascript'; g.async=true; g.defer=true; g.src=u+'piwik.js'; s.parentNode.insertBefore(g,s);
|
|
})();
|
|
</script>
|
|
<noscript><p><img src="//tracker.notmyidea.org/piwik.php?idsite=3" style="border:0;" alt="" /></p></noscript>
|
|
<!-- End Piwik Code -->
|
|
</div>
|
|
</body>
|
|
</html> |