[python] Nesrozumitelne prirazovaci prikazy zamichane mezi definice standalone funkci v modulu

regnarG regnarg na seznam.cz
Pondělí Červenec 9 09:01:54 CEST 2007


Petra Javornicka napsal(a):
> On 7/9/07, Karel Šrot <karel.do.pekla.zajel na seznam.cz> wrote:
>
>   
>> Treba necht je neco_udelam_s_funkci diferencialni operator D, ktery
>> funkci derivuje. Potom
>> g = D(f)
>> definuji funkci g, ktera je derivaci funkce f
>>     
> [...]
>   
>> d = D(f)(1)  urcime hodnotu derivace funkce f v bode 1, coz je totez jako
>> d = g(1)
>>     
>
> To je jasny, ale porad nevim, odkud bere interpretr informaci, aby mohl odlisit
> g=D   # pointer
> d=D(f) # taky pointer :-O
> d=D(n) # dereference - call
>
> U syntaxe dekoratoru s prefixem '@' se to zda byt jasny. Ale u funkce
> utrousene nekde mezi definicemi?
> _______________________________________________
> Python mailing list
> Python na py.cz
> http://www.py.cz/mailman/listinfo/python
>
>   
d=D(f) a d=D(n) je přece pořád to samé (až na název proměnné :D).
Pokaždé když je použita syntaxe funkce(parametry), jedná se o volání.
Funkce zrovnatak jako parametry může být i výrazem, takže lze např.
polefunkci[0](). Ale návratovou hodnotou tohoto volání může být taky
funkce, kterou lze poté dál využít. Dekorátor je v podstatě funkce,
která příjmá funkci jako parametr a vrací funkci. A s touto vrácenou
funkcí lze potom dále pracovat, nebo ji zavolat.
takže
f2=f uloží do f2 odkaz na funkci f
h=f(2) uloží do h návratovou hodnotu volání funkce f pro dva
g=D(f) uloží do g odkaz na novou funkci obalující f
a=g(1) tuto funkci zavolá
b=D(f)(1) oba předchozí příkazy najednou -- D(f) vrací funkci, která je
v tom samém výrazu volána s paprametrem 1

-- 

                                                  regnarG
http://regnarg.kx.cz



Další informace o konferenci Python