~ Tipps für Python-Anfänger mit Liebe von Pythonista ① ~

Motivation

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 **

Interaktives Format

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!!
>>> 

Einzug

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

Die Dunkelheit von 2.x und 3.x.

Die Dunkelheit der Abwärtskompatibilität

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)

Dann welches sollte verwendet werden

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.

Zeichencode

Der erste Stolperstein ist der Zeichencode.

Dateikodierung

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.

2. Über das x-System

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'

3. Über das x-System

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.

Operator

Das Folgende ist eine kurze Zusammenfassung der Operatoren und Operationen, die verwendet werden können. ** Überarbeitete Version als Antwort auf die Angabe von @ nobolis **

Algebra-Operator

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)". ** ** **

Bitoperator

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
Boolescher Operator

python:Python3.5.0


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

Das Folgende wurde mit Kommentaren von @shiracamus hinzugefügt.

4.1. Wahrheitsbeurteilung

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.

4.2. Boolesche Operationen

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
Vergleichsoperator

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

Anweisung drucken

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'
>>> 

String Typ Join

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
>>> 

zur Aussage

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
>>> 

if-else-Anweisung

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'

Ausnahmebehandlung

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

Sonst erscheint das an verschiedenen Stellen

Ü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

müde

Ich bin müde, also mache ich nach ② weiter. .. ..

Klicken Sie hier für Tipps② Klicken Sie hier für Tipps ③

Recommended Posts

~ Tipps für Python-Anfänger mit Liebe von Pythonista ① ~
~ Tipps für Python-Anfänger mit Liebe von Pythonista ② ~
~ Tipps für Python-Anfänger mit Liebe von Pythonista ③ ~
Tipps zum Aufrufen von Python von C.
INSERT in MySQL mit Python [Für Anfänger]
Tipps zum Umgang mit Binärdateien in Python
Tipps zur Verwendung von Python + Caffe mit TSUBAME
[Python] Bilder mit OpenCV lesen (für Anfänger)
WebApi-Erstellung mit Python (CRUD-Erstellung) Für Anfänger
[Für Anfänger] Versuchen Sie Web Scraping mit Python
Kausales Denken und kausale Suche von Python (für Anfänger)
Wickeln Sie C mit Cython für Python ein
Python Lehrbuch für Anfänger
Wrap C ++ mit Cython zur Verwendung von Python
OpenCV für Python-Anfänger
[Einführung für Anfänger] Umgang mit MySQL mit Python
Lernablauf für Python-Anfänger
[Tipps] Behandle Athena mit Python
Python3-Umgebungskonstruktion (für Anfänger)
Python #Funktion 2 für Super-Anfänger
Grundlegende Python-Grammatik für Anfänger
100 Pandas klopfen für Python-Anfänger
Python #Funktion 1 für Super-Anfänger
[Python + Selen] Tipps zum Scraping
Python #Liste für Super-Anfänger
Mit Skype benachrichtigen Sie mit Skype von Python!
Tipps für Python-Anfänger, um das Scikit-Image-Beispiel für sich selbst zu verwenden 4 Verwenden Sie die GUI
[Für Anfänger] Zusammenfassung der Standardeingabe in Python (mit Erklärung)
[Für Anfänger] Skript innerhalb von 10 Zeilen (4. Verbindung von Python zu sqlite3)
Einführung in Python für VBA-Benutzer - Aufrufen von Python aus Excel mit xlwings-
Tipps für Python-Anfänger, um das Scikit-Image-Beispiel für sich selbst zu verwenden
Abrufen von Daten aus der Analyse-API mit Google API Client für Python
Lösen Sie AtCoder-Probleme Bootcamp für Anfänger (Medium 100) mit Python
Rufen Sie C von Python mit DragonFFI auf
Python-Übungen für Anfänger # 2 [für Anweisung / while-Anweisung]
Verwenden von Rstan aus Python mit PypeR
Installieren Sie Python von der Quelle mit Ansible
Tipps zum Ausführen Gehen Sie mit Docker
Python für Super-Anfänger Super-Anfänger Python # Wörterbuch Typ 1
Erste Schritte mit Julia für Pythonista
Python #index für Super-Anfänger, Slices
Führen Sie Aprili von Python auf Orange aus
<Für Anfänger> Python-Bibliothek <Für maschinelles Lernen>
[TouchDesigner] Tipps für die Anweisung von Python
Python #len Funktion für Super-Anfänger
Rufen Sie Python von Nim mit Nimpy auf
Web Scraping für Anfänger in Python (1)
Führen Sie unittest in Python aus (für Anfänger)
Web Scraping für Anfänger in Python (4) -1
Laden Sie fbx aus Python mitinema4d
Python #Hello World für Super-Anfänger
Python für Super-Anfänger Super-Anfänger Python # Wörterbuch Typ 2
Erste Schritte mit Python für PHPer-Funktionen
[Pandas] Ich habe versucht, Verkaufsdaten mit Python zu analysieren. [Für Anfänger]
Holen Sie sich HTML von Element mit Python-Selen
[Hinweis] Mit Python Daten von PostgreSQL abrufen
WEB-Scraping mit Python (für persönliche Notizen)