Python ist als Pro­gram­mier­spra­che sehr beliebt, sodass im Be­wer­bungs­ge­spräch auf eine Ent­wick­ler­stel­le mit de­tail­lier­ten Fragen zu Funk­tio­nen und Be­son­der­hei­ten zu rechnen ist. Wir be­ant­wor­ten zehn häufig gestellte Fragen.

Frage 1: Was sind die Be­son­der­hei­ten von Python und welche Vorteile bietet die Pro­gram­mier­spra­che?

Python ist eine sehr viel­sei­ti­ge Pro­gram­mier­spra­che, mit der sich An­wen­dun­gen im Bereich der Web­ent­wick­lung, Da­ten­ana­ly­se und auch künst­li­chen In­tel­li­genz erstellen lassen. Die Sprache punktet mit großer Be­nut­zer­freund­lich­keit, Viel­sei­tig­keit und guter Per­for­mance – nur drei Gründe, warum viele angehende Pro­gram­mie­rin­nen und Pro­gram­mie­rer Python wählen, wenn sie eine Pro­gram­mier­spra­che erlernen.

Eine sehr um­fang­rei­che Stan­dard­bi­blio­thek mit vielen vor­ge­fer­tig­ten Modulen und Funk­tio­nen sowie eine einfache und leicht ver­ständ­li­che Syntax machen Python vor allem für An­fän­ge­rin­nen und Anfänger sehr ein­steig­er­freund­lich.

Weitere Vorteile liegen in der großen und aktiven Ent­wick­lungs-Community von Python, womit zu­sätz­li­che, externe Res­sour­cen und auch Un­ter­stüt­zung vieler Fachleute in die Ent­wick­lung fließen. Als in­ter­pre­tier­ba­re und ob­jekt­ba­sier­te Sprache ist Python gut dazu geeignet, Code zügig zu schreiben und dann direkt zu testen. Hinzu kommt die dy­na­mi­sche Ty­pi­sie­rung von Python, die die Pro­gram­mier­spra­che flexibel ein­setz­bar macht.

Ähnlich wie Java kann Python platt­form­un­ab­hän­gig ohne Än­de­run­gen genutzt werden. Ein be­son­de­rer Vorteil gegenüber anderen Pro­gram­mier­spra­chen ist die nahtlose In­te­gra­ti­on anderer Sprachen wie bei­spiels­wei­se C++. Dies er­leich­tert nicht nur die über­grei­fen­de Arbeit, sondern sorgt auch für eine po­ten­zi­el­le Leis­tungs­op­ti­mie­rung.

Frage 2 der Python-Interview-Fragen: Was versteht man in Python unter „scope“?

Der Begriff „scope“ bezieht sich in Python auf den Gül­tig­keits­be­reich von Variablen. Er definiert den Teil des Codes, in dem eine Variable sichtbar und zu­gäng­lich ist bzw. wo Variablen erstellt und verwendet werden dürfen. Dadurch wird der Code über­sicht­li­cher und Na­mens­kon­flik­te werden gleich­zei­tig minimiert. Python kennt zwei Haupt­ar­ten von Scopes:

  • Globaler Scope: Diese Form von Variablen ist außerhalb von Funk­tio­nen oder Klassen definiert. Auf sie kann im gesamten Programm zu­ge­grif­fen werden. Dabei stehen globale Variablen oft am Anfang des Codes oder auf einer höheren Ebene.
  • Lokaler Scope: Im Gegensatz dazu be­schrän­ken sich Variablen im lokalen Scope auf die Funktion, in der sie definiert wurden. Mit lokalen Variablen ist auch eine Zuordnung in einen spe­zi­fisch de­fi­nier­ten Block möglich.

Sofern der Zugriff auf eine Variable außerhalb des de­fi­nier­ten Codes erfolgen soll, muss eine spezielle Anweisung den Scope ent­spre­chend erweitern. Dies ist zum Beispiel mit „global“ oder „nonlocal“ möglich.

