Mein Name ist @hanaken_Nirvana und ich bin der stellvertretende Direktor bei Liaro und der Fenstertürschließfach bei #HiveShibuya.
Das Unternehmen entwickelt eine Video-Empfehlungs-App, aber ich schreibe sie im Grunde genommen in Python (einschließlich Deep Learning * und NLP) von der API zur Empfehlungs-Engine (obwohl es an einigen Stellen Scala ist ...). Im Startup-Bereich gibt es viele RoRs und ich wollte, dass die Python-Population zunimmt, aber ich dachte: "Künstliche Intelligenz! Wegen des Booms werde ich oft gebeten, Python zu unterrichten, deshalb schreibe ich für diese Zeit eine Notiz, die sich auf Python-ähnliche Grammatik für Python-Anfänger konzentriert.
** Nun, ich bin kein Python-Mitarbeiter, ich bin nur ein Python-Benutzer. Wenn Sie also einen Fehler machen, möchte ich Sie bitten, auf ʕº̫͡ºʔ hinzuweisen **
Normalerweise müssen Sie Code in eine Datei schreiben und ausführen, aber in Python können Sie ihn als Interpreter verwenden, indem Sie "Python" in die Konsole schreiben.
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 ist streng eingerückt. Ein Fehler tritt auf, wenn der Einzug falsch ausgerichtet ist. Der Unterschied zwischen Tabulatoren und Leerzeichen ist ebenfalls nutzlos (2 Serien interpretieren 1 Tabulator = 8 Leerzeichen, 3 Serien jedoch nicht). Es wird empfohlen, mit 4 Leerzeichen einzurücken. Das Folgende ist ein Beispiel für das Hinzufügen einer geraden Zahl von 0 bis 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
Erstens ist Python heutzutage grob in 2.x-Serien und 3.x-Serien unterteilt. Abgesehen davon ist die 3.x-Serie nicht immer die neueste und wird gleichzeitig entwickelt. Der Grund, warum es zwei Zeilen gibt, ist, dass Python eine Kultur hat, die Abwärtskompatibilität schätzt. Selbst wenn die Version aktualisiert wird, gehen die verwendeten Funktionen nicht verloren. "(Nach dem Upgrade) ist es kaputt gegangen, obwohl ich nichts getan habe." Nichts dergleichen passiert. Es ist gut für die psychische Gesundheit für diejenigen, die sich nicht weiterentwickeln. Die Spezifikationen werden jedoch aufgrund der Abwärtskompatibilität (Zeichencode, Klasse, Druckanweisung, Ausnahmebehandlung usw.) aufgebläht und kompliziert. Ruby und dergleichen werfen alte Spezifikationen weg, aber unter dem Einfluss davon werfen wir alte schlechte Spezifikationen sofort weg! Die Entwicklung der 3.x-Serie begann mit diesem Gefühl. Es funktioniert also mit 2.x, aber nicht mit 3.x! Was oft (und umgekehrt)
Nun, ich werfe die schlechten alten Spezifikationen weg. Wenn Sie sie von nun an verwenden möchten, empfehle ich die 3.x-Serie. Es gibt jedoch einige Bibliotheken, die nur mit 2.x verwendet werden können, und es gibt Zeiten, in denen Sie 2.x verwenden müssen.
Der erste Stolperstein ist der Zeichencode.
Es ist schwierig, ob dies in das Kapitel mit dem Zeichencode aufgenommen werden soll. Schreiben Sie jedoch am Anfang der .py-Datei Folgendes, um die Codierung anzugeben.
Die Dateicodierung ist utf-Im Falle von 8
# coding:utf-8
Und wenn Sie es nebenbei schreiben, können Sie die Zeichenfolge wie folgt codieren / decodieren *.
python:Python3.5.0
>>> hoge = "Ah"
>>> hoge.encode("utf-8")
b'\xe3\x81\x82'
>>> hoge = b'\xe3\x81\x82'
>>> hoge.decode("utf-8")
'Ah'
Das Obige ist die 3.x-Serie, aber die Art und Weise, wie Codierung / Decodierung geschrieben wird, ist für die 2.x-Serie dieselbe.
Aus der Sicht von 2.x gibt es Str-Typ und Unicode-Typ, selbst in dem Typ, der Zeichen verarbeitet. Wenn Sie es in einfache oder doppelte Anführungszeichen setzen (entweder "Python" oder "Python" ist in Python in Ordnung), wird es normalerweise zum str-Typ, und wenn Sie das Präfix u hinzufügen, wird es zum Unicode-Typ.
Der Unterschied zwischen den beiden ist zunächst die Ausgabe unten.
python:Python2.7.9
>>> "Ah" #str
'\xe3\x81\x82'
>>> u"Ah" #unicode
u'\u3042'
Der str-Typ ist eine Byte-Zeichenfolge, die von jedem Zeichencode (utf8, Shift_JIS usw.) codiert wird, und der Unicode-Typ ist die Codeposition. * * Dies war in frühem Python nur str-Typ und konnte nur ASCII-Zeichen (weiße Augen) verarbeiten.
Aus diesem Grund habe ich einen anderen Typ namens Unicode-Typ erstellt, damit er Mehrbyte-Zeichen verarbeiten kann (unter Berücksichtigung der Abwärtskompatibilität). Dies ist eine typische schlechte alte Spezifikation. .. ..
Codierung / Decodierung sieht übrigens so aus.
python:Python3.5.0
>>> hoge = "Ah"
>>> hoge.encode("utf-8")
b'\xe3\x81\x82'
>>> hoge = b'\xe3\x81\x82'
>>> hoge.decode("utf-8")
'Ah'
Lassen Sie uns als nächstes über 3.x sprechen. In der 3.x-Serie ist der str-Typ ohne Präfix der Unicode-Typ in 2.x. Wenn Sie es als Byte-Zeichenfolge behandeln möchten, fügen Sie dem Präfix b hinzu. Es sieht wie folgt aus.
python:Python3.5.0
>>> "Ah" #str
'Ah'
>>> "Ah".encode("utf-8") #byte
b'\xe3\x81\x82'
Wenn Sie darüber nachdenken, können Sie sehen, dass die 3.x-Serie einfacher zu handhaben ist.
Das Folgende ist eine kurze Zusammenfassung der Operatoren und Operationen, die verwendet werden können. ** Überarbeitete Version als Antwort auf die Angabe von @ nobolis **
python:Python2.7.9
>>> 1 + 1 #Hinzufügen
2
>>> 1 - 1 #Subtrahieren
0
>>> 1 * 2 #Multiplizieren
2
>>> 1 / 2 #Teilung
0
>>> 1 / 2.0 #Teilung
0.5
>>> 3 // 2.0 #Teilung(Kürzen)
1.0
>>> 5 % 4 #Rest
1
>>> 2 ** 2 #Leistung
4
Es gibt zwei Punkte zu beachten. Erstens ist das Ergebnis nur bei 2 Systemen int-Typ, indem zwischen int-Typen aufgeteilt wird. Wenn Sie also einen Dezimalpunkt benötigen, müssen Sie mindestens einen durch float teilen. Und das andere ist, dass // kein Quotient ist, sondern eine Kürzungsteilung ** (obwohl es davon abhängt, wie Sie den Rest mathematisch definieren). Der Klarheit halber ist das Verhalten, wenn das Berechnungsergebnis ein negativer Wert ist, unten gezeigt.
python:Python3.5.0
>>> -3 // 2.0
-2.0
>>>
In diesem Fall ist es "-3 / 2,0 = -1,5", aber wenn es abgeschnitten ist, wird es auf -2,0 gerundet, was weniger als -1,5 anstelle von ** -1,0 ist. ** ** ** Dies ist mathematisch begründet, wobei q der Quotient und r der Rest ist. "a / b = q Rest r" Kann ausgedrückt werden als. Mit anderen Worten
b * q + r = a (a,b>0)
b > r >= 0
ist. Wenn Sie versuchen, dies auf einen negativen Wert zu erweitern, müssen Sie ihn auf minus unendlich runden, anstatt ihn auf null zu runden. ** Wenn Sie auf Null runden möchten, schreiben Sie in "int (a / b)". ** ** **
python:Python3.5.0
>>> ~10 #Bitinversion
-11
>>> 10 & 14 #Logisches UND
10
>>> 10 | 14 #Logische Summe
14
>>> 10 ^ 14 #Exklusive logische Summe
4
>>> 10 << 1 #Linksschaltbetrieb
20
>>> 10 >> 1 #Rechtsschaltbetrieb
5
python:Python3.5.0
>>> True and False
False
>>> True or False
True
>>> not True
False
Das Folgende wurde mit Kommentaren von @shiracamus hinzugefügt.
Die folgenden Werte gelten als falsch: · Keiner ・ Falsch -Zero in numerischer Schrift. Zum Beispiel 0, 0.0, 0j. -Eleere Sequenz. Zum Beispiel,'', (), []. -Eleere Zuordnung. Zum Beispiel {}. · Wenn diese Klasse in einer Instanz einer benutzerdefinierten Klasse bool () - oder len () -Methoden definiert, geben diese Methoden eine Ganzzahl 0 oder einen Bool-Wert False zurück. Alle anderen Werte gelten als wahr - so viele Arten von Objekten sind immer wahr.
Boolesche Operation | Wenn x ein Wert ist, der als wahr bestimmt wird | Wenn x ein Wert ist, der als falsch bestimmt wird |
---|---|---|
x and y | Wert von y | Wert von x |
x or y | Wert von x | Wert von 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
Der Unterschied zwischen "==" und "ist" besteht darin, dass "==" True zurückgibt, "is" jedoch False zurückgibt, wenn die Werte gleich sind. Mit anderen Worten, die Spezifikation lautet, dass "==" den gleichen Wert haben sollte und "is" der gleiche sein muss (gleiche Instanz). Ein Beispiel ist unten gezeigt.
python:Python3.5.0
>>> a = [1,2,3,4] #Listentyp Objekt
>>> b = [1,2,3,4]
>>> a == b
True
>>> a is b
False
>>> a = b
>>> a is b
True
Die print-Anweisung ist grundsätzlich wie folgt geschrieben
python:Python2.7.9
>>> print("Hello world!!")
Hello world!!
>>> print "Hello world!!"
Hello world!!
Die letztere Schreibmethode kann in der 3.x-Serie nicht verwendet werden. In chronologischer Reihenfolge wurde die erstere später geschrieben, und die Syntax, die sich nur in der Druckfunktion von den anderen unterscheidet, scheint seltsam, also habe ich sie (wahrscheinlich) vorbereitet.
** @ shimizukawa wies in den Kommentaren darauf hin und fügte Folgendes hinzu. Vielen Dank! ** ** ** Ich habe es komplett vergessen, weil ich nicht wie "print (" Hallo "," Welt !! ")" in 2 Serien geschrieben habe, aber die print-Anweisungen in Klammern sind 2.x-Serien und 3.x. Es ist je nach System etwas anders.
python:Python3.5.0
>>> print("Hello", "world!!")
Hello world!!
>>>
python:Python2.7.9
>>> print("Hello", "world!!")
('Hello', 'world!!')
>>>
Im Fall von 3 Serien ist es dasselbe wie "Hallo", "Welt !!" in 2 Serien wie oben beschrieben drucken. Im 2. System wird es jedoch als Taple angezeigt. Wenn Sie also das 2. System auf die gleiche Weise wie das 3. System betreiben möchten, gehen Sie wie folgt vor.
python:Python2.7.9
>>> from __future__ import print_function
>>> print("Hello", "world!!")
Hello world!!
>>>
Übrigens ist dieses "future" ein Modul, das die Funktionen von 3 Serien in 2 Serien bedienen kann. Durch Importieren von unicode_literals für den Zeichencode können Sie die Zeichenfolge in Unicode wie 3 Serien behandeln.
python:Python2.7.9
>>> from __future__ import unicode_literals
>>> "Ah"
u'\u3042'
>>>
Es ist eine Art Entgleisung, aber Sie können auch "+" verwenden, wenn Sie Zeichenfolgentypen kombinieren, aber da es eine Notation von ".format" gibt, werde ich das auch schreiben.
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
>>>
Dies ist ein Beispiel für das Hinzufügen einer Zahl von 1 bis 9 zum Listentyp und das Drucken der for-Anweisung und der Elemente der 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
>>>
Grundsätzlich sieht es wie folgt aus.
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]
Übrigens können Sie als ternärer Operator auch wie folgt schreiben
python:Python3.5.0
>>> "Yes" if 1 < 2 else "No"
'Yes'
>>> "Yes" if 1 > 2 else "No"
'No'
Die grundlegende Ausnahmebehandlung lautet wie folgt (3er-Serie).
python:Python3.5.0
>>> try:
... "A".hoge()
... except Exception as e:
... print(e)
... finally:
... print("Stellen Sie sicher, dass Sie ausführen")
...
'str' object has no attribute 'hoge'
Stellen Sie sicher, dass Sie ausführen
Exception fängt alle Ausnahmen ab, schreiben Sie also eine bestimmte Ausnahmeklasse für die tatsächliche Verwendung.
python:Python3.5.0
>>> try:
... "A".hoge()
... except AttributeError as e:
... print(e)
... finally:
... print("Stellen Sie sicher, dass Sie ausführen")
...
'str' object has no attribute 'hoge'
Stellen Sie sicher, dass Sie ausführen
Übrigens kann else für eine andere als if-Anweisung verwendet werden. Das Folgende ist ein Beispiel für die Behandlung von Anweisungen und Ausnahmen.
python:Python3.5.0
>>> for i in range(1,5):
... print(i)
... else:
... print("Letzter Lauf")
...
1
2
3
4
Letzter Lauf
>>> for i in range(1,5):
... print(i)
... if i == 4:
... break
... else:
... print("Wird bei Pause nicht ausgeführt")
...
1
2
3
4
>>>
python:Python3.5.0
>>> try:
... "A".lower()
... except AttributeError as e:
... print(e)
... else:
... print("Ausführen, wenn keine Ausnahme abgefangen wird")
... finally:
... print("Stellen Sie sicher, dass Sie ausführen")
...
'a'
Ausführen, wenn keine Ausnahme abgefangen wird
Stellen Sie sicher, dass Sie ausführen
>>>
>>> try:
... "A".hoge()
... except AttributeError as e:
... print(e)
... else:
... print("Wird beim Abfangen einer Ausnahme nicht ausgeführt")
... finally:
... print("Stellen Sie sicher, dass Sie ausführen")
...
'str' object has no attribute 'hoge'
Stellen Sie sicher, dass Sie ausführen
Ich bin müde, also mache ich nach ② weiter. .. ..
Klicken Sie hier für Tipps② Klicken Sie hier für Tipps ③
Recommended Posts