~ Conseils pour les débutants de Python donnés avec amour par Pythonista ① ~

Motivation

Je m'appelle @hanaken_Nirvana et je suis le directeur représentatif de Liaro et le casier de porte de fenêtre à #HiveShibuya.

La société développe une application de recommandation vidéo, mais je l'écris essentiellement en Python (y compris Deep Learning * et NLP) de l'API au moteur de recommandation (bien que ce soit Scala à certains endroits ...). Dans le domaine des startups, il y a beaucoup de RoR et je voulais que la population Python augmente, mais je me suis dit: «Intelligence artificielle! On me demande souvent d'enseigner Python à cause du boom, alors j'aimerais écrire un mémo pour cette époque, en me concentrant sur la grammaire de type Python pour les débutants en Python.

** Eh bien, je ne suis pas un contributeur Python, je suis juste un utilisateur Python, donc si vous faites une erreur, j'aimerais que vous le signaliez ʕº̫͡ºʔ **

Format interactif

Normalement, vous devez écrire du code dans un fichier et l'exécuter, mais en Python vous pouvez l'utiliser comme interpréteur en écrivant "python" dans la console.

python:Python3.5.0


% python
Python 3.5.0 (default, Feb  8 2016, 19:02:32) 
[GCC 4.2.1 Compatible Apple LLVM 6.1.0 (clang-602.0.53)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> print('Hello world!!')
Hello world!!
>>> 

Retrait

Python est indent strict. Une erreur se produit si le retrait est mal aligné. La différence entre tabulations et espaces est également inutile (2 séries interprètent 1 tabulation = 8 espaces, mais 3 séries ne le sont pas). Il est recommandé de mettre en retrait avec 4 espaces. Voici un exemple d'ajout d'un nombre pair de 0 à 9.

python:Python3.5.0


>>> i = 0
>>> for j in range(10):
...     if j % 2 == 0:
...     i += j
  File "<stdin>", line 3
    i += j
    ^
IndentationError: expected an indented block
>>> 
>>> for j in range(10):
...     if j % 2 == 0:
...         i += j
... 
>>> i
20

L'obscurité de 2.x et 3.x

L'obscurité de la compatibilité descendante

En premier lieu, Python de nos jours est à peu près divisé en séries 2.x et séries 3.x. En dehors de cela, la série 3.x n'est pas toujours la dernière et se développe en même temps. La raison pour laquelle il y a deux lignes est que Python a une culture qui valorise la compatibilité descendante. Par conséquent, même si la version est mise à jour, les fonctions utilisées ne seront pas perdues. «(Après la mise à niveau), il a cassé même si je n'ai rien fait. Rien de tel ne se produit. C'est bon pour la santé mentale de ceux qui n'évoluent pas. Cependant, les spécifications deviennent gonflées et compliquées à cause de la rétrocompatibilité (code de caractère, classe, instruction d'impression, gestion des exceptions, etc ...). Ruby et autres jettent les anciennes spécifications, mais sous l'influence de cela, jetons les anciennes mauvaises spécifications à la fois! Le développement de la série 3.x a commencé avec ce sentiment. Donc ça marche sur 2.x, mais ça ne marche pas sur 3.x! À quelle fréquence (et vice versa)

Alors lequel doit être utilisé

Eh bien, je jette les mauvaises vieilles spécifications, donc si vous voulez l'utiliser à partir de maintenant, je recommande la série 3.x. Cependant, certaines bibliothèques ne peuvent être utilisées qu'avec 2.x, et il y a des moments où vous devez utiliser 2.x.

Code de caractère

La première pierre d'achoppement est le code du caractère.

Encodage de fichier

Il est délicat de savoir si cela doit être inclus dans le chapitre sur le code des caractères, mais au début du fichier .py, écrivez ce qui suit pour spécifier l'encodage.

Le codage de fichier est utf-En cas de 8


# coding:utf-8

Et si vous l'écrivez accidentellement, vous pouvez encoder / décoder la chaîne de caractères comme suit *.

python:Python3.5.0


>>> hoge = "Ah"
>>> hoge.encode("utf-8")
b'\xe3\x81\x82'
>>> hoge = b'\xe3\x81\x82'
>>> hoge.decode("utf-8")
'Ah'

Ce qui précède est une série 3.x, mais la façon d'écrire l'encodage / décodage est la même pour la série 2.x.

2. À propos du système x

Du point de vue de 2.x, il existe des types str et unicode même dans le type qui gère les caractères. Normalement, si vous le placez entre guillemets simples ou doubles ("python" ou "python" est OK en Python), il devient de type str, et si vous ajoutez le préfixe u, il devient de type unicode.

La différence entre les deux réside d'abord dans la sortie ci-dessous.

python:Python2.7.9


>>> "Ah" #str
'\xe3\x81\x82'
>>> u"Ah" #unicode
u'\u3042'

Le type str est une chaîne d'octets codée par chaque code de caractère (utf8, Shift_JIS, etc ...), et le type unicode est la position du code. * Ce n'était que du type str dans Python précoce et ne pouvait gérer que les caractères ascii (yeux blancs)

Par conséquent, j'ai créé un autre type appelé type unicode afin qu'il puisse gérer les caractères multi-octets (avec la compatibilité descendante à l'esprit). Il s'agit d'une mauvaise spécification ancienne typique. .. ..

Au fait, encoder / décoder ressemble à ceci.

python:Python3.5.0


>>> hoge = "Ah"
>>> hoge.encode("utf-8")
b'\xe3\x81\x82'
>>> hoge = b'\xe3\x81\x82'
>>> hoge.decode("utf-8")
'Ah'

3. À propos du système x

Ensuite, parlons de 3.x. Dans la série 3.x, le type str sans préfixe est le type unicode dans 2.x. Si vous souhaitez le gérer comme une chaîne d'octets, ajoutez b au préfixe. Cela ressemble à ce qui suit.

python:Python3.5.0


>>> "Ah" #str
'Ah'
>>> "Ah".encode("utf-8") #byte
b'\xe3\x81\x82'

Si vous pensez à cela, vous pouvez voir que la série 3.x est plus facile à gérer.

opérateur

Ce qui suit est un bref résumé des opérateurs et des opérations qui peuvent être utilisés. ** Version révisée en réponse à l'indication @ nobolis **

Opérateur d'algèbre

python:Python2.7.9


>>> 1 + 1 #Ajouter
2
>>> 1 - 1 #Soustraire
0
>>> 1 * 2 #Multiplier
2
>>> 1 / 2 #division
0
>>> 1 / 2.0 #division
0.5
>>> 3 // 2.0 #division(Tronquer)
1.0
>>> 5 % 4 #reste
1
>>> 2 ** 2 #Puissance
4

Il y a deux points à noter. Premièrement, uniquement dans le cas de 2 systèmes, le résultat sera de type int en divisant entre les types int. Donc, si vous avez besoin d'un point décimal, vous devez en diviser au moins un par virgule flottante. Et l'autre est que // n'est pas un quotient mais une division de troncature ** (bien que cela dépende de la façon dont vous définissez le reste mathématiquement en premier lieu). Par souci de clarté, le comportement lorsque le résultat du calcul est une valeur négative est indiqué ci-dessous.

python:Python3.5.0


>>> -3 // 2.0
-2.0
>>>

Dans ce cas, c'est «-3 / 2.0 = -1.5», mais s'il est tronqué, il sera arrondi à -2,0, ce qui est inférieur à -1,5 au lieu de ** - 1,0. ** ** Ceci est mathématiquement fondé, q étant le quotient et r le reste. ʻA / b = q reste r` Peut être exprimé comme. En d'autres termes

b * q + r = a (a,b>0)
b > r >= 0

est. Si vous essayez d'étendre cela à une valeur négative telle qu'elle est, vous devez l'arrondir vers moins l'infini au lieu de l'arrondir vers zéro. ** Si vous voulez arrondir à zéro, écrivez dans ʻint (a / b) `. ** **

Opérateur de bits

python:Python3.5.0


>>> ~10 #Inversion de bits
-11
>>> 10 & 14 #ET logique
10
>>> 10 | 14 #Somme logique
14
>>> 10 ^ 14 #Somme logique exclusive
4
>>> 10 << 1 #Opération de décalage à gauche
20
>>> 10 >> 1 #Opération de décalage à droite
5
Opérateur booléen

python:Python3.5.0


>>> True and False
False
>>> True or False
True
>>> not True
False

Ce qui suit a été ajouté avec les commentaires de @shiracamus.

4.1. Jugement de valeur de vérité

Les valeurs suivantes sont considérées comme fausses: · Aucun · Faux -Zéro en type numérique. Par exemple, 0, 0,0, 0j. -Séquence vide. Par exemple,'', (), []. -Mappage vide. Par exemple {}. · Dans une instance d'une classe définie par l'utilisateur, si cette classe définit les méthodes bool () ou len (), lorsque ces méthodes renvoient un entier 0 ou une valeur booléenne False. Toutes les autres valeurs sont considérées comme vraies - de nombreux types d'objets sont donc toujours vrais.

4.2. Opérations booléennes

Opération booléenne Si x est une valeur qui est déterminée comme vraie Si x est une valeur jugée fausse
x and y Valeur de y Valeur de x
x or y Valeur de x Valeur de y
not x False True

python:Python3.5.2


>>> 'abc' and 'xyz'
'xyz'
>>> 'abc' and ''
''
>>> 'abc' or 'xyz'
'abc'
>>> 'abc' or ''
'abc'
>>> '' or 'xyz'
'xyz'
>>> not 'abc'
False
>>> not ''
True
>>> for i in range(1, 20):
...  print(i%15==0 and 'FizzBuzz' or i%3==0  and 'Fizz' or i%5==0 and 'Buzz' or i)
...
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16
17
Fizz
19
Opérateur de comparaison

python:Python3.5.0


>>> 1 == 2
False
>>> 1 != 2
True
>>> 1 < 2
True
>>> 1 > 2
False
>>> 1 <= 2
True
>>> 1 >= 2
False
>>> 1 is 2
False
>>> 1 is not 2
True
>>> 1 in [1,2,3,4]
True
>>> 1 not in [1,2,3,4]
False

La différence entre == et ʻis est que == renvoie True, mais ʻis retourne False si les valeurs sont identiques. En d'autres termes, == requiert la même valeur, et ʻis` doit être la même (même instance). Un exemple est présenté ci-dessous.

python:Python3.5.0


>>> a = [1,2,3,4] #Objet de type liste
>>> b = [1,2,3,4]
>>> a == b
True
>>> a is b
False
>>> a = b
>>> a is b
True

déclaration d'impression

L'instruction d'impression est essentiellement écrite comme suit

python:Python2.7.9


>>> print("Hello world!!")
Hello world!!
>>> print "Hello world!!"
Hello world!!

Cette dernière méthode d'écriture ne peut pas être utilisée dans les séries 3.x. Dans l'ordre chronologique, le premier a été écrit plus tard, et la syntaxe, qui n'est différente des autres que dans la fonction d'impression, semble étrange, alors je l'ai préparée (probablement).

** @ shimizukawa a souligné dans les commentaires et ajouté ce qui suit. Je vous remercie! ** ** J'ai complètement oublié parce que je n'ai pas écrit comme `print (" Hello "," world !! ") ʻin 2 series, mais les instructions print entre parenthèses sont des séries 2.x et 3.x. C'est un peu différent selon le système.

python:Python3.5.0


>>> print("Hello", "world!!")
Hello world!!
>>>

python:Python2.7.9


>>> print("Hello", "world!!")
('Hello', 'world!!')
>>>

Dans le cas de 3 séries, c'est la même chose que print" Hello "," world !! " en 2 séries comme décrit ci-dessus. Cependant, il est affiché comme un taple dans le 2ème système. Donc, si vous souhaitez faire fonctionner le 2ème système de la même manière que le 3ème système, procédez comme suit.

python:Python2.7.9


>>> from __future__ import print_function
>>> print("Hello", "world!!")
Hello world!!
>>> 

Au fait, ce «future» est un module qui peut faire fonctionner les fonctions de 3 séries en 2 séries. En important unicode_literals pour le code de caractère, vous pouvez gérer la chaîne de caractères en Unicode comme 3 séries.

python:Python2.7.9


>>> from __future__ import unicode_literals
>>> "Ah"
u'\u3042'
>>> 

Jointure de type chaîne

C'est un peu un déraillement, mais vous pouvez également utiliser + lors de la combinaison de types de chaîne, mais comme il existe une notation de .format, je l'écrirai aussi

python:Python3.5.0


>>> hoge = "Hoge"
>>> fuga = "Fuga"
>>> print("hoge:"+hoge+", fuga:"+fuga)
hoge:Hoge, fuga:Fuga
>>> print("hoge:{}, fuga:{}".format(hoge, fuga))
hoge:Hoge, fuga:Fuga
>>> 

pour déclaration

Voici un exemple d'ajout d'un nombre de 1 à 9 au type de liste et d'impression de l'instruction for et des éléments de la liste.

python:Python3.5.0


>>> a  = []
>>> for i in range(1,10):
...     a.append(i)
... 
>>> a
[1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> for i in a:
...     print(i)
... 
1
2
3
4
5
6
7
8
9
>>> 

instruction if-else

Fondamentalement, cela ressemble à ce qui suit.

python:Python3.5.0


>>> a  = []
>>> for i in range(1,10):
...     if i % 2 == 0:
...         a.append(i)
...     else:
...         a.append(i*i)
... 
>>> a
[1, 2, 9, 4, 25, 6, 49, 8, 81]

À propos, vous pouvez également écrire comme suit en tant qu'opérateur ternaire

python:Python3.5.0


>>> "Yes" if 1 < 2 else "No"
'Yes'
>>> "Yes" if 1 > 2 else "No"
'No'

Gestion des exceptions

La gestion des exceptions de base est la suivante (série 3).

python:Python3.5.0


>>> try:
...     "A".hoge()
... except Exception as e:
...     print(e)
... finally:
...     print("Assurez-vous d'exécuter")
... 
'str' object has no attribute 'hoge'
Assurez-vous d'exécuter

Exception intercepte toutes les exceptions, alors écrivez une classe d'exception spécifique pour une utilisation réelle.

python:Python3.5.0


>>> try:
...     "A".hoge()
... except AttributeError as e:
...     print(e)
... finally:
...     print("Assurez-vous d'exécuter")
... 
'str' object has no attribute 'hoge'
Assurez-vous d'exécuter

Sinon qui apparaît à divers endroits

À propos, else peut être utilisé pour une instruction autre que if. Voici un exemple d'instructions for et de gestion des exceptions.

python:Python3.5.0


>>> for i in range(1,5):
...     print(i)
... else:
...     print("Dernier tour")
... 
1
2
3
4
Dernier tour
>>> for i in range(1,5):
...     print(i)
...     if i == 4:
...         break
... else:
...     print("Non exécuté lors de la pause")
... 
1
2
3
4
>>>

python:Python3.5.0


>>> try:
...     "A".lower()
... except AttributeError as e:
...     print(e)
... else:
...     print("Exécuter lorsque vous n'attrapez pas d'exception")
... finally:
...     print("Assurez-vous d'exécuter")
... 
'a'
Exécuter lorsque vous n'attrapez pas d'exception
Assurez-vous d'exécuter
>>>
>>> try:
...     "A".hoge()
... except AttributeError as e:
...     print(e)
... else:
...     print("Non exécuté lors de la capture d'une exception")
... finally:
...     print("Assurez-vous d'exécuter")
... 
'str' object has no attribute 'hoge'
Assurez-vous d'exécuter

fatigué

Je suis fatigué, alors je vais continuer après ②. .. ..

Cliquez ici pour obtenir des conseils② Cliquez ici pour obtenir des conseils ③

Recommended Posts

~ Conseils pour les débutants de Python donnés avec amour par Pythonista ① ~
~ Conseils pour les débutants de Python donnés avec amour par Pythonista ② ~
~ Conseils pour les débutants de Python présentés avec amour par Pythonista ③ ~
Conseils pour appeler Python à partir de C
INSÉRER dans MySQL avec Python [Pour les débutants]
Conseils pour gérer les binaires en Python
Conseils pour utiliser python + caffe avec TSUBAME
[Python] Lire des images avec OpenCV (pour les débutants)
Création WebApi avec Python (création CRUD) Pour les débutants
[Pour les débutants] Essayez le web scraping avec Python
Raisonnement causal et recherche causale par Python (pour les débutants)
Envelopper C avec Cython pour une utilisation à partir de Python
Manuel python pour les débutants
Envelopper C ++ avec Cython pour une utilisation à partir de Python
OpenCV pour les débutants en Python
[Introduction pour les débutants] Manipuler MySQL avec Python
Flux d'apprentissage pour les débutants en Python
[Astuces] Gérez Athena avec Python
Construction de l'environnement Python3 (pour les débutants)
Python #function 2 pour les super débutants
Grammaire de base Python pour les débutants
Pandas 100 coups pour les débutants en Python
Python #function 1 pour les super débutants
[Python + Selenium] Conseils pour le grattage
#List Python pour les super débutants
Avec skype, notifiez avec skype de python!
Conseils aux débutants en Python pour utiliser l'exemple Scikit-image pour eux-mêmes 4 Utiliser l'interface graphique
[Pour les débutants] Résumé de l'entrée standard en Python (avec explication)
[Pour les débutants] Script dans 10 lignes (4. Connexion de python à sqlite3)
Introduction à Python pour les utilisateurs de VBA - Appeler Python depuis Excel avec xlwings -
Conseils aux débutants en Python pour utiliser l'exemple Scikit-image par eux-mêmes
Obtenez des données de l'API d'analyse avec le client API Google pour python
Résoudre les problèmes d'AtCoder Boot camp pour les débutants (moyen 100) avec python
Appeler C depuis Python avec DragonFFI
Exercices Python pour les débutants # 2 [pour instruction / instruction while]
Utilisation de Rstan de Python avec PypeR
Installez Python à partir des sources avec Ansible
Conseils pour exécuter Go avec Docker
Python pour les super débutants Super débutants Python # dictionnaire type 1
Premiers pas avec Julia pour Pythonista
Python #index pour les super débutants, tranches
Exécutez Aprili depuis Python sur Orange
<Pour les débutants> bibliothèque python <Pour l'apprentissage automatique>
[TouchDesigner] Conseils pour la déclaration par python
Fonction Python #len pour les super débutants
Appelez python de nim avec Nimpy
Web scraping pour les débutants en Python (1)
Exécutez unittest en Python (pour les débutants)
Web scraping pour les débutants en Python (4) -1
Charger fbx depuis python avec cinema4d
Python #Hello World pour les super débutants
Python pour les super débutants Super débutants Python # dictionnaire type 2
Premiers pas avec Python pour les fonctions PHPer
[Pandas] J'ai essayé d'analyser les données de ventes avec Python [Pour les débutants]
Obtenir le code HTML de l'élément avec du sélénium Python
[Note] Obtenir des données de PostgreSQL avec Python
Grattage WEB avec Python (pour mémo personnel)