Web­hos­ting
Das beste Web­hos­ting zum Spit­zen­preis
  • 3x schneller und 60 % günstiger
  • Maximale Ver­füg­bar­keit mit > 99.99 %
  • Nur bei IONOS: Bis zu 500 GB Spei­cher­platz inklusive

Frage 3: Worin un­ter­schei­den sich „lists“ und „tuples“ in Python?

In Python gibt es zwei Da­ten­ty­pen für die Spei­che­rung von ge­ord­ne­ten Samm­lun­gen von Elementen: Listen (lists) und Tupel (tuples). Die beiden Typen sind durch we­sent­li­che Un­ter­schie­de definiert, wobei die fle­xi­ble­re Natur von Listen dafür sorgt, dass sie häufiger verwendet werden:

  • Ver­än­der­bar­keit: Listen können verändert werden, auch nachdem die jeweilige Liste bereits erstellt wurde. So lassen sich Elemente hin­zu­fü­gen, entfernen oder auch ändern. In einem Tupel dagegen können Elemente nach der Er­stel­lung nicht mehr verändert werden.
  • Syntax: Listen werden durch eckige Klammern [ ] dar­ge­stellt und Tupel durch runde Klammern ( ). Im Gegensatz zu Listen können Tupel aber auch ohne Klammern definiert werden. Dafür muss klar definiert sein, dass es sich um ein Tupel handelt.
  • Ge­schwin­dig­keit: Hier kommt es auf den An­wen­dungs­fall an. Während Listen aufgrund ihrer Ver­än­der­bar­keit bei be­stimm­ten Ope­ra­tio­nen, bei­spiels­wei­se um­fang­rei­chen Da­ten­än­de­run­gen, schneller sein können, über­tref­fen Tupel Listen in Sachen Ge­schwin­dig­keit beim Zugriff auf Elemente innerhalb einer Sammlung.

Frage 4: Welchen Un­ter­schied gibt es bei Modulen und Paketen in Python?

Module und Pakete un­ter­schei­den sich in ihrer Anwendung dadurch, dass Module einzelne Dateien mit Code sind, während Pakete eine Sammlung von Modulen innerhalb eines Ver­zeich­nis­ses dar­stel­len. Beide Formen der Or­ga­ni­sa­ti­ons­struk­tur sollen dabei helfen, eine über­sicht­li­che­re Struktur her­zu­stel­len, was gerade bei größeren Python-Projekten von Vorteil ist. Die Un­ter­schie­de sind im Detail:

  • Modul: In Python sind Module einzelne Dateien, die Funk­tio­nen, Klassen und Variablen enthalten können. Diese Dateien haben die Er­wei­te­rung .py und helfen dabei, durch ihre Struktur Code besser zu or­ga­ni­sie­ren, da einzelne Dateien die Les­bar­keit und gleich­zei­tig auch die Wart­bar­keit ver­bes­sern.
  • Paket: Pakete dienen in Python ebenfalls der Or­ga­ni­sa­ti­on, sind aber in Ver­zeich­nis­sen bzw. Ordnern struk­tu­riert. Dadurch können Module im Code in einer hier­ar­chi­schen Struktur or­ga­ni­siert werden. Damit ein Ver­zeich­nis von Python als Paket behandelt wird, enthalten Pakete die Datei __init__.py.
Tipp

Im Be­wer­bungs­ge­spräch werden teilweise nicht nur die Spezifika einer be­stimm­ten Pro­gram­mier­spra­che abgefragt. Manchmal geht es auch um die Basics oder all­ge­mei­ne Fra­ge­stel­lun­gen, um eine größere Band­brei­te ab­zu­fra­gen. In weiteren Artikeln finden Sie In­for­ma­tio­nen über:

Frage 5: Was versteht man unter „pickling“ und „un­pick­ling“?

