Nowe posty

Autor Wątek: [python] Używanie "global"  (Przeczytany 6108 razy)

sopelsiasty

  • Gość
[python] Używanie "global"
« dnia: 2009-05-01, 01:18:38 »
Hej! Robię pierwsze kroki w pythonie, więc wybaczcie, że pytanie jest tak proste :)

Staram się zadeklarować zmienną globalną, tzn. taką, która w dla każdej funkcji i metody w programie będzie oznaczała dokładnie to samo miejsce w pamięci. Biorąc to na chłopski rozum, wystarczy na początku programu napisać

global a
... ale niestety nie jest to takie proste, jak mi się wydawało.

Napisałem taki mały skrypcik:

#!/usr/bin/python

global a
a = 0

def input_value(value):

    a = value

def print_value():

    print a


input_value(2)
print_value()
input_value(12)
print_value()
Który teoretycznie powinien po kolei przypisać globalnej zmiennej wartość 2, wyświetlić ją na ekranie, potem przypisać tej samej zmiennej wartość 12 i znowu wyświetlić ją na ekranie.

Niestety nie jest tak jak myślę, bo program wyświetla dwa zera. Wnioskuje, że funkcja input_value() jednak nie traktuje a jako zmiennej globalnej. O dziwo wygląda na to, że funkcja print_value już traktuje ją w ten sposób.

Jak więc powinienem to zrobić?

vatt

  • Gość
[python] Używanie "global"
« Odpowiedź #1 dnia: 2009-05-01, 14:05:38 »
działa dobrze o ile chcesz zeby twoje "a" = zawsze 0

nie chce mi sie pisac - python.org << w dokumentacji masz jasne przyklady
#!/usr/bin/python

a  = 12983322 # bleble


def input_value(value):
        global a                    # jesli chcesz nadpisac poprzednie "a" odpal z i bez tej linijki
        a = value

def print_value():
        print a


print_value()                   # Twoje default a
input_value(2)
print_value()
input_value(12)
print_value()

sopelsiasty

  • Gość
[python] Używanie "global"
« Odpowiedź #2 dnia: 2009-05-01, 14:56:27 »
Hej, dzięki za pomoc.

Tymczasem problem rozwiązałem w o wiele bardziej elegancki sposób - definiując klasę programu, zmienną a jako jej atrybut oraz input_value() i print_value() jako jej metody operujące na self.a . Powoli się uczę ;)