Je fais principalement du développement en C # depuis quelques années, mais j'ai récemment commencé à utiliser un peu de Python (pas Iron Python). Mais je ne suis pas sûr d'avoir fait le saut mental en Python ... Je sens que j'essaie de faire les choses comme je le ferais en C #.
Des conseils sur la façon de tirer pleinement parti de Python?
Ou des trucs et astuces, des choses à apprendre, des choses à surveiller?
Tout d’abord, consultez les conseils de tgray _ et de Lundström .
Python est typé dynamiquement, donc contrairement à C #, vous ne vérifierez pas le type, mais le comportement. Vous voudrez peut-être google sur la frappe de canard. Cela implique que vous n'avez pas à traiter avec la boxe et le déballage.
Python est entièrement orienté objet, mais la syntaxe n’impose pas ce paradigme. Vous pouvez écrire en Python sans utiliser le mot "classe".
La bibliothèque d'interface graphique fournie avec Python ne peut être comparée à celle de C #. Vérifiez les bibliothèques PyQt , GTK ou wxPython .
Python a beaucoup de concepts que vous ne connaissez peut-être pas: compréhension de liste, générateurs (le "rendement" existe en C #, mais il est peu utilisé), décorateurs, métaclasses, etc. N'ayez pas peur; vous pouvez programmer en Python sans eux. Ce ne sont que des outils intelligents, pas obligatoires.
Comme en C #, la bibliothèque standard Python est énorme. Toujours le regarder quand vous rencontrez un problème. Il est fort probable que quelqu'un l'ait déjà résolu.
Python utilise les étiquettes de liaison et de variable LATE. Il est beaucoup trop tôt pour quelqu'un qui commence avec la langue à s'en soucier, mais souvenez-vous qu'un jour, vous rencontrerez un comportement avec des variables qui vous semblent illogiques, et vous devrez vérifier cela. Pour le moment:
Rappelez-vous juste de ne jamais faire ce qui suit:
def myfunc(my_list=[]) :
# bla
Au lieu:
def myfunc(my_list=()) :
my_list = list(my_list)
Et tu seras bon. Il y a une bonne raison à cela, mais ce n'est pas le problème :-)
Python est multi-plateforme, écrivez sur Mac et utilisez Linux si vous le souhaitez.
Python n'est pas fourni avec un complexe IDE (vous avez INACTIF :-)). Si vous êtes un accro de Visual Studio, vérifiez Glade . Ce n'est pas aussi avancé que Visual Studio, mais c'est quand même un bon RAD .
Si vous souhaitez développer une application Web en Python, n'oubliez pas que Python n'est pas .NET. Vous devez ajouter un cadre Web à celui-ci si vous souhaitez comparer. J'aime Django .
Python n'a pas besoin d'un énorme IDE pour travailler. SciTE , Notepad ++ , INACTIF , Kate , gedit ... Les éditeurs légers sont vraiment suffisants.
Python applique l'indentation à l'aide d'espaces et de sauts de ligne, vous ne pouvez pas changer cela. Vous devez éviter d'utiliser des tabulations pour l'indentation et choisir plutôt des espaces. L'équivalent de bracelets vides {} est le mot clé "pass".
Python n'impose pas les variables privées. Vous pouvez définir une variable privée en utilisant "__" (deux traits de soulignement) au début du nom de la variable, mais elle peut toujours être contournée de manière délicate. Python suppose généralement que les programmeurs sont des adultes qui savent ce qu’ils font et communiquent.
Python utilise l'itération. Beaucoup. Beaucoup beaucoup. Le module itertools est donc votre meilleur ami.
Python n'a pas de délégué intégré. Le module des délégués n’est pas ce que vous pensez. Pour la programmation événementielle, utilisez une bibliothèque graphique (ou codez vous-même le modèle, ce n’est pas si difficile).
Python a un interprète: vous pouvez tester presque tout, en direct. Il devrait toujours être en cours d'exécution à côté de votre éditeur de texte. L’interpréteur de base Python n’est pas grand chose, essayez IPython pour quelque chose de savoureux.
Python est auto-documenté: utilisez docstrings dans votre propre code et consultez les autres en utilisant "help ()" dans l'interpréteur python
Il y a des centaines de modules. Prendre plaisir.
Les codeurs Python utilisent massivement l'équivalent de la boucle foreach
C #, et le préfèrent aux autres:
Itérations de base:
for item in collection:
print str(item)
"collection" peut être une chaîne, une liste, un Tuple ... Any iterable: tout objet définissant la méthode .next (). Il y a beaucoup d'itérables en Python. E.g: un idiome Python typique pour lire les fichiers:
for line in open("/path/to/file") :
print line
Un raccourci vers la boucle for est appelé "compréhension de liste". C'est un moyen de créer un nouvel itérable dans une ligne:
Création d'une liste filtrée avec compréhension de la liste:
my_list = [item for item in collection if condition]
Création d'une nouvelle liste avec une compréhension de liste:
my_list = [int(item) * 3 for item in collection]
Création d'un nouveau générateur avec une liste à comprendre:
my_list = (int(item) * 3 for item in collection)
Comme ci-dessus, mais les valeurs seront générées à la volée à la première itération, puis perdues. Plus d'informations à ce sujet ici .
Ordinaire pour boucle
Si vous voulez exprimer une boucle for habituelle, vous pouvez utiliser la fonction xrange (). for (int i = 0; i < 5; i++)
devient:
for i in xrange(0,5) :
do while while équivalent
Il n'y a pas de "faire pendant" en Python. Je ne l'ai jamais manqué, mais si vous devez utiliser cette logique, procédez comme suit:
while True : # Yes, this is an infinite loop. Crazy, hu?
# Do your stuff
if condition :
break
Permutation de variables:
a, b = b, a
Assignations multiples:
Ce qui précède est simplement le résultat de ce que nous appelons le "décompactage" (appliqué ici à un tuple). Un moyen simple de l'expliquer consiste à affecter chaque valeur d'une séquence directement à un nombre égal de variables, sur une ligne:
animal1, animal2, animal3, animal4 = ["cow", "dog", "bird", "fish"]
Cela a beaucoup d'implications. Lors d'une itération sur un tableau multidimensionnel, vous obtenez normalement chaque sous-séquence une par une, puis vous l'utilisez, par exemple:
agenda = [("steve", "jobs"), ("linus", "torvald"), ("bill", "gates"),("jon", "skeet")]
for person in agenda:
print person[0], person[1]
Mais avec la décompression, vous pouvez également affecter les valeurs directement aux variables:
agenda = [("steve", "jobs"), ("linus", "torvald"), ("bill", "gates"),("jon", "skeet")]
for name, lastname in agenda:
print name, lastname
Et c’est pourquoi, si vous voulez obtenir un index en itérant, les codeurs Python utilisent les idiomes suivants (enumerate () est une fonction standard):
for index, value in enumerate(sequence) :
print index, value
Déballer dans les appels de fonctions
Ceci est une utilisation avancée, et vous pouvez le sauter si cela vous dérange.
Vous pouvez décompresser les valeurs en utilisant le signe "*" pour utiliser une séquence directement dans un appel de fonction. Par exemple:
>>> foo(var1, var1, var3) :
print var1, var2
print var3
>>> seq = (3.14, 42, "yeah")
>>> foo(*seq)
3.14 42
yeah
Il y a même plus que ça. Vous pouvez décompresser un dictionnaire sous forme de variables nommées et écrire des prototypes de fonction avec *
, **
pour accepter un nombre arbitraire d'arguments. Mais il n’est pas assez utilisé pour mériter de faire ce post encore plus longtemps :-).
print "This is a %s on %s about %s" % ("post", "stackoverflow", "python")
print "This is a %(subject)s on %(place)s about %(about)s" % {"subject" : "post", "place" : "stackoverflow", "about" : "python"}
Vous pouvez obtenir n'importe quelle partie d'un itérable en utilisant une syntaxe très concise:
print "blebla"[2:4] # Print "eb"
last = string[:-1] # Getting last element
even = (0,1,2,3,4,5,6,7,8,9)[::2] # Getting evens only (third argument is a step)
reversed = string[::-1] # Reversing a string
Vous pouvez vérifier ce que vous faites en C #, mais il existe des méthodes "pythoniques" (plus courtes, plus claires :-)):
if 1 in (1, 2, 3, 4) : # Check en element is in a sequence
if var : # check is var is true. Var == false if it's False, 0, (), [], {} or None
if not var : # Contrary of above
if thing is var: # Check if "thing" and "var" label the same content.
if thing is None : # We use that one because None means nothing in Python (almost null)
sentence = "It's a good day to write some code"
print " ".join([Word.upper() for Word in sentence.split() if "o" in Word])
Sortie: "BON À CERTAINS CODE"
Les codeurs Python ne vérifient généralement pas si quelque chose est possible. Ils sont un peu comme Chuck Norris. Ils le font Puis attraper l'exception. En règle générale, vous ne vérifiez pas si un fichier existe, vous essayez de l'ouvrir et vous annulez en cas d'échec:
try :
f = open(file)
except IOerror :
print "no file here !"
Bien sûr, Chuck Norris n’utilise jamais d’exception car il n’échoue jamais.
"Else" est un monde d'utilisations multiples en Python. Vous trouverez "else" après "if", mais après "sauf" et "pour" également.
for stuff in bunch :
# Do things
else :
# This always happens unless you hit "break" in the loop
Cela fonctionne aussi pour la boucle "while", même si nous n’utilisons pas autant cette boucle.
try :
# A crazy stuff
except ToCrazyError :
# This happens if the crazy stuff raises a ToCrazyError Exception
else :
# This will happen if there is no error so you can put only one line after the "try" clause
finally :
# The same as in C#
Si vous êtes curieux, voici quelques avancées avancées rapides et sales (mais sympa) extraits de Python .
Si vous n’êtes pas novice en programmation, je recommanderais le livre "Plongez dans Python" de Mark Pilgrim. Il explique Python de manière à ce qu'il soit facile de comprendre comment les techniques et les idiomes de Python peuvent être appliqués pour créer des applications pratiques.
Commencez par lire Le zen de Python
Vous pouvez le lire sur le lien ci-dessus ou simplement taper import this
à l'invite de Python. =)
Tirez parti des fonctionnalités Python non offertes * par C #
Tels que la frappe de canard, les métaclasses, la compréhension de liste, etc. *
Ecrivez des programmes simples juste pour tester ces fonctionnalités. Vous allez vous habituer (si ce n'est pas accro) à eux en un rien de temps.
Regardez la bibliothèque standard Python
Donc, vous ne réinventez pas la roue. N'essayez pas de tout lire, même un rapide coup d'œil sur la table des matières pourrait vous faire gagner beaucoup de temps.
* Je sais que C # possède déjà certaines de ces fonctionnalités, mais d'après ce que je peux voir, elles sont plutôt nouvelles ou pas couramment utilisées par les développeurs C #. Corrigez-moi si j'ai tort, s'il-vous plait.
Au cas où vous n'en auriez pas encore entendu parler, Dive Into Python est un excellent point de départ pour quiconque apprend Python. Il a également un tas de Trucs et astuces .
Si vous apprenez mieux une nouvelle langue en prenant de petites mesures incrémentielles, je vous recommande d’utiliser IronPython . Sinon, utilisez la commande CPython et ne modifiez plus le code C # tant que vous n’avez pas l’impression de maîtriser Python.
Je suggérerais d'avoir un bon éditeur pour ne pas vous faire piquer par des espaces. Pour plus de simplicité, j'utilise simplement les packages Link de ActivePython, qui incluent un éditeur et toutes les bibliothèques win32api. Ils sont assez amusants à utiliser si vous utilisez C #. Le win32api en Python peut être un peu plus simple. Vous n'avez pas besoin de faire toute la chose DDLImport. Téléchargez ActivePython (fourni avec CPython), ouvrez-le et commencez à saisir des éléments sur la console. Vous le récupérerez assez facilement après avoir utilisé C #. Pour des informations plus intéressantes sur Python, essayez Code ActiveState , qui contient toutes sortes de recettes, ce qui peut vous permettre de voir très simplement différentes choses que vous pouvez faire avec Python.
Je suis à peu près à votre place aussi, utilisant toujours C # pour la plupart de mes travaux, mais utilisant de plus en plus Python pour d'autres projets.
@ e-satis connait probablement Python de fond en comble et tous ses conseils sont excellents. De mon point de vue, la plus grande différence pour moi a été la suivante:
Retournez dans fonctionnel. pas nécessairement du code spaghetti, mais apprendre que tout ne doit pas nécessairement être dans un objet, il ne devrait pas l'être non plus.
L'interprète. C'est comme la fenêtre immédiate sauf 10 ^ 10 mieux. En raison du fonctionnement de Python, vous n'avez pas besoin de tous les bagages et la merde que C # vous fait mettre avant de pouvoir exécuter des tâches; vous pouvez simplement biffer quelques lignes et voir comment les choses fonctionnent.
J'ai normalement une instance IDLE dans laquelle je lance des extraits de code pendant que je travaille sur le fonctionnement des différents éléments de la langue lorsque je modifie mes fichiers ... par exemple. Je suis occupé à travailler sur une liste avec une carte, mais je ne suis pas à 100% sur le lambda, je devrais utiliser ... insérer quelques lignes dans IDLE, voir comment cela fonctionne et ce qu'il fait.
Et enfin, aimer dans la verbosité de Python, et je ne veux pas dire cela dans le sens long de la verbosité, mais comme l'a souligné e-satis, utiliser des verbes comme "in", "est", "pour", etc.
Si vous avez fait beaucoup de travail de réflexion en C #, vous aurez envie de pleurer quand vous verrez à quel point les mêmes choses sont simples en Python.
Bonne chance.
Si vous avez une expérience en programmation et que vous n'avez pas envie de dépenser de l'argent, je vous le recommande Comment penser comme un informaticien en Python .
Et puis quelque chose dont vous pouvez bénéficier:
IPython Shell: achèvement automatique dans le shell. Il effectue des opérations par lots, ajoute une tonne de fonctionnalités, de journalisation, etc. >>> Jouez avec le coquillage - toujours!
easy_install/ pip : So Nice et un moyen facile d'installer une application Python tierce.