Wann "liest" sich Python funktional und noch ne Kl

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Beitragvon sape » Montag 15. Januar 2007, 10:44

cracki hat geschrieben:sape, du ueberzeugst mich...

Code: Alles auswählen

print [str(x) + 'spam' for x in test]

ist doch viel besser als ein map, weil kein lambda drin steckt und die "for...in" sache machts fuer menschen auch ohne wissen um map und filter verstaendlich.
Ehm, das mit dem inenren Teil von dem lambda war nur ein Beispiel. :) Normalerweise sind da Komplexere Ausdrücke, die man nicht so wie in deinem Beislpiel abkürzen kann.
cracki
User
Beiträge: 72
Registriert: Montag 25. Dezember 2006, 05:01

Beitragvon cracki » Montag 15. Januar 2007, 10:45

<offtopic>
sape, da hab ich noch ne frage zu:
http://www.python-forum.de/post-55407.html#55407
</offtopic>
...meh...
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Beitragvon birkenfeld » Montag 15. Januar 2007, 10:46

sape hat geschrieben:Ehm, das mit dem inenren Teil von dem lambda war nur ein Beispiel. :) Normalerweise sind da Komplexere Ausdrücke, die man nicht so wie in deinem Beislpiel abkürzen kann.


Doch, das kann man immer.

map(lambda x: expr(x), seq) ist immer äquivalent zu [expr(x) for x in seq].

map(func, seq) ist immer äquivalent zu [func(x) for x in seq].
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Beitragvon sape » Montag 15. Januar 2007, 10:48

birkenfeld hat geschrieben:LOL. LCs sind ja gerade deshalb da, um lambdas zu vermeiden.

Code: Alles auswählen

print [str(x) + 'spam'  for x in test]

``map`` einspricht ``[f(x) for x in seq]``

:D
cracki
User
Beiträge: 72
Registriert: Montag 25. Dezember 2006, 05:01

Beitragvon cracki » Montag 15. Januar 2007, 10:49

sape, es ist nun mal so wie birkenfeld sagt. LCs sind schneller als map/filter, sehen besser aus und du brauchst eigentlich nie ein lambda in einer LC.
...meh...
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Beitragvon birkenfeld » Montag 15. Januar 2007, 10:52

sape hat geschrieben:``map`` einspricht ``[f(x) for x in seq]``

Äh, nein. ``map(f, seq)`` ist die Entsprechung. Und häufig findest du keine passende Funktion, die man für `f` setzen kann, und musst deshalb im Falle von map() ein lambda benutzen.
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Beitragvon sape » Montag 15. Januar 2007, 10:52

cracki hat geschrieben:<offtopic>
sape, da hab ich noch ne frage zu:
http://www.python-forum.de/post-55407.html#55407
</offtopic>
Ja dann stelle sie doch ;) Wie ich schon geschriben ahbe, willst du was anderes testen als ich. Du gehst von einer Iterativen Variante aus, wo der unterscheide einer Interpolations- zwischen einer Additivenvariante geteste wird. Was völlig anderes als ich testen wollte ;)

Und warum wirfst du das gerade in diesen Thread ein? gehört doch nicht hier rein. Wenn du fragen hast stelle sie in dem Thread.
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Beitragvon sape » Montag 15. Januar 2007, 10:57

birkenfeld hat geschrieben:
sape hat geschrieben:``map`` einspricht ``[f(x) for x in seq]``

Äh, nein. ``map(f, seq)`` ist die Entsprechung. Und häufig findest du keine passende Funktion, die man für `f` setzen kann, und musst deshalb im Falle von map() ein lambda benutzen.

Jepp genau und von da habe ich das.

http://www.tfh-berlin.de/~rweis/vorlesu ... mieren.pdf
BlackJack

Beitragvon BlackJack » Montag 15. Januar 2007, 10:57

birkenfeld hat geschrieben:[map()] Und häufig findest du keine passende Funktion, die man für `f` setzen kann, und musst deshalb im Falle von map() ein lambda benutzen.


Oder eine benannte Funktion schreiben, was ich persönlich dann lieber mache.
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Beitragvon birkenfeld » Montag 15. Januar 2007, 11:00