Wenn in Python von „pickling“ oder „un­pick­ling“ die Rede ist, dann ist damit der Prozess des Se­ria­li­sie­rens bzw. De­se­ria­li­sie­rens von internen Objekten gemeint. Durch diese Prozesse ist es möglich, Objekte in eine binäre Da­ten­re­prä­sen­ta­ti­on zu über­füh­ren (pickling) oder die Objekte aus der binären Dar­stel­lung zu­rück­zu­ge­win­nen (un­pick­ling):

  • Pickling: Bei diesem Vorgang wird das Objekt in die binäre Dar­stel­lung um­ge­wan­delt. Dies ist bei­spiels­wei­se dann wichtig, wenn Daten in Python dauerhaft ge­spei­chert oder in ein Netzwerk über­tra­gen werden sollen. Das Modul pickle wird für den Pickling-Prozess in Python verwendet. Es se­ria­li­siert das Objekt, indem es dieses in einen Byte-Stream umwandelt.
  • Un­pick­ling: Im Gegensatz zu „pickling“ wird beim um­ge­kehr­ten Prozess ein zuvor ge­pi­ckel­tes Objekt aus der binären Dar­stel­lung wie­der­her­ge­stellt. Das Modul pickle wird auch für den Un­pick­ling-Prozess verwendet. Es de­se­ria­li­siert den Byte-Stream zurück in ein Python-Objekt.

Frage 6: Worin un­ter­schei­den sich eine Funktion und eine „Lambda“-Funktion?

Grund­sätz­lich erfüllen die beiden Funk­ti­ons­ty­pen den gleichen Zweck. Lambda-Funk­tio­nen sind kürzer und werden häufig bei ein­fa­che­ren Trans­for­ma­tio­nen oder bei­spiels­wei­se Fil­ter­auf­ga­ben genutzt. Die Haupt­un­ter­schie­de zwischen einer normalen Funktion und der Lambda-Variante liegen in der Syntax, ihrem Umfang und dem An­wen­dungs­ge­biet. Diese sehen im Detail wie folgt aus:

  • Syntax: Lambda-Funk­tio­nen sind in der Syntax, was De­fi­ni­ti­on, Body und Rück­ga­be­wert betrifft, kompakter; so gibt es beim Rück­ga­be­wert bei­spiels­wei­se kein ex­pli­zi­tes „return“, da der Aus­drucks­wert implizit zu­rück­ge­ge­ben wird. Dadurch eignen sich Lambda-Funk­tio­nen ins­be­son­de­re für kurze und prägnante Funk­ti­ons­bschrei­bun­gen.
  • Umfang: Während normale Funk­tio­nen mehrere An­wei­sun­gen sowie eine komplexe Logik erhalten können, sind Lambda-Funk­tio­nen auf einen Ausdruck be­schränkt. Ebenso können Lambda-Varianten nur lokale Variablen nutzen, die nor­ma­ler­wei­se auf den Aus­drucks­be­reich be­schränkt sind. Normale Funk­tio­nen können dagegen glei­cher­ma­ßen globale wie auch lokable Variablen verwenden.
  • An­wen­dungs­ge­biet: Normale Funk­tio­nen können überall im Code definiert werden. Lamdba-Funk­tio­nen werden oft dort verwendet, wo eine kurz­le­bi­ge Funktion benötigt wird. Dies ist bei­spiels­wei­se bei Funk­tio­nen wie sorted, filter oder map der Fall.

Frage 7: Welche Ver­er­bungs­lo­gi­ken gibt es in Python und wie geht Python mit Mehr­fach­ver­er­bung um?

In Python sind mehrere Ver­er­bungs­lo­gi­ken möglich. Das bedeutet, dass in Python sowohl die einfache Vererbung als auch Mehr­fach­ver­er­bung möglich sind und an­ge­wen­det werden können. Dabei erbt eine Klasse in der einfachen Vererbung von einer einzigen über­ge­ord­ne­ten Klasse. Die ab­ge­lei­te­te Klasse übernimmt in diesem Fall alle Attribute und Methoden der über­ge­ord­ne­ten Klasse.

Im Falle einer Mehr­fach­ver­er­bung erbt die Klasse von mehr als nur einer über­ge­ord­ne­ten Klasse. In diesem Ver­er­bungs­fall kann die ab­ge­lei­te­te Klasse die Attribute und Methoden von allen über­ge­ord­ne­ten Klassen über­neh­men.

