Python Grundlagen: Unterschied zwischen den Versionen

Aus Hackerspace Ffm
Wechseln zu: Navigation, Suche
(Wichtigste Unterschiede zu C)
(Spracherkennung)
 
(32 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 12: Zeile 12:
 
=== Debian apt basierte Linux Systeme (...buntu etc) ===
 
=== Debian apt basierte Linux Systeme (...buntu etc) ===
 
Auch hier ist python3 und pip3 oft schon installiert. Ansonsten hilft hier ein <code>sudo apt install python3-pip</code>
 
Auch hier ist python3 und pip3 oft schon installiert. Ansonsten hilft hier ein <code>sudo apt install python3-pip</code>
 +
 +
=== Wo befindet sich dann alles? ===
 +
Der Pfad zu Python<br>
 +
<pre>
 +
import sys
 +
sys.prefix
 +
>>> 'C:\\Users\\strange\\AppData\\Local\\Programs\\Python\\Python37'
 +
</pre>
 +
Der Pfad zu den 3th party libs<br>
 +
<pre>
 +
import site
 +
site.getsitepackages()
 +
>>> 'C:\\Users\\strange\\AppData\\Local\\Programs\\Python\\Python37', 'C:\\Users\\strange\\AppData\\Local\\Programs\\Python\\Python37\\lib\\site-packages'
 +
</pre>
  
 
== Python Interaktive Shell ==
 
== Python Interaktive Shell ==
* Aufruf mit <code>python</code> oder <code>python3</code> für  
+
* Aufruf mit <code>python</code> oder <code>python3</code> für einfache Konsole, besser ist <code>idle3</code>
* Verlassen mit Ctrl+D (Mac, Linux) bzw. Ctrl+Z (Win) oder exit()
+
* Verlassen mit Ctrl+D (Mac, Linux) bzw. Ctrl+Z (Win) oder exit() oder quit()
 
* Schleifen sind möglich: <code>for i in range(10):</code>
 
* Schleifen sind möglich: <code>for i in range(10):</code>
 
** der Prompt ändert sich zu <code>....</code>, es muss nun eingerückt werden
 
** der Prompt ändert sich zu <code>....</code>, es muss nun eingerückt werden
 
** eine leere Zeile beendet die Eingabge der Schleifenbefehle und führt sie aus
 
** eine leere Zeile beendet die Eingabge der Schleifenbefehle und führt sie aus
* auch gut um auszuprobieren, ob libs installiert sind: <code>import numpy</code>
+
* auch gut um auszuprobieren, ob libs installiert sind: <code>import numpy</code> oder in der commandozeile <code>pip freeze</code> eingeben um die Liste der installierten Pakete zu sehen.
 
* History mit Alt+n/Alt+p (Mac: Ctrl+p/Ctrl+n)
 
* History mit Alt+n/Alt+p (Mac: Ctrl+p/Ctrl+n)
 +
 +
== Python IDEs ==
 +
[https://wiki.python.org/moin/IntegratedDevelopmentEnvironments Hier] gibt es eine Liste von Python-IDE's.
 +
 +
Empfohlen wird für Mac/Win/x86-Linux: [https://www.jetbrains.com/pycharm/ PyCharm Community Edition] (leider zu schwer für Raspberry)
  
 
= Python Cheat-Sheet für Wursthakenprogrammierer =
 
= Python Cheat-Sheet für Wursthakenprogrammierer =
Zeile 27: Zeile 46:
 
* Strukturierung mit Einrückungen (Space statt Tabs bevorzugt) statt Wursthaken {}, meist endet die Zeile dann mit einem :
 
* Strukturierung mit Einrückungen (Space statt Tabs bevorzugt) statt Wursthaken {}, meist endet die Zeile dann mit einem :
 
* Bei Python3 erkennt man Funktionen und Methoden an (), z.B. <code>print("Hello World.")</code>
 
* Bei Python3 erkennt man Funktionen und Methoden an (), z.B. <code>print("Hello World.")</code>
 +
* Print:
 +
** Auszugebenes Zeug muss zwischen die Klammern <code>print(a)</code>
 +
** Texte in "-Zeichen <code>print("Hallo ")</code>
 +
** Kombinationen aus Variablen und Text:
 +
*** Einfachste Variante: Sachen mit Kommas trennen <code>print("Wert a ist",a,",b ist",b)</code>
 +
*** Mit Platzhalter unformatiert: <code>print("Wert a ist {}, b ist {}".format(a,b))</code>
 +
*** Aneinandergenagelt: <code>print("Wert a ist "+str(a)+", b ist "+str(b))</code>
 +
*** printf-like (veraltet): <code>print("Wert a ist %d, b ist %d" % (a,b))</code>
 
* For-Schleife gibt's nur als For-Each - hier hilft range():  
 
* For-Schleife gibt's nur als For-Each - hier hilft range():  
 
** C: <code>for(int i=0;i<10;i++) {}</code>
 
** C: <code>for(int i=0;i<10;i++) {}</code>
 
** Python: <code>for i in range(10): # geht von 0...9</code>
 
** Python: <code>for i in range(10): # geht von 0...9</code>
** Durch Listen iterieren: <pre>
+
** Durch Listen iterieren:  
list1=[2,3,4]
+
<pre>list1=[2,3,4]
  
 
# geht durch alle Elemente, gibt nur die Elemente zurück
 
# geht durch alle Elemente, gibt nur die Elemente zurück
Zeile 43: Zeile 70:
 
* ? Operator von C: aus <code>y?x:z</code> wird <code>x if y else z</code>
 
* ? Operator von C: aus <code>y?x:z</code> wird <code>x if y else z</code>
 
* switch: gibts nicht in Python, kann man aber irgendwie mit dictionaries machen
 
* switch: gibts nicht in Python, kann man aber irgendwie mit dictionaries machen
 +
* Mehrzeilige Kommentare werden mit 3 Hochkommas definiert <pre>''' so werden mehrzeilige Kommentare geschrieben, dieser ist aber nur einzeilig '''</pre>
 +
* Boolsche Operatoren sind wie folgt in Python:
 +
** C: <code>&&</code> -> Python: <code>and</code>
 +
** C: <code>||</code> -> Python: <code>or</code>
 +
** Aber: Binäre Operatoren <code>&</code> bzw. <code>|</code> funktionieren wie in C
 +
* Sehr nützlich aber ungewohnt auf den ersten Blick: Funktionen können mehrere Werte zurückgeben - die werden dann mit Komma getrennt wieder eingesammelt:
 +
<pre>
 +
# so einfach macht man eine Funktion mit zwei Rückgabewerten...
 +
def ret2(a,b):
 +
  a += 1
 +
  b += 2
 +
  return a, b
 +
 +
# ...und so einfach nutzt man sie
 +
c, d = ret2(10, 20)
 +
print(c, d)
 +
</pre>
 +
 +
= Raspberry =
 +
 +
Um ein ausführbares Skript zu erzuegen muss in der ersten Zeile das Shebang stehen.<br>
 +
<code>#!/usr/bin/python3</code><br>
 +
Um an den Pfad der Pythoninstallation zu kommen kann wahlweise python oder python3 mit which aufgerufen werden.<br>
 +
<code>which python3</code>
 +
 +
Danach noch die Datei ausführbar machen.<br>
 +
<code>chmod +x filename.py</code>
 +
 +
Und zum Schluss ausrühren.<br>
 +
<code>./filename.py</code>
 +
 +
= Von Python2 nach Python3 =
 +
Mit dem folgenden Befehl kann man python2-Skript automatisch nach python3 umwandeln: <code>2to3 -w DATEINAME.py</code>.
 +
 +
Wenn man dann noch in die erste Zeile des Python3-Skriptes folgendes einfügt: <code>from __future__ import print_function</code> läuft das Skript evtl unter beiden python Versionen, da man damit unter Python2 auch die Python3-Print-Syntax nutzen kann.
  
 
= Python Bibliotheken =
 
= Python Bibliotheken =
 +
 +
{|
 +
|  style="width:160px;" | [http://www.numpy.org/ NumPy]
 +
| Bibliothek für eine einfache Handhabung von Vektoren, Matrizen oder generell großen mehrdimensionalen Arrays und Numerische Mathematik.
 +
|-
 +
| [https://www.eclipse.org/paho/ paho-mqtt]
 +
| MQTT-Client um mit unserem [[MQTT|Mosquitto]] ([[ServiceIoTServer|MQTT-Server]]) zu kommunizieren
 +
|-
 +
| [https://pillow.readthedocs.io/en/stable/ Pillow]
 +
| Liest, schreibt und bearbeitet viele Grafikdateien. Hinweis: Pillow installieren, bei der Nutzung aber PIL schreiben: <code>from PIL import Image</code> schreiben. Die Lib ersetzt alte PIL und Image Libs.
 +
|-
 +
| [https://matplotlib.org/ matplotlib]
 +
| Plotten von Graphen in [https://matplotlib.org/gallery/index.html diversen] Geschmacksrichtungen.
 +
|}
 +
 +
<br>
 +
Nicht alle Bibliotheken lassen sich unter Windows mit pip istallieren. Manche wollen kompiliert werden und dann wirds kompliziert wie z.B. PyAudio.<br>
 +
Es gibt aber schon vorkompilierte Binaries auf dieser Seite zum downloaden und manuellen installieren: https://www.lfd.uci.edu/~gohlke/pythonlibs/
 +
 +
= Spracherkennung =
 +
 +
<pre>pip install SpeechRecognition</pre>
 +
 +
Für das Mikrophone braucht man PyAudio
 +
<pre>pip install PyAudio</pre>
 +
Under windows muss dass gebaut werden, um das zu umgehen das Wheel manuell herunter laden.
 +
https://www.lfd.uci.edu/~gohlke/pythonlibs/<br>
 +
<pre>pip install PyAudio-0.2.11-cp37-cp37m-win_amd64.whl</pre>
 +
 +
<pre>
 +
import speech_recognition as sr
 +
 +
r = sr.Recognizer()
 +
 +
with sr.Microphone() as mp:
 +
print('say')
 +
audio = r.listen(mp)
 +
 +
try:
 +
#print(r.recognize_sphinx(audio))
 +
print(r.recognize_google(audio, language="de-DE"))
 +
 +
except:
 +
pass
 +
</pre>

Aktuelle Version vom 18. April 2019, 19:49 Uhr

Software für Pythonentwicklung

Python3 installieren

Windows

MacOS

Python2.7 ist bei halbwegs aktuellen Systemen schon da, aber nicht python3 und auch kein pip. Homebrew scheint hier ein gutes Mittel python3 und gleich pip3 in einem Abwasch zu installieren. Dazu erst Homebrew installieren, dann python3 via brew install python3.

Raspbian

Unter einem aktuellen Raspbian (Stretch) ist python3 und pip3 normalerweise bereits installiert. Ansonsten hilft für pip3 sudo apt-get install python3-pip

Debian apt basierte Linux Systeme (...buntu etc)

Auch hier ist python3 und pip3 oft schon installiert. Ansonsten hilft hier ein sudo apt install python3-pip

Wo befindet sich dann alles?

Der Pfad zu Python

import sys
sys.prefix
>>> 'C:\\Users\\strange\\AppData\\Local\\Programs\\Python\\Python37'

Der Pfad zu den 3th party libs

import site
site.getsitepackages()
>>> 'C:\\Users\\strange\\AppData\\Local\\Programs\\Python\\Python37', 'C:\\Users\\strange\\AppData\\Local\\Programs\\Python\\Python37\\lib\\site-packages'

Python Interaktive Shell

  • Aufruf mit python oder python3 für einfache Konsole, besser ist idle3
  • Verlassen mit Ctrl+D (Mac, Linux) bzw. Ctrl+Z (Win) oder exit() oder quit()
  • Schleifen sind möglich: for i in range(10):
    • der Prompt ändert sich zu ...., es muss nun eingerückt werden
    • eine leere Zeile beendet die Eingabge der Schleifenbefehle und führt sie aus
  • auch gut um auszuprobieren, ob libs installiert sind: import numpy oder in der commandozeile pip freeze eingeben um die Liste der installierten Pakete zu sehen.
  • History mit Alt+n/Alt+p (Mac: Ctrl+p/Ctrl+n)

Python IDEs

Hier gibt es eine Liste von Python-IDE's.

Empfohlen wird für Mac/Win/x86-Linux: PyCharm Community Edition (leider zu schwer für Raspberry)

Python Cheat-Sheet für Wursthakenprogrammierer

Wichtigste Unterschiede zu C

  • Strukturierung mit Einrückungen (Space statt Tabs bevorzugt) statt Wursthaken {}, meist endet die Zeile dann mit einem :
  • Bei Python3 erkennt man Funktionen und Methoden an (), z.B. print("Hello World.")
  • Print:
    • Auszugebenes Zeug muss zwischen die Klammern print(a)
    • Texte in "-Zeichen print("Hallo ")
    • Kombinationen aus Variablen und Text:
      • Einfachste Variante: Sachen mit Kommas trennen print("Wert a ist",a,",b ist",b)
      • Mit Platzhalter unformatiert: print("Wert a ist {}, b ist {}".format(a,b))
      • Aneinandergenagelt: print("Wert a ist "+str(a)+", b ist "+str(b))
      • printf-like (veraltet): print("Wert a ist %d, b ist %d" % (a,b))
  • For-Schleife gibt's nur als For-Each - hier hilft range():
    • C: for(int i=0;i<10;i++) {}
    • Python: for i in range(10): # geht von 0...9
    • Durch Listen iterieren:
list1=[2,3,4]

# geht durch alle Elemente, gibt nur die Elemente zurück
for t in list1:
    print(t)

# gibt Elemente und Indexe zurück
for i,elm in enumerate(list1):
    print("The {} item is {}".format(i,elm))
  •  ? Operator von C: aus y?x:z wird x if y else z
  • switch: gibts nicht in Python, kann man aber irgendwie mit dictionaries machen
  • Mehrzeilige Kommentare werden mit 3 Hochkommas definiert
    ''' so werden mehrzeilige Kommentare geschrieben, dieser ist aber nur einzeilig '''
  • Boolsche Operatoren sind wie folgt in Python:
    • C: && -> Python: and
    • C: || -> Python: or
    • Aber: Binäre Operatoren & bzw. | funktionieren wie in C
  • Sehr nützlich aber ungewohnt auf den ersten Blick: Funktionen können mehrere Werte zurückgeben - die werden dann mit Komma getrennt wieder eingesammelt:
# so einfach macht man eine Funktion mit zwei Rückgabewerten...
def ret2(a,b):
  a += 1
  b += 2
  return a, b

# ...und so einfach nutzt man sie
c, d = ret2(10, 20)
print(c, d)

Raspberry

Um ein ausführbares Skript zu erzuegen muss in der ersten Zeile das Shebang stehen.
#!/usr/bin/python3
Um an den Pfad der Pythoninstallation zu kommen kann wahlweise python oder python3 mit which aufgerufen werden.
which python3

Danach noch die Datei ausführbar machen.
chmod +x filename.py

Und zum Schluss ausrühren.
./filename.py

Von Python2 nach Python3

Mit dem folgenden Befehl kann man python2-Skript automatisch nach python3 umwandeln: 2to3 -w DATEINAME.py.

Wenn man dann noch in die erste Zeile des Python3-Skriptes folgendes einfügt: from __future__ import print_function läuft das Skript evtl unter beiden python Versionen, da man damit unter Python2 auch die Python3-Print-Syntax nutzen kann.

Python Bibliotheken

NumPy Bibliothek für eine einfache Handhabung von Vektoren, Matrizen oder generell großen mehrdimensionalen Arrays und Numerische Mathematik.
paho-mqtt MQTT-Client um mit unserem Mosquitto (MQTT-Server) zu kommunizieren
Pillow Liest, schreibt und bearbeitet viele Grafikdateien. Hinweis: Pillow installieren, bei der Nutzung aber PIL schreiben: from PIL import Image schreiben. Die Lib ersetzt alte PIL und Image Libs.
matplotlib Plotten von Graphen in diversen Geschmacksrichtungen.


Nicht alle Bibliotheken lassen sich unter Windows mit pip istallieren. Manche wollen kompiliert werden und dann wirds kompliziert wie z.B. PyAudio.
Es gibt aber schon vorkompilierte Binaries auf dieser Seite zum downloaden und manuellen installieren: https://www.lfd.uci.edu/~gohlke/pythonlibs/

Spracherkennung

pip install SpeechRecognition

Für das Mikrophone braucht man PyAudio

pip install PyAudio

Under windows muss dass gebaut werden, um das zu umgehen das Wheel manuell herunter laden. https://www.lfd.uci.edu/~gohlke/pythonlibs/

pip install PyAudio-0.2.11-cp37-cp37m-win_amd64.whl
import speech_recognition as sr

r = sr.Recognizer()

with sr.Microphone() as mp:
	print('say')
	audio = r.listen(mp)
	
try:
	#print(r.recognize_sphinx(audio))
	print(r.recognize_google(audio, language="de-DE"))
	
except:
	pass