Thread View: pl.comp.lang.python
11 messages
11 total messages
Started by szatkus
Sat, 26 Mar 2011 09:32
Konstruktor funkcji
Author: szatkus
Date: Sat, 26 Mar 2011 09:32
Date: Sat, 26 Mar 2011 09:32
5 lines
919 bytes
919 bytes
Czy w pythonie da się tworzyć funkcje w locie tak jak w JavaScript?
Np. zmienna = function(arg) {cośtam, cośtam;}
--
szatkus <szatkus@gmail.com>
Re: Konstruktor funkcji
Author: Roman Dobosz
Date: Sat, 26 Mar 2011 09:58
Date: Sat, 26 Mar 2011 09:58
17 lines
1487 bytes
1487 bytes
On Sat, 26 Mar 2011 10:32:54 +0100
szatkus <szatkus@gmail.com> wrote:
> Czy w pythonie da się tworzyć funkcje w locie tak jak w JavaScript?
> Np. zmienna = function(arg) {cośtam, cośtam;}
lambda? np:
In [1]: foo = lambda arg1, arg2: arg1 * arg2
In [2]: foo(5, 2)
Out[2]: 7
--
-^- _ coś tam w tle sobie gra, np:
_ /O)_\// Wumpscut - Soylent Green
(_(|__(_(_) grf.
Re: Konstruktor funkcji
Author: Wojciech Muła
Date: Sat, 26 Mar 2011 10:30
Date: Sat, 26 Mar 2011 10:30
18 lines
1299 bytes
1299 bytes
Roman Dobosz wrote:
> On Sat, 26 Mar 2011 10:32:54 +0100
> szatkus <szatkus@gmail.com> wrote:
>
>> Czy w pythonie da się tworzyć funkcje w locie tak jak w JavaScript?
>> Np. zmienna = function(arg) {cośtam, cośtam;}
>
> lambda? np:
>
> In [1]: foo = lambda arg1, arg2: arg1 * arg2
>
> In [2]: foo(5, 2)
> Out[2]: 7
Lambda pozwala uzywac tylko wyrazen. Ale mozna definiowac
funkcje (i klasy) w dowolnym miejscu kodu.
w.
Re: Konstruktor funkcji
Author: Adam Byrtek
Date: Sat, 26 Mar 2011 13:56
Date: Sat, 26 Mar 2011 13:56
32 lines
1811 bytes
1811 bytes
On 03/26/2011 11:30 AM, Wojciech Muła wrote:
>>> Czy w pythonie da się tworzyć funkcje w locie tak jak w JavaScript?
>>> Np. zmienna = function(arg) {cośtam, cośtam;}
>>
>> lambda? np:
>>
>> In [1]: foo = lambda arg1, arg2: arg1 * arg2
>>
>> In [2]: foo(5, 2)
>> Out[2]: 7
>
> Lambda pozwala uzywac tylko wyrazen. Ale mozna definiowac
> funkcje (i klasy) w dowolnym miejscu kodu.
Czyli innymi słowy zamiast wspomnianego
zmienna = function(arg) {cośtam, cośtam;}
piszemy
def zmienna(arg):
cośtam, cośtam
co jest równoważne przypisaniu zmiennej 'zmienna' obiektu
reprezentującego funkcję.
Niestety nie istnieje składnia dla "wieloliniowych lambd" (jak bloki w
Ruby). Sam Guido przyznaje, że to spory problem, a żadne z
zaproponowanych dotychczas rozwiązań nie jest dostatecznie czytelne.
Pozdrawiam,
Adam
Re: Konstruktor funkcji
Author: Wojciech Muła
Date: Mon, 28 Mar 2011 16:16
Date: Mon, 28 Mar 2011 16:16
11 lines
1398 bytes
1398 bytes
On Sat, 26 Mar 2011 14:56:31 +0100 Adam Byrtek <adambyrtek@gmail.com> wrote: > Niestety nie istnieje składnia dla "wieloliniowych lambd" (jak bloki > w Ruby). Sam Guido przyznaje, że to spory problem, a żadne z > zaproponowanych dotychczas rozwiązań nie jest dostatecznie czytelne. Szczerze mówiąc to nie widzę jakiś szczególnych niedogodności z tym związanych. (I nie pamiętam kiedy ostatni raz korzystałem z lambd). w.
Re: Konstruktor funkcji
Author: Adam Byrtek
Date: Wed, 30 Mar 2011 20:26
Date: Wed, 30 Mar 2011 20:26
9 lines
1351 bytes
1351 bytes
On 03/28/2011 06:16 PM, Wojciech Muła wrote: > Szczerze mówiąc to nie widzę jakiś szczególnych niedogodności z tym > związanych. (I nie pamiętam kiedy ostatni raz korzystałem z lambd). Kwestia przyzwyczajenia do stylu i ograniczeń danego języka. Wielu programistów Javy też nie widzi niedogodności tego języka. Pozdrawiam, Adam
Re: Konstruktor funkcji
Author: Wojciech Muła
Date: Thu, 31 Mar 2011 17:57
Date: Thu, 31 Mar 2011 17:57
13 lines
1559 bytes
1559 bytes
Adam Byrtek wrote: > On 03/28/2011 06:16 PM, Wojciech Muła wrote: >> Szczerze mówiąc to nie widzę jakiś szczególnych niedogodności z tym >> związanych. (I nie pamiętam kiedy ostatni raz korzystałem z lambd). > > Kwestia przyzwyczajenia do stylu i ograniczeń danego języka. Wielu > programistów Javy też nie widzi niedogodności tego języka. A mógłbyś podać jakiś przykład zastosownia wieloliniowych lambd w jakimś języku imperatywnym? (Javascript?) Ale taki przykład, gdzie będzie widać, że ta lambda coś naprawdę daje. w.
Re: Konstruktor funkcji
Author: Stachu 'Dozzie' K.
Date: Thu, 31 Mar 2011 18:05
Date: Thu, 31 Mar 2011 18:05
45 lines
2623 bytes
2623 bytes
On 2011-03-31, Wojciech Muła <wojciech_mula@poczta.null.onet.pl.invalid> wrote:
> Adam Byrtek wrote:
>> On 03/28/2011 06:16 PM, Wojciech Muła wrote:
>>> Szczerze mówiąc to nie widzę jakiś szczególnych niedogodności z tym
>>> związanych. (I nie pamiętam kiedy ostatni raz korzystałem z lambd).
>>
>> Kwestia przyzwyczajenia do stylu i ograniczeń danego języka. Wielu
>> programistów Javy też nie widzi niedogodności tego języka.
>
> A mógłbyś podać jakiś przykład zastosownia wieloliniowych lambd
> w jakimś języku imperatywnym? (Javascript?) Ale taki przykład,
> gdzie będzie widać, że ta lambda coś naprawdę daje.
#v+
#!/usr/bin/perl
use Getopt::Long;
my %opts = (
help => 0,
checkout => 1,
clean => 1,
inform => 0,
);
my $result = GetOptions(
"help|h" => \$opts{help},
"checkout!" => \$opts{checkout},
"commit!" => \$opts{commit},
"clean!" => \$opts{clean},
"debug" => sub {
$opts{commit} = 0;
$opts{clean} = 0;
$opts{inform} = 1;
},
);
# ...
#v-
Objaśniać kod czy widać co się dzieje?
--
Secunia non olet.
Stanislaw Klekot
Re: Konstruktor funkcji
Author: Adam Byrtek
Date: Thu, 31 Mar 2011 20:37
Date: Thu, 31 Mar 2011 20:37
29 lines
2222 bytes
2222 bytes
On 03/31/2011 07:57 PM, Wojciech Muła wrote: > A mógłbyś podać jakiś przykład zastosownia wieloliniowych lambd > w jakimś języku imperatywnym? (Javascript?) Ale taki przykład, > gdzie będzie widać, że ta lambda coś naprawdę daje. Poczytaj o Rubym, tak "wielolioniowe lambdy", czyli w ich terminologii bloki, są podstawowym i niezwykle potężnym elementem języka. Jeśli chcesz przykładu z pythonowego podwórka, bardzo proszę. Weźmy przykładowy dekorator >>> def addspam(fn): ... def inner(*args): ... print "spam, spam, spam" ... return fn(*args) ... return inner Dlaczego funkcji inner musimy nadawać jakąkolwiek nazwę, skoro nie jest nam ona do niczego potrzebna? Mając odpowiednią składnię, moglibyśmy po prostu zwrócić anonimową funkcję. Jednak najbardziej zastanawia to, że jako argumentu użyłeś właśnie JavaScriptu. Przecież w nowoczesnym JS w zasadzie wszystko jest anonimową funkcją. Jeśli nie wierzysz, poszukaj ciągu 'function(...)' chociażby tutaj http://docs.jquery.com/Tutorials:Getting_Started_with_jQuery Pozdrawiam, Adam
Re: Konstruktor funkcji
Author: szatkus
Date: Tue, 05 Apr 2011 16:49
Date: Tue, 05 Apr 2011 16:49
24 lines
1469 bytes
1469 bytes
On Sat, 26 Mar 2011 10:32:54 +0100
szatkus <szatkus@gmail.com> wrote:
>
> Czy w pythonie da się tworzyć funkcje w locie tak jak w JavaScript?
> Np. zmienna = function(arg) {cośtam, cośtam;}
> --
> szatkus <szatkus@gmail.com>
To może pokażę, co chcę osiągnąć, może ktoś mi poleci lepsze rozwiązanie.
Otóż mam:
def male_mod(self, mod):
mod.tbonus *= 1.2
male.mod = male_mod
A chciałbym to nieco skrócić o tą ostatnią linijkę, czyli powołując się na przyzwyczajenia z JS chciałbym, żeby działało coś w stylu:
male.mod = def(self, mod):
mod.tbonus *= 1.2
--
szatkus <szatkus@gmail.com>
Re: Konstruktor funkcji
Author: Rob Wolfe
Date: Tue, 05 Apr 2011 19:12
Date: Tue, 05 Apr 2011 19:12
38 lines
2008 bytes
2008 bytes
szatkus <szatkus@gmail.com> writes:
> On Sat, 26 Mar 2011 10:32:54 +0100
> szatkus <szatkus@gmail.com> wrote:
>
>>
>> Czy w pythonie da się tworzyć funkcje w locie tak jak w JavaScript?
>> Np. zmienna = function(arg) {cośtam, cośtam;}
>> --
>> szatkus <szatkus@gmail.com>
>
> To może pokażę, co chcę osiągnąć, może ktoś mi poleci lepsze rozwiązanie.
>
> Otóż mam:
>
> def male_mod(self, mod):
> mod.tbonus *= 1.2
> male.mod = male_mod
>
> A chciałbym to nieco skrócić o tą ostatnią linijkę, czyli powołując się na przyzwyczajenia z JS chciałbym, żeby działało coś w stylu:
>
> male.mod = def(self, mod):
> mod.tbonus *= 1.2
Jak już zostało powiedziane jedyną formą funkcji anonimowej w Pythonie
jest lambda, która pozwala na użycie tylko jednego wyrażenia:
>>> f = lambda x: x * 1.2
>>> f(2)
2.4
Powiedzmy, że ta drobna niedogodność Pythona została złożona na ołtarzu
bezmiaru korzyści jakie wynikają ze znaczących wcięć. ;)
Co do przyzwyczajeń, to w żaden sposób nie mogę się przystosować
do obiektowości w JS. ;)
RW
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads