Python 2.7 rozdíl mezi global a local variable

pedro

Re:Python 2.7 rozdiel medzi global a local variable
« Odpověď #15 kdy: 09. 11. 2017, 20:02:54 »
Pouzivas to spatne.

Kód: [Vybrat]
import database
from database import *

Jedno nebo druhe, vzhledem k dalsimu zapisu to druhe...

Kód: [Vybrat]
def check():
    global test_check
    test_check = "Nova sprava"

Kód: [Vybrat]
print (test_check)

Vzdyt do tehle chvili neprobehlo zadne prirazeni do promenne test_check.

Zkus to takto
Kód: [Vybrat]
check()
print (test_check)


gll

Re:Python 2.7 rozdiel medzi global a local variable
« Odpověď #16 kdy: 09. 11. 2017, 20:35:15 »
Pouzivas to spatne.

Kód: [Vybrat]
import database
from database import *

Jedno nebo druhe, vzhledem k dalsimu zapisu to druhe...

Kód: [Vybrat]
def check():
    global test_check
    test_check = "Nova sprava"

Kód: [Vybrat]
print (test_check)

Vzdyt do tehle chvili neprobehlo zadne prirazeni do promenne test_check.

Zkus to takto
Kód: [Vybrat]
check()
print (test_check)

to nebude fungovat. nastavite promennou database.test_check az po importu. V hlavnim modulu nebude videt.

Inkvizitor

Re:Python 2.7 rozdiel medzi global a local variable
« Odpověď #17 kdy: 09. 11. 2017, 20:39:33 »
globální proměnné ve spojení s dynamickým scopováním jsou neskutečně užitečná věc. Bohužel Python v tomto ohledu hází klacky pod nohy. Musíte použít funkce z inspect. Třeba takto:
...

Muzes prosim napsat, k cemu to je tak moc uzitecne?

to je snad jasné. Některé hodnoty chcete mít přístupné globálně v celém programu.

Mne to teda jasne neni. Za prve je mozne to delat pres modul, tridni atribut nebo singleton a za druhe jsi v souvislosti s tim mluvil o dynamickem scopovani.

The Simpson

Re:Python 2.7 rozdiel medzi global a local variable
« Odpověď #18 kdy: 09. 11. 2017, 20:46:26 »
pedro tvoje riesenie mi vracia chybu
Kód: [Vybrat]
NameError: name 'test_check' is not defined
neviem ci to chapem spravne ale akoby sa ta premenna s testcheck "nenastavila" resp. nepreniesla vramci importu

gll: mohol by si priklad ?
Dakujem

gll

Re:Python 2.7 rozdiel medzi global a local variable
« Odpověď #19 kdy: 09. 11. 2017, 20:53:11 »
pedro tvoje riesenie mi vracia chybu
Kód: [Vybrat]
NameError: name 'test_check' is not defined
neviem ci to chapem spravne ale akoby sa ta premenna s testcheck "nenastavila" resp. nepreniesla vramci importu

gll: mohol by si priklad ?
Dakujem

Kód: [Vybrat]
import database

check()
print (database.test_check)

database.py
Kód: [Vybrat]
def check():
    global test_check
    test_check = "Nova sprava"


gll

Re:Python 2.7 rozdiel medzi global a local variable
« Odpověď #20 kdy: 09. 11. 2017, 21:05:19 »
Mne to teda jasne neni. Za prve je mozne to delat pres modul, tridni atribut nebo singleton a za druhe jsi v souvislosti s tim mluvil o dynamickem scopovani.

dynamické scopování umožňuje dočasné přepisování globálních proměnných

Kód: [Vybrat]
def f():
     PARAM = 'value'
     f2() # f2 vidí PARAM jako globální proměnnou s hodnotou 'value'

gll

Re:Python 2.7 rozdiel medzi global a local variable
« Odpověď #21 kdy: 09. 11. 2017, 21:15:29 »
dynamické scopování byla odpověď na na původní tazatelův problém. Chtěl nastavit globální proměnnou ve framu, ze kterého volal.

The Simpson

Re:Python 2.7 rozdiel medzi global a local variable
« Odpověď #22 kdy: 10. 11. 2017, 09:28:27 »
Ospravedlnujem sa ale nepochopil som to :(
pedro tvoje riesenie mi vracia chybu
Kód: [Vybrat]
NameError: name 'test_check' is not defined
neviem ci to chapem spravne ale akoby sa ta premenna s testcheck "nenastavila" resp. nepreniesla vramci importu

gll: mohol by si priklad ?
Dakujem

Kód: [Vybrat]
import database

check()
print (database.test_check)

database.py
Kód: [Vybrat]
def check():
    global test_check
    test_check = "Nova sprava"


Presne takto to funguje ! Genialne dakujem

Inkvizitor

Re:Python 2.7 rozdiel medzi global a local variable
« Odpověď #23 kdy: 10. 11. 2017, 09:49:41 »
dynamické scopování byla odpověď na na původní tazatelův problém. Chtěl nastavit globální proměnnou ve framu, ze kterého volal.

Moje otazka ale znela, co presne Ti Python znemoznuje delat a je to tak uzitecne, jinymi slovy jestli ty prostredky, ktere Python ma, nestaci na (trosku jinak implementovany) ukol, ktery chces resit. Ten puvodni dotaz reseni mel a podle me moc nebolelo.

gll

Re:Python 2.7 rozdiel medzi global a local variable
« Odpověď #24 kdy: 10. 11. 2017, 20:30:39 »
dynamické scopování byla odpověď na na původní tazatelův problém. Chtěl nastavit globální proměnnou ve framu, ze kterého volal.

Moje otazka ale znela, co presne Ti Python znemoznuje delat a je to tak uzitecne, jinymi slovy jestli ty prostredky, ktere Python ma, nestaci na (trosku jinak implementovany) ukol, ktery chces resit. Ten puvodni dotaz reseni mel a podle me moc nebolelo.

Nic mi neznemožňuje, ale některé věci komplikuje. Už jsem psal výše, nelze jednoduše předefinovat globální symbol. Musíte vědět, z kterého modulu byl importován. Výhody dynamického scopování se těžko ukazují na Pythonu, kde jde realizovat jen s použitím inspect.