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 ʕº̫͡ºʔ **
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!!
>>>
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
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)
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.
La première pierre d'achoppement est le code du caractère.
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.
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'
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.
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 **
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) `. ** **
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
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.
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
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
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'
>>>
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
>>>
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
>>>
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'
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
À 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
Je suis fatigué, alors je vais continuer après ②. .. ..
Cliquez ici pour obtenir des conseils② Cliquez ici pour obtenir des conseils ③
Recommended Posts