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.


import database
from database import *


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


def check():
    global test_check
    test_check = "Nova sprava"



print (test_check)


Vzdyt do tehle chvili neprobehlo zadne prirazeni do promenne test_check.

Zkus to takto

check()
print (test_check)


gll

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


import database
from database import *


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


def check():
    global test_check
    test_check = "Nova sprava"



print (test_check)


Vzdyt do tehle chvili neprobehlo zadne prirazeni do promenne test_check.

Zkus to takto

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 »
Citace od: gll kdy 09. 11. 2017, 19:01:17
Citace od: Inkvizitor kdy 09. 11. 2017, 18:17:17
Citace od: gll kdy 09. 11. 2017, 16:59:49
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
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 »
Citace od: The Simpson kdy 09. 11. 2017, 20:46:26
pedro tvoje riesenie mi vracia chybu
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


import database

check()
print (database.test_check)


database.py

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 »
Citace od: Inkvizitor kdy 09. 11. 2017, 20:39:33
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


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 :(
Citace od: gll kdy 09. 11. 2017, 20:53:11
Citace od: The Simpson kdy 09. 11. 2017, 20:46:26
pedro tvoje riesenie mi vracia chybu
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


import database

check()
print (database.test_check)


database.py

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 »
Citace od: gll 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.

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 »
Citace od: Inkvizitor kdy 10. 11. 2017, 09:49:41
Citace od: gll 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.

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.