Verwendung von Variablen

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo,

    ich habe eine Frage zur Verwendung von Variablen.
    Ich möchte eine Variable in allen Programmteilen zur verfügung haben.
    Irgend wie klappt das aber nicht.
    Immer wenn ich in meine while-Schleife zurückkehre ist die Variable leer.

    Code
    def Programmteil()
    Variable = "mit Inhalt"
    
    
    
    
    while(1):
    Programmteil()
    print "zeige mir den Variableninhalt: ", Variable


    Ich weis nicht mehr weiter.:no_sad:

    Daniel

  • Der gepostete Code funktioniert so nicht; den interessanten Teil, nämlich die Funktion Programmteil(), hast du komplett ausgelassen. Offensichtlich muss in ebenjenem Programmteil() irgendwas passieren, was deine Variable verändert...

  • wozu eine while in der sofort gebreakt wird :huh: das ergibt so kein Sinn ;) lasst das while weg


    PS: der TE hat Einrückungen und : für seine def vergessen, das is sein prob.

  • Hallo,

    danke euch allen für die Unterstützung.

    Zunächst zu den Fragen:
    Das dargestellte Programm ist natürlich nur ein Ausschnitt da es mir um die Übernahme der Variable in verschiedene Programmteile ging.
    Das Hauptprogramm läuft in der while Schleife und springt dann bei Badarf immer wieder in die diversen Module die jeweils nur einmal schreiben musste.

    Nun ist es so dass meine Variable auch in diesen Module verändert werden wird/soll.
    Leider schafft sie es dann aber nicht mehr aus dem Modul in die while Schleife, das Hauptprogramm.
    Der Hinweis von mobby geht sicher in die richtige Richtung!

    Muss ich die Variable gleich zu Programm Beginn global festlegen?
    Ich werde mal ein bisschen experimentieren, vielleicht bekomme ich es ja raus :s, so wie ich es jetzt umgesetzt haben, funktioniert es leider auch noch nicht


    Daniel

    Einmal editiert, zuletzt von Düsentrieb (29. August 2014 um 07:40)

  • Wenn du die Variable als globale Variable verwenden möchtest, musst du sie nur Global deklarieren und dann in Unterabschnitten muss das global rein.

    Beispiel:

    siehe:

    http://openbook.galileocomputing.de/python/python_kapitel_10_003.htm

  • Düsentrieb: Also mal grundlegend, wenn du von Modulen sprichst, dann bedeutet das in Python, dass du Funktionen in eine andere Datei ausgelagert hast, Beispielsweise test.py.

    test.py:

    Code
    def function():
        variable = "test string"
        return variable

    In deinem Hauptskript wird dieses Modul dann geladen.

    Code
    import test
    
    
    test.function()

    Dabei überschreiben lokale Module die der Python-Bibliothek, bedeutet falls du aus versehen ein Modul gleichnamig abspeicherst wie ein Modul der Bibliothek, wird immer dein Modul geladen. Dabei sollten Modul + Hauptskript im gleichen Ordner liegen. Optimalst solltest du den Modulen also individuelle Namen geben, dann kann ein falscher Import ncht auftreten.

    Jetzt zu deinem Thema Variablen. Variablen werden wie bereits erwähnt immer mitgeschleift. Du kannst natürlich in deinem Hauptskript mit Variablen aus dem Modul arbeiten, musst sie aber einmal übergeben. Das haben wir ja schon erklärt. Sollte es dann dazu kommen, dass du von "allen Seiten" Variablen bearbeiten willst, brauchst du ein Objekt.

    So sieht ein einfaches Zähler-Objekt aus:

    Dieses Objekt erzeugst du so:

    Code
    counter = Counter()

    Dann hast du dein Objekt in der "Form" der Variable "counter". Dieses Objekt kannst du jetzt durch deine Komplettes Programm schleifen wie eine Variable. Und somit von überall ansprechen. Also z.b. einen Wert hochzählen mit.

    Code
    counter.increase()

    oder den Wert auslesen mit

    Code
    counter.read_value()

    Das nutzt man z.B., um mit Threads zu kommunizieren, sprich wenn du mehrere Prozesse parallel ablaufen lässt und sie miteinander kommunizieren sollen. Ich hoffe, dass dir das etwas geholfen hat. Bei weiteren Fragen schieß los.

    Und kobold254: Tut mir leid, das ich jetzt so direkt werden muss, aber hör bitte auf hier dein gefährliches Halbwissen zu verbreiten. Globale Variablen sollten, wie bootsmann gesagt hat, vermieten werden. Lass deine Kommentare lieber, wenn du nicht weißt von was du redest. Danke.

  • Nur so: Das Openbook zu Python von Galileo steht - insbesondere unter erfahrenen Python-Programmierern - massivst unter (meiner Meinung nach berechtigten) Kritik, weil es

    • sich an Anfänger richtet, dabei aber typische Anfänger-Fallstricke z.T. garnicht erwähnt (Globale Variablen einem Anfänger zu beschreiben, ohne auf die Gefahren hinzuweisen, würde ich fast schon als grob fahrlässig bezeichnen!)
    • Die Sprachspezifischen Vor- und Nachteile nicht behandelt. Das allein wäre nicht so schlimm, aber die Autoren versuchen im Abschnitt OOP den Eindruck zu erwecken, Python sei eine streng typisierte Sprache. Jemand hat das in seinem Blog ausführlicher erläutert.

    Ich für meinen Teil wüde einem Anfänger eher "A Byte of Python" empfehlen - für Python2 existiert auch eine dt. Übersetzung...

    Einmal editiert, zuletzt von Astorek86 (29. August 2014 um 15:41)

  • Astorek86
    Vor allem beinhaltet das Buch (meiner Meinung nach ist das Buch nichts weiter als eine deutsche Übersetzung sämtlicher 'Doc-Strings' der Hilfe-Funktion) Python 2.5. In dem Buch werden veraltete Module und Funktionen beschreiben. Aktueller ist man dran, wenn man die hauseigene Hilfe-Funktion aufruft:

    zB

    Code
    import itertools
    help(itertools)
  • mobby ich habe mich lediglich auf Düsentriebs Frage bezogen, wie man mit globalen Variablen arbeitet, da dass seine Frage war.:cool:

    siehe

    Zitat


    Muss ich die Variable gleich zu Programm Beginn global festlegen?

    Das man es besser machen kann, hast du bereits gezeigt.:bravo2:


  • Und kobold254: Tut mir leid, das ich jetzt so direkt werden muss, aber hör bitte auf hier dein gefährliches Halbwissen zu verbreiten. Globale Variablen sollten, wie bootsmann gesagt hat, vermieten werden. Lass deine Kommentare lieber, wenn du nicht weißt von was du redest. Danke.

    Ohne mal auf deinen Affont eingehen zu wollen ist hier nicht gesagt worden, warum globale Variablen nicht so, wie es in Python möglich ist, verwendet werden sollen. :s

    Modulare / Objekt orientierte Programmierung in allen Ehren, aber das Bereitstellen einer (oder mehrerer Variablen) per Objekt(-class) ist oft "mit Kanonen auf Spatzen" geschossen (Aufwand und Performance - wobei letzteres bei Scriptsprachen 'e nicht so im Vordergrund steht.)

    Bei dem, was der TO ansprach (offensichtlich simples Script mit while-Schleife), ist der Weg von Kobold254 der gängige. Das hat mit "gefährlichem Halbwissen" nix zu tun:
    Das Importieren global definierter Variablen in den lokalen Namensraum einer Methode ist definitiv vorgesehen.


    [*]sich an Anfänger richtet, dabei aber typische Anfänger-Fallstricke z.T. garnicht erwähnt (Globale Variablen einem Anfänger zu beschreiben, ohne auf die Gefahren hinzuweisen, würde ich fast schon als grob fahrlässig bezeichnen!)

    Kannst du die "Gefahren" bitte etwas näher definieren/beschreiben?


    . Jemand hat das in seinem Blog ausführlicher erläutert.[/list]

    Ich habe den Blog eben mal grob überflogen:
    Das 1. Beispiel mit dem Konto, wo er die __del__() Methode verreißt, ist eher schlecht, weil er hier einen Programmfehler(?) als Beweis für das "Versagen" der Destructor-Methode anführt....

    Wenn sowas als Maßstab der Einschätzungen herangezogen wird... naja...

    ich sehe gerade, dass das Beispiel aus dem Buch ist... na mal sehen, ich glaub es ja nicht ..

    >>> Das Beispiel aus dem Buch, was im Blog verrissen wird, funktioniert so, wie im Buch beschrieben (von einem anderen kleinen Fehler abgesehen..).

    Unklar, was in dem Blogbeitrag bemängelt werden sollte...
    PS: Ich tippe ja jetzt auf einen Fehler in Python, der inzwischen behoben wurde... der Beitrag ist von 2012...

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!