{"id":179463,"date":"2023-07-02T08:48:15","date_gmt":"2023-07-02T07:48:15","guid":{"rendered":"https:\/\/liora.io\/de\/?p=179463"},"modified":"2026-02-06T06:36:30","modified_gmt":"2026-02-06T05:36:30","slug":"variablentypen-in-python-was-hat-es-damit-auf-sich","status":"publish","type":"post","link":"https:\/\/liora.io\/de\/variablentypen-in-python-was-hat-es-damit-auf-sich","title":{"rendered":"Variablentypen in Python: Was hat es damit auf sich?"},"content":{"rendered":"<h3>Python hat sich seit einiger Zeit als eine der f\u00fchrenden Programmiersprachen f\u00fcr Data Science etabliert: Es ist einfach zu erlernen f\u00fcr Personen mit einem Hintergrund als Statistiker, gut ausgestattet mit Bibliotheken, zu allem f\u00e4hig und ein treuer Begleiter f\u00fcr Data Scientists.<\/h3>\nAllerdings kann man <a href=\"https:\/\/liora.io\/de\/julia-vs-python-welche-sprache-ist-die-beste-fuer-data-science\">Data Science auf einem ziemlich hohen Niveau betreiben,<\/a> ohne alles \u00fcber die Besonderheiten zu wissen: Wie viele Data Scientists benutzen Dekoratoren? Ist Python multi-thread oder multi-core?\n\nAls ich neulich versuchte, die Frage zu beantworten, warum der folgende Code zwei verschiedene Ergebnisse anzeigt, habe ich mich gefragt, warum Python so viele verschiedene Ergebnisse anzeigt,\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"800\" height=\"130\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/Capture-decran-2020-05-22-a-14.24.12-1024x167.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/Capture-decran-2020-05-22-a-14.24.12-1024x167.png 1024w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/Capture-decran-2020-05-22-a-14.24.12-300x49.png 300w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/Capture-decran-2020-05-22-a-14.24.12-768x125.png 768w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/Capture-decran-2020-05-22-a-14.24.12.png 1200w\" sizes=\"(max-width: 800px) 100vw, 800px\"><figcaption><\/figcaption><\/figure>\nbin ich auf <a href=\"https:\/\/github.com\/pandas-dev\/pandas\/blob\/master\/pandas\/core\/series.py#L2083\">das<\/a> hier gesto\u00dfen.\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"800\" height=\"149\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/Capture-decran-2020-05-22-a-14.24.18-1024x191.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/Capture-decran-2020-05-22-a-14.24.18-1024x191.png 1024w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/Capture-decran-2020-05-22-a-14.24.18-300x56.png 300w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/Capture-decran-2020-05-22-a-14.24.18-768x143.png 768w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/Capture-decran-2020-05-22-a-14.24.18.png 1190w\" sizes=\"(max-width: 800px) 100vw, 800px\">\n\n<figcaption><\/figcaption><\/figure>\nF\u00fcr diejenigen, die wie ich schon <a href=\"https:\/\/liora.io\/de\/java-grundlagen-wir-erklaerens-dir-jdk-jre-und-jvm\">mit Java gearbeitet<\/a> haben, mag es Erinnerungen (oder sogar Verletzungen) hervorrufen, aber f\u00fcr einen unerfahrenen Python-Benutzer mag es \u00fcberraschend sein.\n<h2>Dynamische Typisierung vs. statische Typisierung<\/h2>\nPython ist eine dynamisch typisierte Sprache, d. h. du kannst den Typ einer Variablen \u00e4ndern. Im Gegensatz dazu zwingt eine statisch typisierte Sprache dazu, den Typ der Variablen zu definieren und ihn w\u00e4hrend der Lebensdauer der Variablen beizubehalten.\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"800\" height=\"66\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/Capture-decran-2020-05-22-a-14.26.16-1024x85.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/Capture-decran-2020-05-22-a-14.26.16-1024x85.png 1024w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/Capture-decran-2020-05-22-a-14.26.16-300x25.png 300w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/Capture-decran-2020-05-22-a-14.26.16-768x64.png 768w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/Capture-decran-2020-05-22-a-14.26.16.png 1200w\" sizes=\"(max-width: 800px) 100vw, 800px\">\n\n<figcaption><\/figcaption><\/figure>\nDas macht Python nat\u00fcrlich sehr benutzerfreundlich, da du den Typ einer Variablen nicht im Voraus angeben musst und du ihn leicht \u00e4ndern kannst. Aber zu versuchen, das mit Java zu tun&#8230;\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"200\" height=\"200\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/volcan.gif\" alt=\"\" loading=\"lazy\">\n\n<figcaption>Ich beim Coden in Java &#8211; Allegorie<\/figcaption><\/figure>\nDiese <strong>Einfachheit von Python<\/strong> kann auch zu Verwirrung f\u00fchren.\n\nWenn du nicht genau wei\u00dft, welche Art von Variablen eine Funktion annehmen kann, kannst du Schwierigkeiten haben, den Code einer anderen Funktion zu lesen.\n\nEine der Funktionen, die Python bietet, erm\u00f6glicht es uns, die Illusion einer statischen Typisierung zu erzeugen: Annotationen.\n<h2>Annotationen<\/h2>\nIn Python kannst du Annotationen verwenden, um Informationen \u00fcber den Code, den du gerade schreibst, hinzuzuf\u00fcgen.\n\nDu kannst die Art der Argumente mit einem &#8222;:&#8220; und einem String dahinter angeben, aber auch die Art der Ausgabe der Funktion. Auf diese Anmerkungen kann man mit Hilfe von:\n\n<img decoding=\"async\" width=\"800\" height=\"47\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/Capture-decran-2020-05-22-a-14.43.32-1024x60.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/Capture-decran-2020-05-22-a-14.43.32-1024x60.png 1024w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/Capture-decran-2020-05-22-a-14.43.32-300x17.png 300w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/Capture-decran-2020-05-22-a-14.43.32-768x45.png 768w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/Capture-decran-2020-05-22-a-14.43.32.png 1204w\" sizes=\"(max-width: 800px) 100vw, 800px\">\n\nwas folgendes zur\u00fcckgibt:\n\n<img decoding=\"async\" width=\"800\" height=\"41\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/Capture-decran-2020-05-22-a-14.43.38-1024x53.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/Capture-decran-2020-05-22-a-14.43.38-1024x53.png 1024w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/Capture-decran-2020-05-22-a-14.43.38-300x16.png 300w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/Capture-decran-2020-05-22-a-14.43.38-768x40.png 768w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/Capture-decran-2020-05-22-a-14.43.38.png 1200w\" sizes=\"(max-width: 800px) 100vw, 800px\">\n\nDennoch habe ich die interne Struktur von Python nicht ver\u00e4ndert. Schlimmer noch, es hat keinen Sinn.\n\n<img decoding=\"async\" width=\"800\" height=\"43\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/Capture-decran-2020-05-22-a-14.43.44-1024x55.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/Capture-decran-2020-05-22-a-14.43.44-1024x55.png 1024w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/Capture-decran-2020-05-22-a-14.43.44-300x16.png 300w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/Capture-decran-2020-05-22-a-14.43.44-768x42.png 768w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/Capture-decran-2020-05-22-a-14.43.44.png 1184w\" sizes=\"(max-width: 800px) 100vw, 800px\">\n\nund\n\n<img decoding=\"async\" width=\"800\" height=\"72\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/Capture-decran-2020-05-22-a-14.43.50-1024x92.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/Capture-decran-2020-05-22-a-14.43.50-1024x92.png 1024w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/Capture-decran-2020-05-22-a-14.43.50-300x27.png 300w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/Capture-decran-2020-05-22-a-14.43.50-768x69.png 768w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/Capture-decran-2020-05-22-a-14.43.50.png 1202w\" sizes=\"(max-width: 800px) 100vw, 800px\">\n\nfunktionieren sehr gut&#8230;\n\nWas ist also los? Abgesehen vom \u00e4sthetischen Aspekt (der relativ ist), ist es v\u00f6llig unn\u00f6tig?\n\nNun, ja und nein&#8230;\n\nIn der Tat sind diese Annotationen nur ein Mittel, um Informationen \u00fcber die verschiedenen Argumente und Ausgaben deiner Funktion zu erhalten, aber der Gewinn an Klarheit ist bei der Verwendung der Funktion nicht zu vernachl\u00e4ssigen.\n\nWenn du mit mehreren<strong> Personen zusammenarbeitest<\/strong> oder einfach nur Code austauschst, kann es sehr n\u00fctzlich sein, die Argumente und Ausgaben einer Funktion, die du benutzt, genau zu identifizieren.\n<h2>MyPy<\/h2>\nAber man kann diese Annotationen mit einem anderen Werkzeug kombinieren: MyPy. Das ist eine Bibliothek, die nicht wirklich verstanden hat, wie Python funktioniert, und die denkt, dass Annotationen wirklich Typdeklarationen sind.\n\nSie kann \u00fcberpr\u00fcfen, ob du alles richtig machst&#8230; ob du Quadrate in Quadrate, Kreise in Kreise und Dreiecke in Dreiecke setzt.\n<figure>\n\t\t\t\t\t\t\t\t\t\t<img decoding=\"async\" width=\"300\" height=\"230\" src=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/Capture-decran-2020-05-22-a-14.44.01-300x230.png\" alt=\"\" loading=\"lazy\" srcset=\"https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/Capture-decran-2020-05-22-a-14.44.01-300x230.png 300w, https:\/\/liora.io\/app\/uploads\/sites\/8\/2023\/07\/Capture-decran-2020-05-22-a-14.44.01.png 512w\" sizes=\"(max-width: 300px) 100vw, 300px\">\n\n<figcaption><\/figcaption><\/figure>\nMan sollte die <a href=\"https:\/\/liora.io\/de\/python-annotations-wie-und-wann-benutzt-man-sie\">Annotationen also als Hilfe bei der Entwicklung und beim Teilen von Code sehen<\/a> und<a href=\"\/\"> MyPy als Anleitung zum sauberen Entwickeln.<\/a> Zugegeben, es macht keinen gro\u00dfen Unterschied, wenn man auf einem Notebook codiert und alle seine Funktionen aus Sklearn oder Pandas importiert.\n\nSicherlich w\u00fcrde eine echte statische Typisierung die Arbeit von Python beschleunigen (da <a href=\"https:\/\/liora.io\/de\/pygtk-das-tool-zur-erstellung-von-grafischen-benutzeroberflaechen-in-python\">Python<\/a> nicht mehr den Typ von Variablen ableiten m\u00fcsste), aber es kann helfen, sich zurechtzufinden und ein \u00dcberma\u00df an Codezeilen zu debuggen.\n\nUnd obwohl ich wei\u00df, dass Anmerkungen wie gute Vors\u00e4tze sind, man nimmt sich vor, sie zu benutzen, und zwei Funktionen sp\u00e4ter ist alles wieder vergessen, wollte ich dir zumindest von meiner Entdeckung erz\u00e4hlen.\n\nHat dir dieser Artikel gefallen? Dann melde dich f\u00fcr unseren Newsletter an und erhalte Datentipps, die du sonst nirgends findest!\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex is-content-justification-center\"><div class=\"wp-block-button \"><a class=\"wp-block-button__link wp-element-button \" href=\"https:\/\/liora.io\/de\/terminvereinbarung\">Einen Termin vereinbaren<\/a><\/div><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Python hat sich seit einiger Zeit als eine der f\u00fchrenden Programmiersprachen f\u00fcr Data Science etabliert: Es ist einfach zu erlernen f\u00fcr Personen mit einem Hintergrund als Statistiker, gut ausgestattet mit Bibliotheken, zu allem f\u00e4hig und ein treuer Begleiter f\u00fcr Data Scientists. Allerdings kann man Data Science auf einem ziemlich hohen Niveau betreiben, ohne alles \u00fcber [&hellip;]<\/p>\n","protected":false},"author":76,"featured_media":179467,"comment_status":"open","ping_status":"open","sticky":false,"template":"elementor_theme","format":"standard","meta":{"_acf_changed":false,"editor_notices":[],"footnotes":""},"categories":[2476],"class_list":["post-179463","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cloud-dev"],"acf":[],"_links":{"self":[{"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/posts\/179463","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/users\/76"}],"replies":[{"embeddable":true,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/comments?post=179463"}],"version-history":[{"count":1,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/posts\/179463\/revisions"}],"predecessor-version":[{"id":217410,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/posts\/179463\/revisions\/217410"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/media\/179467"}],"wp:attachment":[{"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/media?parent=179463"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/liora.io\/de\/wp-json\/wp\/v2\/categories?post=179463"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}