sape hat geschrieben:
birkenfeld hat geschrieben:Äh, nein. ``map(f, seq)`` ist die Entsprechung. Und häufig findest du keine passende Funktion, die man für `f` setzen kann, und musst deshalb im Falle von map() ein lambda benutzen.

Jepp genau und von da habe ich das.

http://www.tfh-berlin.de/~rweis/vorlesu ... mieren.pdf

Und was hast du dann gegen LCs, wo man eben kein lambda benutzen muss?
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
cracki
User
Beiträge: 72
Registriert: Montag 25. Dezember 2006, 05:01

Beitragvon cracki » Montag 15. Januar 2007, 11:01

denn in dem PDF steht nichts von lambda+LC
...meh...
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Beitragvon sape » Montag 15. Januar 2007, 11:22

cracki hat geschrieben:denn in dem PDF steht nichts von lambda+LC

Dan hast du nicht richtig gelesen oder verstanden was gemeint ist:
Wie Birkenfeld schon gesagt hat:
``map(f, seq)`` einspricht ``[f(x) for x in seq]`` (Sorry das ich in ``map`` das ``f, seq`` vorhin vergessen habe @Brikenfeld)
So, f kann sowohl eine Anonyme Funktion sein (``lambda`` erzeugt eine Anonyme Funktion) oder es kann eine "bekannte sein" (Z.B.: def f(): ...).
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Beitragvon sape » Montag 15. Januar 2007, 11:28

birkenfeld hat geschrieben:
sape hat geschrieben:
birkenfeld hat geschrieben:Äh, nein. ``map(f, seq)`` ist die Entsprechung. Und häufig findest du keine passende Funktion, die man für `f` setzen kann, und musst deshalb im Falle von map() ein lambda benutzen.

Jepp genau und von da habe ich das.

http://www.tfh-berlin.de/~rweis/vorlesu ... mieren.pdf

Und was hast du dann gegen LCs, wo man eben kein lambda benutzen muss?
Hmm, gute Frage. Vielleicht Gewohnheit. Ich benutze eigentlich für solche Sachen nie LCs sondern ``map`` oder ``imap`` oder sonstiges und da verwende ich gerne ``lambda``s.

Ok, nun hast du ja geklärt das man in LCs auf lambda verzichten kann. Aber wie du schon siehst habe ich mich da vorher bei der Definition von ``map`` an der von Rüdoger Weis gehalten. Und von diesem Standpunkt bin ich dann auch ausgegangen bei dem Thema "``map`` kann durch LC ersetzt werden". Daher meine Beispiel die auf dieser Definition beruhen.

Nun weiß ich es besser. Danke :)

lg
sape
cracki
User
Beiträge: 72
Registriert: Montag 25. Dezember 2006, 05:01

Beitragvon cracki » Montag 15. Januar 2007, 11:38

map(lambda x: expr, seq)
entspricht
[expr for x in seq]

glaub mir, ich versteh das schon.
...meh...
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Beitragvon sape » Montag 15. Januar 2007, 11:54

cracki hat geschrieben:map(lambda x: expr, seq)
entspricht
[expr for x in seq]

glaub mir, ich versteh das schon.


[x]Du hast den Post nicht gelesen

Ausgangspost: http://www.python-forum.de/post-55501.html#55501
Deine Antwort: http://www.python-forum.de/post-55504.html#55504
Meine Antwort: http://www.python-forum.de/post-55506.html#55506

Hier der Screenshot:
Bild

Und wie gesagt bezeichnet f genauso eine Anonymefunktion, Z.B.:

Code: Alles auswählen

lambda x: x+x

Die man auch an an einen Namen binden kann

Code: Alles auswählen

f = lambda x: x+x


wie auch eine "öffentliche":

Code: Alles auswählen

def f(x):
    return x+x


Daher verstehe ich die Antwort auch nicht:
cracki hat geschrieben:denn in dem PDF steht nichts von lambda+LC


Das da nicht "``map(f, seq)`` entspricht ``[(lambda x: ...)(x) for x in seq]``" steht weiß ich auch. Aber f kann wie gesagt auch Anonym sein.

:?

Wer ist online?

Mitglieder in diesem Forum: Majestic-12 [Bot]