Python Tutorial #20 - Gültigkeitsbereich von Variablen

แชร์
ฝัง
  • เผยแพร่เมื่อ 17 ธ.ค. 2024

ความคิดเห็น • 99

  • @0Nastya0
    @0Nastya0 2 ปีที่แล้ว +20

    Ich finde es gut, dass du deine Fehler nicht aus dem Video rauseditierst. Das stärkt das Bewusstsein dafür, worauf man achten und was vermeiden sollte.

  • @ccwwaallkkeerr
    @ccwwaallkkeerr 7 ปีที่แล้ว +2

    Hab Gestern mit dieser Python Serie angefangen und muss sagen, dass das bis jetzt das schwerst zu verstehende Thema war. Nach jedoch 5 mal schauen hab ich's auch verstanden :D

    • @TheMorpheusTutorials
      @TheMorpheusTutorials  7 ปีที่แล้ว

      Ja, das ist nicht ganz einfach :)
      Nach einer Weile Üben hat man aber den Dreh auch =)

  • @markkorbin4789
    @markkorbin4789 8 ปีที่แล้ว +13

    Beim ersten mal wirklich etwas konfus, aber beim zweiten Anschauen mit etwas mehr Konzentration, hat es Klick gemacht ;)

  • @Atalanttore
    @Atalanttore 8 ปีที่แล้ว +43

    Also ...
    * lokale Variablen gelten nur genau in der (Unter-)Funktion in der sie definiert sind. Standardeinstellung bei Variablenzuweisungen in Funktionen.
    * nicht-lokale Variablen gelten in der (Unter-)Funktion in der sie definiert sind und (bei verschachtelten Funktionen) auch noch genau eine Funktion darüber, aber nicht weiter.
    * globale Variablen gelten in der ganzen Skriptdatei, wenn sie irgendwo in der Skriptdatei definiert sind.
    Ist das so korrekt?

  • @easypy
    @easypy 2 ปีที่แล้ว

    Wichtiges Tutorial auf dem Weg zum fortgeschrittenen :)

  • @heyhoubenjo5743
    @heyhoubenjo5743 8 ปีที่แล้ว +1

    Danke! Hatte die ganze Zeit bei meinem Projekt das Problem, dass meine Methode eine Variable vom ganzem Script nicht überschrieben hat und ich nicht wusste, wieso. Jetzt weiß Ich, dass einfache Variablen nur innerhalb einer Methode etwas verändern. Der Global Trick hat mir mega geholfen!

  • @justuslutter9890
    @justuslutter9890 3 ปีที่แล้ว +6

    Ein Tipp an alle die das Thema beim ersten Mal anschauen nicht ganz verstehen. Ihr solltet das Video noch ein zweites oder drittes Mal anschauen :)

  • @Frontmaker
    @Frontmaker 6 ปีที่แล้ว +1

    Sehr gutes Video.
    Ich nutze seit dem Ende meines Bachelorstudiums und gerade im Masterstudium sehr gerne Python solange die Programme die ich schreiben muss keinen Echtzeitanforderungen unterliegen. Ich programmiere schon länger mit Python, aber mir ist auch nicht jedes Schlüsselwort/Konstrukt bekannt. Insbesondere global und nonlocal fand ich mal interessant zu wissen.
    Nichtsdestotrotz ist es mir schleierhaft, wann diese Schlüsselwörter wirklich nützlich sein können, da ich der Meinung bin, dass man jedes Programm mit gleicher Semantik schreiben kann ohne gleich eine softwaretechnische Katastrophe mit Hilfe besagter Schlüsselwörter auszulösen. Ich lasse mich gerne eines besseren belehren, wenn mir Anwendungsbeispiele mit sinnvoller Erklärung aufgezeigt werden, allerdings finde ich einige Konstrukte in Python wirklich sehr seltsam. Ich kann mich noch an ein Python Buch erinnern, welches ich mir mal zur Hand nahm und ich von dem while else Konstrukt gelesen habe. Dabei habe ich mich wirklich gefragt wieso solche abstrusen Konstrukte überhaupt in eine Sprache einbaut werden.

    • @TheMorpheusTutorials
      @TheMorpheusTutorials  6 ปีที่แล้ว

      Vielen Dank erstmal.
      Ich denke, diese etwas eigenartigen Konzepte (Ich nutze sie auch selten bis nie) sollen für jeden Entwickler den persönlichen Stil zulassen, auch wenn das nicht unbedingt immer ratsam ist. Global habe ich in einer Situation gebraucht, als ich auf einer mehrfach verwendete Ressource zugreifen wollte. Dazu muss man allerdings sagen, dass die Anwendung eine Flask-Anwendung war, sprich ich keine Kontrolle über die Reihenfolge der Aufrufe hatte, dennoch aber einen gewissen Zustand ohne Datenbank erreichen wollte.

  • @hallomallo277
    @hallomallo277 3 ปีที่แล้ว

    Danke für die guten Videos

  • @forestcat512
    @forestcat512 4 ปีที่แล้ว +20

    Ich fand tatsächlich das nicht so schwer zu verstehen.

  • @Woschtperle
    @Woschtperle 6 ปีที่แล้ว +9

    Danke für die Erklärung, nach dem 2. Mal anschauen habe ich es (denke ich) verstanden. Vielleicht wäre es einfacher, nach jedem Funktionsaufruf einen print(var) zu machen, dann sieht man auch was nach jedem Funktionsaufruf genau passiert, oder eben nicht passiert :-) In deinem Beispiel also z.B.:
    def f():
    def local():
    var = "local text"
    def do_nonlocal():
    nonlocal var
    var = "non local text"
    def do_global():
    global var
    var = "global text"
    var = "text"
    print("var: ", var)
    local()
    print("local: ", var)
    do_nonlocal()
    print("nonlocal: ", var)
    do_global()
    print("global: ", var)
    f()
    print("global: ", var)
    AUSGABE:
    var: text
    local: text
    nonlocal: non local text
    global: non local text
    global: global text

    • @TheMorpheusTutorials
      @TheMorpheusTutorials  6 ปีที่แล้ว +4

      Gute Idee und gute Übung 🙂 danke

    • @walterschmidt5393
      @walterschmidt5393 4 ปีที่แล้ว +1

      Danke, dein Skript hat mir echt geholfen

    • @marcriese7825
      @marcriese7825 4 ปีที่แล้ว +1

      Hey ich hatte erst selber ein wenig rumprobiert udn habe immer diesen fehler code bekommen:C:\Users\User>E:\python\test.py
      File "E:\python\test.py", line 5
      nonlocal var
      ^
      SyntaxError: invalid syntax
      Daraufhin habe ich deine Code kopiert und es nochmal Probiert und wieder den seben fehler code bekommen, kann mir wer erklären wodran das liegt?

    • @patrickg.3602
      @patrickg.3602 3 ปีที่แล้ว

      @@marcriese7825 Ich bin zwar selbst Anfänger und ich weiß auch nicht, ob sich dein Problem mittlerweile erledigt hat, aber die Fehlermeldung bedeutet ja, dass da was an der Syntax/"Rechtschreibung" nicht stimmt.... Kopieren vom Kommentar wird vermutlich nicht klappen, weil bei Python das Einrücken/Die Tabs sehr wichtig sind und der Verfasser vermutlich nur Leerzeichen benutzt hat... Wenn du also Probleme mit dem Script hast, tippe in per Hand ab und achte in Zeile 5 auf die Tabs. Normalerweise funktioniert der Script so, habe es gerade nochmal probiert...

  • @joooooonasssss
    @joooooonasssss 3 ปีที่แล้ว +2

    ich fands eig ziemlich einfach :) gutes video

  • @capitaen_proton9480
    @capitaen_proton9480 7 ปีที่แล้ว +8

    Vielen Dank ohne dieses Video hätte ich mein Projekt aufgegeben müssen. :)

  • @Keyuser1972
    @Keyuser1972 7 ปีที่แล้ว +1

    Ja, ging gut rein. Muss mir das aber noch ein paar mal anhörn.
    Ich nehm's mal jetzt so hin ^^
    - mir ist auch vielleicht noch nicht bewusst, welche Art von Problemen damit gelöst werden können.

  • @igs8949
    @igs8949 7 ปีที่แล้ว +22

    Zum Thema "Heute wirds krass"...ich fands eigentlich ganz schön einfach xD

    • @TheMorpheusTutorials
      @TheMorpheusTutorials  7 ปีที่แล้ว +1

      :D Umso besser

    • @bonbondojoe1522
      @bonbondojoe1522 5 ปีที่แล้ว +17

      Finde ich auch, also ich fand das mit der Fibonacci-Funktion schwieriger

  • @michaelschossow9874
    @michaelschossow9874 5 ปีที่แล้ว +2

    Super Video. Zur Kontrolle empfehle ich print(id(var)).

  • @KartoffelBaterie
    @KartoffelBaterie 5 ปีที่แล้ว +4

    Sehr coole Videoreihe.
    Ich studiere Mathematik und hab mich bisher immer vorm Programmieren gedrückt, aber will jetzt nächstes Semester ein Seminar über KI hören wofür Kenntnisse in Python vorrausgesetzt sind und deswegen schaue ich mir die Videos jetzt an und ich muss sagen, es sieht gar nicht mal so schwer aus und ist mega interessant.
    Ich denke ich werde jetzt auch mein Nebenfach in Informatik belegen.
    Zu dem Video: Könnte man es auch so erklären dass jede Variable im Prinzip 3 "Facetten"/"Gesichter" hat? Also ein lokales, nichtlokales und globales Gesicht und dann immer ein anderes zum Vorschein kommt, je nachdem wo man es gerade aufgerufen hat?

    • @TheMorpheusTutorials
      @TheMorpheusTutorials  5 ปีที่แล้ว +3

      Vielen Dank und viel Erfolg dabei!
      Nein, nicht wirklich. Es sind tatsächlich verschiedene Bereiche im Speicher, die einfach nur gleich benannt sind für den Programmierer, aber eigentlich nichts miteinander zu tun haben

  • @byozz548
    @byozz548 3 ปีที่แล้ว

    jetzt bleibt mir noch eine frage: wie kann ich in der funktion f die global var ausgeben lassen? weil für print(var) wird ja nur die nonlocal ausgegeben.

  • @mertechnightcore4098
    @mertechnightcore4098 3 ปีที่แล้ว

    warum ist nach do_global() der var wert nicht "global var" in der funktion f? nonlocal var wurde doch überschrieben oder nicht?

  • @smoban
    @smoban 2 ปีที่แล้ว

    hi, ich verstehe nicht ganz warum bei
    _after init: non local text_
    geprintet wird statt
    _after init: global text_
    weil du ja eigentlich _do_global()_ nach _do_nonlocal()_ aufgerufen hast, was doch praktisch den nonlokalen wert von var mit dem globalen wert überschreiben würde, oder?

  • @husseinfuest1504
    @husseinfuest1504 4 ปีที่แล้ว +1

    global zu benutzen tut Entwicklern in den Augen weh ^^
    Gutes Video!

  • @peterbeier8931
    @peterbeier8931 7 ปีที่แล้ว

    Tolle Tutorials!
    Bei einer Sache komme ich noch nicht mit: Bei der Script Ausführung bei 10:08, steht bei "nach init:" "non local text" und nicht "global text". Das wundert mich, weil von der Reihenfolge her kommt die def "do_global" als letzte vor dem print(). Warum gilt auf dieser Ebene also die nonlocal var und nicht die global var zuweisung?
    Gilt die global var nur auf der obersten Ebene, also in keiner funktion?

    • @TheMorpheusTutorials
      @TheMorpheusTutorials  7 ปีที่แล้ว +1

      vielen Dank :)
      da du eine non-local Variable zur Verfügung hast, wird die sozusagen "zuerst genutzt", da sie von der Hierarchie die andere Variable überschattet. Es gibt quasi 2 Variablen mit dem selben Namen, aber innerhalb der Funktion wird die global dann als letztes genutzt

  • @xh4mmer
    @xh4mmer ปีที่แล้ว

    wenn ich in der funktion f() also nonlocal vars definiere, sind es automatisch globale variablen ?

  • @mOeINTALEX
    @mOeINTALEX 7 ปีที่แล้ว +1

    Danke für das sehr hilfreiche Tutorial! Kann man ähnlich wie mit Variablen auch für definierte Funktionen verfahren? D.h. kann man Funktionen ebenfalls "globalisieren", sodass man von überall auf sie Zugriff hat? Mir ist die Frage in den Sinn gekommen, als ich das Verschachtelungsbeispiel von IsTrue unten gesehen habe...

    • @TheMorpheusTutorials
      @TheMorpheusTutorials  7 ปีที่แล้ว +1

      Dort, wo du die Funktion definierst, ist sie auch gültig. Wenn du sie ganz außen definierst, ist sie global :)
      Und man kann sie natürlich importieren, d.h. from meinModul import meineFunktion :)

  • @_Einfach_nur_Alex_
    @_Einfach_nur_Alex_ 4 ปีที่แล้ว

    Hab ich das richtig verstanden?
    var = local var = nur in der geschriebenen Funktion gültig
    nonlocal var = eine var die in ihrer Funktion und allen anderen Überfunktionen gültig ist
    global var = eine var die im kompletten Code dann verfügbar ist
    wenn ich dann aber in einer Funktion zum Beispiel sage "return var" heißt das ich gebe die var nur das eine mal bei Aufruf der Funktion an die Main weiter.
    Wenn ich den Code dann quasi so schreibe, hab ich doch auch eine "global var" erstellt oder nicht? Weil ich ja im Main schreibe und dann im kompletten Main die Variable habe.
    def start():
    var = ("Globale Var")
    return var
    if __name__ == "__main__":
    start = start()
    print(start)
    Ist das alles so richtig von mir?

  • @patrickg.3602
    @patrickg.3602 3 ปีที่แล้ว

    Das heißt wenn ich keine Unterfunktionen habe, ist nonlocal im Prinzip das selbe wie global?

  • @autography1
    @autography1 4 ปีที่แล้ว +2

    Könntest du nochmal erklären wofür:
    if __name__ == "__main__"
    benutzt wird. Eventuell mit einfachen Wörtern. Ich danke dir für die Hilfe

    • @TheMorpheusTutorials
      @TheMorpheusTutorials  4 ปีที่แล้ว +1

      Da fängt das Programm an 😅

    • @autography1
      @autography1 4 ปีที่แล้ว

      @@TheMorpheusTutorials HAHA ;D. Aber wieso muss man dies am Anfang einfügen?

    • @autography1
      @autography1 4 ปีที่แล้ว +1

      Hat sich erledigt im Video #16 wirds erklärt. Musste es mir nur noch einmal anschauen

  • @kailakomy8455
    @kailakomy8455 5 ปีที่แล้ว

    Hallo ich habe da ein paar fragen zu den variablen gibt es eine möglichkeit den wert einer variable zu speichern in einer Funktion so das mann runter zählen kann mit einer Funktion?

    • @TheMorpheusTutorials
      @TheMorpheusTutorials  5 ปีที่แล้ว

      Ja, absolut. Du kannst parameter nutzen, um der Funktion Werte zu geben und über return Werte zurück geben

  • @Quants4Funds
    @Quants4Funds 10 หลายเดือนก่อน

    Ich kannte das Thema vorher schon, bezeihungsweise die Funtkion global.
    Jetzt frage ich mich, wenn man:
    x = "cool"
    def test():
    x = "smart"
    print("Python ist", x)
    test()
    print("Python ist", x)
    Ist das nun eine einfachere Version zum verstehen dieses Themas oder bin ich dran vorbei ? :D

    • @Quants4Funds
      @Quants4Funds 10 หลายเดือนก่อน

      Geschrieben in Minute 8:55, 30 Sekunden später wird die global Funktion gezeigt, mein fehler ^^

  • @ubiquitousjoke5526
    @ubiquitousjoke5526 6 ปีที่แล้ว

    weißt du wieso mir bei folgendem beispielskript 'no binding for nonlocal 'z' found' angezeigt wird, wenn ich das skript laufen lassen will:
    def non_lokal():
    nonlocal z
    z = 'servus'
    print(z)

    • @TheMorpheusTutorials
      @TheMorpheusTutorials  6 ปีที่แล้ว

      Nonlocal existiert nur in nested functions, was du hier nicht hast ;)

    • @ubiquitousjoke5526
      @ubiquitousjoke5526 6 ปีที่แล้ว

      The Morpheus Tutorials ach dann lass ich den unfug einfach xD

    • @christianheinrich891
      @christianheinrich891 6 ปีที่แล้ว +1

      Das "nonlocal" funktioniert nur für "umschließende" Funktionen. Außerdem hast du "z" nicht global deffiniert in deinem Beispiel ;)
      Eventuell hilft das Beispiel hier beim Verstehen:
      z = 'asdf'
      def test():
      z = 'test'
      def non_lokal():
      nonlocal z
      z = 'servus'
      print(z)
      non_lokal()
      print(z)
      test()
      print(z)
      Die Ausgabe ist:
      servus
      servus
      asdf

    • @ubiquitousjoke5526
      @ubiquitousjoke5526 6 ปีที่แล้ว

      Christian Heinrich ach Danke :D

  • @sirmaurice.-
    @sirmaurice.- 5 ปีที่แล้ว +1

    Erinnert mich sehr an Delphi :D

  • @dropshot7482
    @dropshot7482 7 ปีที่แล้ว

    Ich wollte mich mal für die tolle Serie bedanken...Ich habe es bis jetzt nicht in der Serie gesehen aber wirst du auch mal ein Video über gui Programmierung in Python machen ? Oder hast du auf deinem Kanal schon ein Video mit diesem Thema?

    • @TheMorpheusTutorials
      @TheMorpheusTutorials  7 ปีที่แล้ว

      vielen Dank :)
      Ja, auf meinem Kanal gibt's ne Playlist über PyQT 5, das ist eine GUI-Bibliothek :)

    • @dropshot7482
      @dropshot7482 7 ปีที่แล้ว

      ok vielen Dank fürs antworten:)

  • @mupf6237
    @mupf6237 4 ปีที่แล้ว

    Hallo,
    Ich habe mal gehört, dass man global nicht verwenden soll, warum ist das so?

  • @troi951
    @troi951 8 ปีที่แล้ว +1

    Was ich für mich gerade festgestellt habe. nonlokale Variablen überschreiben lokale aber globale überschreiben keine nonlokale oder lokale Variablen. Stimmt das so?

    • @TheMorpheusTutorials
      @TheMorpheusTutorials  8 ปีที่แล้ว +1

      +Marco Be globale sind ganz außen, daher die "schwächsten", danach kommen die nonlok. Und dann die lokalen. Also ja die Reihenfolge passt 😉

    • @Atalanttore
      @Atalanttore 8 ปีที่แล้ว +1

      Mir fällt auf:
      Wenn es eine Variable im Programm schon gibt, kann man dieser Variablen innerhalb einer Funktion nur mit "global" einen neuen globalen Wert zuweisen, sonst macht die Variable in der Funktion ihr eigenes Ding.

    • @Atalanttore
      @Atalanttore 8 ปีที่แล้ว

      Ist "Überschatten" der technische Fachbegriff dafür? Das Wort ist mir bisher noch nie über den Weg gelaufen.

    • @TheMorpheusTutorials
      @TheMorpheusTutorials  8 ปีที่แล้ว +1

      soweit ich weiß schon :D

    • @Atalanttore
      @Atalanttore 8 ปีที่แล้ว +1

      Wieder was gelernt ;)

  • @momo-fe1wi
    @momo-fe1wi 2 ปีที่แล้ว

    Cool fände ich wenn du unterm tut. Irgendwo nochmal den Code zum sauber angucken stumpf reinkopierst hab manchmal probleme den Kram zum laufen zu bringen weil wie hier die var nicht übergeben wird nur meine Fähigkeiten reichen kaum um den blöden wahrscheinlich Tippfehler zu sehen da würde mir feststehend irgendwo lösungscode helfen grüße

    • @momo-fe1wi
      @momo-fe1wi 2 ปีที่แล้ว

      Habs video weiter stands nochmal und ich hab das zu weit eingerückte gesehen :D

  • @qprett
    @qprett 3 ปีที่แล้ว

    Vor einer Woche habe ich meine Informatik-Arbeit geschrieben...
    Hab dann eine while-Schleife an die Bedingung x == 0 gekoppelt. ich hab x vor der Schleife natürlich mit 0 definiert. Und ich hatte ein Kriterium in meinem Algorithmus, das x zu 1 setzt... damit sollte die Schleife unterbrochen werden, dachte ich.
    Jetzt sitze ich hier, eine Woche später, und bete dass ich mich mit dem break-Befehl abgesichert hab. (Variablen waren in der Arbeit kein Thema, aber ich dachte, dass ich sie gut genug Verstanden hab...)

  • @thstlt_photo2534
    @thstlt_photo2534 4 ปีที่แล้ว

    kann man so was auch mit Funktionen machen?

  • @superciopio6667
    @superciopio6667 6 ปีที่แล้ว

    und alle Variablen die ganz oben deklariert werden oder außerhalb von funktionen sind global Variablen, vor alle die ganz oben sind, oder? denn wenn man versucht Sie als global zu deklarieren sagt dir das du nicht zwei mal deklarieren brauchst

  • @lovelllaurent6595
    @lovelllaurent6595 6 ปีที่แล้ว

    hey, heißt das jetzt, dass Unterfunktionen wie hier ganz einfach durch das Einrücken von den Zeilen abgegrenzt sind? Und könntest du eventuell mal ein Video zu CodierungsGuidelines oder Codierungsstandards für sauberes codieren machen? Am besten natürlich für den CodingStyle in Python wäre cool, da es das noch nicht wirklich gibt..

    • @TheMorpheusTutorials
      @TheMorpheusTutorials  6 ปีที่แล้ว

      Die Coding conventions unterscheiden sich je nach Sprache :) Kann ich aber in Angriff nehmen, danke für den Tipp.
      Unterfunktionen: Nein, durch das Schlüsselwort def leitest du eine Funktionsdefinition ein. Einrücken bestimmt nur von wo bis wo es geht

  • @tristanmensing6545
    @tristanmensing6545 3 ปีที่แล้ว

    da war nichts zu verstehen ,es ist einfach so ,das ist eine Definition was muss Mann daran verstehen. Die einzige frage die ich habe ist wann wird das benutzt!

  • @magnuslunzer2335
    @magnuslunzer2335 4 ปีที่แล้ว

    Okay interessant, also ist eine Funktion quasi eine Art Box im Skript die dir nur etwas ausgibt, aber man sozusagen beim Ausführen nicht schauen kann was da jetzt genau passiert. Und Boxen können anscheinend auch in Boxen sein und diese wieder in Boxen. Hilft einem definitiv Python zu verstehen!
    Die local var gilt nur in einer Box, aber nicht in ihren Unter- und Überboxen. Die nonlocal var gilt in einer Box, aber auch in ihren Unter- und Überboxen. Die global var gilt immer. Denke das sollte so passen oder?

  • @yrave6864
    @yrave6864 6 ปีที่แล้ว +2

    Kleiner extra brainfuck: Die Variable muss für nonlocal scheinbar auch in der übergeordneten Funktion initialisiert sein (und wird dann von nonlocal überschrieben). Ist sie nur in der nonlocal-Funktion initialisiert gibts nen Fehler. Selbes gilt für global aber nicht. Muss man wohl einfach so hinnehmen xD

    • @TheMorpheusTutorials
      @TheMorpheusTutorials  6 ปีที่แล้ว +1

      :D Danke fürs Ergänzen.
      Ich muss ehrlich sagen, dass ich außer global quasi nie einen der Modifier verwende^^

  • @moritzs2833
    @moritzs2833 5 ปีที่แล้ว

    Wie kann man das wo anwenden?

    • @TheMorpheusTutorials
      @TheMorpheusTutorials  5 ปีที่แล้ว

      ZB bei threads wirds wichtig und generell ist es gut, es im Kopf zu haben. Auch bei Flask hab ich es bereits ein paar mal gebraucht

  • @hexgames3952
    @hexgames3952 7 ปีที่แล้ว

    geht das in Python 2.7 auch schon?

  • @Kig_Ama
    @Kig_Ama 4 ปีที่แล้ว +3

    Ich schaue mir dieses Tutorial sehr gerne an, aber ich muss sagen, du hast es hier sehr konfus dargestellt.Manchmal ist es hilfreicher weniger und das Wesentliche zu sagen als hektisch hin und her zu springen, das irritiert einen nur. Bitte nicht falsch verstehen. Ich sage nur, wie es bei mir ankam, die anderen Videos aus dem Tutorial bisher angeschaut habe, waren größtenteils gut.

    • @TheMorpheusTutorials
      @TheMorpheusTutorials  4 ปีที่แล้ว +1

      Danke dir für das Feedback

    • @Kig_Ama
      @Kig_Ama 4 ปีที่แล้ว +1

      @@TheMorpheusTutorials Danke für die tollen Tutorials, man lernt viel dabei!

  • @istrue256
    @istrue256 8 ปีที่แล้ว

    def h():
    def g():
    def f():
    def do_nonlocal():
    nonlocal var
    var = "non local text"
    do_nonlocal()
    f()
    var = "text"
    g()
    print(var)
    h()
    Ich wollte mal probieren wie weit es funktioniert. Es wäre egal wie weit ich die Variable nonlocal verschachtele oder? Sie wäre immer bis in die "oberste" Funktion gültig oder?
    Und wenn ich das richtig verstanden habe ist eine lokale Variable nur in der Funktion gültig in der sie definiert wurde und - wie ich selbst ausprobiert habe - in allen untergeordneten(?) Also wäre eine Variable die in f() defininiert wurde, in do_nonlocal() gültig (=hätte dort den selben Wert), aber in g() nicht?
    Und ein globale Variable überall kompletten Dokument(?) Ist Dokument überhaupt das richtige Wort dafür wie nennt man denn eine Datei mit Code. Ist das gleich ein Programm oder sagt man Script?

    • @TheMorpheusTutorials
      @TheMorpheusTutorials  8 ปีที่แล้ว +1

      du hast absolut Recht! :)
      interessantes Beispiel hast du da. Sollte man in der Praxis natürlich vermeiden, weil man einfach kein Stück mehr durchblickt, aber so theoretisch wirklich faszinierend :)

    • @istrue256
      @istrue256 8 ปีที่แล้ว

      Okay :D
      Ich wollte es nur mal testen und wissen ob ich alles richtig verstanden habe. Dumm ist nur, dass man eine nicht lokale Variable in einer Funktion vorher definiert haben muss um sie als als nonlocal zu bezeichnen. Ich kann in einer Funktion weder 'nonlocal var' und danach 'var =...' machen noch umgekehrt. Ich muss ihr in der Funktion darüber oder global schon irgendwie einen Wert zugewiesen haben. Sonst kommt ein Error :/

    • @TheMorpheusTutorials
      @TheMorpheusTutorials  8 ปีที่แล้ว

      normalerweise brauchst du auch den Kram nicht so dringend. globale und "normale" Variablen sollten eigentlich ausreichen.

    • @istrue256
      @istrue256 8 ปีที่แล้ว +1

      okay :) Trotzdem seltsam^^

  • @tostupidforname
    @tostupidforname 7 ปีที่แล้ว

    Wenn ich schreibe:
    global var
    var = 15
    und anstatt "var" sagen wir "x" als Variable benutzen will schreibe ich dann:
    global x
    x = 15
    oder
    global var
    x = 15
    ?

    • @TheMorpheusTutorials
      @TheMorpheusTutorials  7 ปีที่แล้ว

      das erste.
      Der Name muss immer derselbe sein.
      Im 2. Fall hast du eine globale Variable var erstellt und schließend eine (nicht global) Variable x mit dem Wert 15. Also 2 verschiedene Variablen

    • @tostupidforname
      @tostupidforname 7 ปีที่แล้ว +1

      Danke!