Bei Mehr­fach­ver­er­bung wird in Python die C3-Li­nea­ri­sie­rungs­me­tho­de bzw. die so­ge­nann­te Method Re­so­lu­ti­on Order verwendet. Diese Methode bestimmt die Rei­hen­fol­ge der Auflösung der Methoden in einer Mehr­fach­ver­er­bungs­hier­ar­chie. Auf diese Weise wird si­cher­ge­stellt, dass die Attribute und Methoden in einer kon­sis­ten­ten und vor­her­sag­ba­ren Rei­hen­fol­ge durch­sucht werden. Durch die Li­nea­ri­sie­rung sorgt Python gegen bekannte Ver­er­bungs­pro­ble­me wie das Diamant-Problem vor.

Frage 8: Was versteht man in Python unter „Monkey Patching“?

Mit „Monkey Patching“ ist der Vorgang gemeint, be­stehen­den Code während der Laufzeit zu mo­di­fi­zie­ren, bei­spiels­wei­se indem er erweitert wird und neue Funk­tio­nen oder Methoden hin­zu­ge­fügt oder ersetzt werden. Der Begriff leitet sich aus der Idee heraus ab, dass ein Affe den Code innerhalb der Laufzeit patcht.

Durch Monkey Patching sind dy­na­mi­sche Än­de­run­gen im Code möglich, ohne den Quellcode der ur­sprüng­li­chen Klasse oder Funktion zu ändern. Dies kann nützlich sein, um Fehler zu beheben, Funk­tio­na­li­tä­ten zu erweitern oder auch Teile von Bi­blio­the­ken oder Frame­works an­zu­pas­sen. So können in Bezug auf Klassen auch Methoden über­schrie­ben oder neue Methoden hin­zu­ge­fügt werden.

Frage 9: Welche Un­ter­schie­de bestehen zwischen Django, Pyramid und Flask?

Bei Django, Pyramid und Flask handelt es sich um Python-Web-Frame­works, die sich insgesamt in ihren Ansätzen, der Kom­ple­xi­tät und den be­reit­ge­stell­ten Funk­tio­nen un­ter­schei­den. Die haupt­säch­li­chen Un­ter­schie­de der drei Frame­works sind:

Django

Django ist ein High-Level-Web-Framework, das viele Zu­satz­funk­tio­nen bietet. Bei diesem Framework sind viele Funk­tio­nen und Module bereits vorhanden. Bei­spiels­wei­se enthält Django ein eigenes Object-Re­la­tio­nal Mapping für die Da­ten­bank­in­ter­ak­ti­on. Es bietet auch ein in­te­grier­tes Admin-Interface, was die Ver­wal­tung von Da­ten­mo­del­len er­leich­tert.

Das URL-Design und die Struktur der Anwendung sind vor­de­fi­niert, was die Ent­wick­lung er­leich­tert. Grund­sätz­lich legt Django viel Wert auf Kon­ven­tio­nen. Das Framework bietet auch eine ein­ge­bau­te Au­then­ti­fi­zie­rung und Au­to­ri­sie­rung und enthält darüber hinaus Funk­tio­nen wie Formulare sowie CSRF-Schutz. Dabei bietet sich das Framework eher für Fort­ge­schrit­te­ne an, da die Lernkurve durch den großen Funk­ti­ons­um­fang und die strikte Struktur steil sein kann.

Pyramid

Anders als das um­fas­sen­de Django-Framework prä­sen­tiert sich Pyramid leicht und flexibel. Das Framework er­mög­licht Ent­wick­le­rin­nen und Ent­wick­lern, be­vor­zug­te Bi­blio­the­ken und Kom­po­nen­ten aus­zu­wäh­len. Dabei ist Pyramid besonders stark auf Ska­lier­bar­keit und Er­wei­ter­bar­keit ausgelegt. Das Framework un­ter­stützt ver­schie­de­ne Arten von An­wen­dun­gen: Kleine Projekte und große, komplexe An­wen­dun­gen pro­fi­tie­ren von Pyramid glei­cher­ma­ßen.

Im Gegensatz zu Django gibt Pyramid keine vor­ge­schrie­be­ne An­wen­dungs­struk­tur vor. Damit bestehen mehr Frei­hei­ten bei der Or­ga­ni­sa­ti­on des Codes. Ebenso frei ist die Wahl der Template-Engine, da Pyramid stan­dard­mä­ßig keine Template-Engine verwendet.

Durch seine flexible Anwendung und die minimalen Annahmen ist die Lernkurve bei Pyramid deutlich flacher und das Framework damit besser für den Einstieg geeignet.

Flask

Das dritte Framework im Bunde ist ein so­ge­nann­tes Mi­cro­frame­work. Es ist im Ursprung darauf spe­zia­li­siert, einfach und leicht­ge­wich­tig in der Anwendung zu sein. Um dies zu ge­währ­leis­ten, bietet das Framework nur das Not­wen­digs­te, sodass mit Flask Bi­blio­the­ken nach Bedarf hin­zu­zu­fügt werden können.

Flask setzt auf eine einfache und klare API, die es in der Ent­wick­lung er­mög­licht, schnell los­zu­le­gen. Dazu basiert das Framework auf dem WSGI-Toolkit „Werkzeug“ und verwendet die Template-Engine Jinja2. Ent­wick­le­rin­nen und Ent­wick­ler können zu­sätz­lich andere Kom­po­nen­ten nach Bedarf in­te­grie­ren.

Die Wahl zwischen den drei Frame­works hängt grund­sätz­lich von den An­for­de­run­gen des Projekts, und der damit ein­her­ge­hen­den, be­nö­tig­ten Fle­xi­bi­li­tät ab. Django bietet viele in­te­grier­te Funk­tio­nen und eine klare Struktur, Pyramid setzt auf Fle­xi­bi­li­tät und Ska­lier­bar­keit und bei Flask stehen Ein­fach­heit und Mi­ni­ma­lis­mus im Vor­der­grund.

Frage 10: Wofür stehen „args“ und „kwargs“ in Python?

Die beiden Begriffe stehen für Po­si­tio­nal Arguments, kurz „args“, und Keyword Arguments, kurz „kwargs“. Hinter beiden verbergen sich Kon­ven­tio­nen, die häufig bei der De­fi­ni­ti­on von Funk­tio­nen ein­ge­setzt werden, sofern eine variable Anzahl an Ar­gu­men­ten ak­zep­tiert werden soll. Damit erhalten Ent­wick­le­rin­nen und Ent­wick­ler zu­sätz­li­che Fle­xi­bi­li­tät bei der De­fi­ni­ti­on von Funk­tio­nen. Vor allem dann, wenn nicht zu Beginn bereits klar ist, wie viele oder welche Art von Ar­gu­men­ten am Ende übergeben werden soll.

Args bzw. Arguments werden dann genutzt, wenn eine variable Anzahl an Ar­gu­men­ten auf Po­si­ti­ons­ba­sis in einer Funktion ak­zep­tiert werden sollen. Damit kann eine nicht vor­de­fi­nier­te Anzahl von Ar­gu­men­ten übergeben werden, die in der Funktion wiederum als Tupel verfügbar sind.

Kwargs verhalten sich ähnlich: Sie werden verwendet, um eine variable Anzahl an Ar­gu­men­ten auf Schlüs­sel­wort­ba­sis innerhalb einer Funktion zu ak­zep­tie­ren. Damit wird eine nicht vor­de­fi­nier­te Anzahl von Ar­gu­men­ten übergeben, die in der Funktion als Dic­tion­a­ry verfügbar sind.

Wenn eine Funktion sowohl variable Po­si­tio­nal als auch Keyword Arguments enthalten soll, ist es in Python auch möglich, args und kwargs in derselben Funktion zu nutzen.

Zum Hauptmenü