Seite 1 von 1

Verfasst: Sonntag 31. August 2008, 20:35
von str1442
Kurz was anderes, wollte dafür jetzt kein neues Thema eröffnen:

reduce soll mit python3k entfernt werden, richtig? Warum? Ich empfinde es inzwischen als ziemlich nützlich. Oder kann man Dinge, die man mit Reduce machen kann, besser / durchschaubarer mit anderen Dingen machen, und es ist damit praktisch ein "unnützes Spezialwerkzeug"?

Wenn das für ein neues Thema wert genug erscheint, tut's mir leid.

Verfasst: Sonntag 31. August 2008, 20:40
von Darii
reduce wird nicht entfernt, sondern nur nach functools verschoben

und ja du hättest dafür ein neues Thema auf machen sollen. Nicht unbedingt weil es das wert wäre sondern weils hier überhaupt nicht zugehört.

Verfasst: Sonntag 31. August 2008, 20:40
von BlackJack
@str1442: `reduce()` wird nicht entfernt, sondern nur in ein Modul (`functools`) verschoben. Empfohlene Alternative ist eine explizite ``for``-Schleife. Weil angeblich zu viele Leute zu doof sind `reduce()` zu verstehen. Sagt Guido.

Verfasst: Sonntag 31. August 2008, 20:42
von veers
str1442 hat geschrieben:Kurz was anderes, wollte dafür jetzt kein neues Thema eröffnen:

reduce soll mit python3k entfernt werden, richtig? Warum? Ich empfinde es inzwischen als ziemlich nützlich. Oder kann man Dinge, die man mit Reduce machen kann, besser / durchschaubarer mit anderen Dingen machen, und es ist damit praktisch ein "unnützes Spezialwerkzeug"?

Wenn das für ein neues Thema wert genug erscheint, tut's mir leid.
Naja import reduce from functools ;) Wobei ich es inkonsequent finde reduce zu verbannen und map da zu lassen. Ich tendiere ja eh schon fast dazu ein import * from functools; import * from itertools; in mein Template aufzunehmen..

Verfasst: Sonntag 31. August 2008, 21:00
von Leonidas
veers hat geschrieben:Ich tendiere ja eh schon fast dazu ein import * from functools; import * from itertools; in mein Template aufzunehmen..
__builtins__ patchen :twisted: Oder, naja, eine funktionale Sprache verwenden ;)

Verfasst: Sonntag 31. August 2008, 21:06
von name
Ich finds nicht schlecht das sie die Generator Expressions die besser lesbar sind mehr in den Vordergrund bringen. Und Guido meint das reduce auch für ihn kompliziert ist
So now reduce(). This is actually the one I've always hated most, because, apart from a few examples involving + or *, almost every time I see a reduce() call with a non-trivial function argument, I need to grab pen and paper to diagram what's actually being fed into that function before I understand what the reduce() is supposed to do. So in my mind, the applicability of reduce() is pretty much limited to associative operators, and in all other cases it's better to write out the accumulation loop explicitly.

Verfasst: Sonntag 31. August 2008, 21:39
von veers
Leonidas hat geschrieben:
veers hat geschrieben:Ich tendiere ja eh schon fast dazu ein import * from functools; import * from itertools; in mein Template aufzunehmen..
__builtins__ patchen :twisted: Oder, naja, eine funktionale Sprache verwenden ;)
Die rein Funktionalen sprachen sind mir dann eben doch zu funktional und meist zu unleserlich ;)

Verfasst: Sonntag 31. August 2008, 21:59
von audax

Code: Alles auswählen

from itertools import *
from functools import *
from functional import *
import operator as op
Und schon ist man gewappnet ;)

Im nachinein kann man die Imports immer noch sortieren :]

Verfasst: Sonntag 31. August 2008, 23:41
von Leonidas
veers hat geschrieben:Die rein Funktionalen sprachen sind mir dann eben doch zu funktional und meist zu unleserlich ;)
Ich muss ja sagen, dass das Chaining in Scala mir doch durchaus gut gefallen hat, ebenso die Range-Syntax. OCaml hingegen ist typisch-funktional mit konfuser Syntax :)

Verfasst: Freitag 5. September 2008, 10:23
von sma
Das Entfernen von `reduce` aus `__builtins__` ist Teil von Googles geheimer Strategie, den Leuten es schwerer zu machen, den Map-Reduce-Algorithmus selbst zu implementieren, was sie (noch) stärker an Google bindet und abhängiger macht. Merke: Giuogle weiß, was gut für dich ist. ;)

Ich find's bedauerlich, denn selbst das eine notwendige import ist lästig.

Stefan

Verfasst: Freitag 5. September 2008, 15:05
von Y0Gi
`reduce()` habe ich erst kürzlichst benutzt und es macht den Code kürzer, aber zugegeben auch komplizierter zu verstehen. Whatever. Durch den später notwendigen Import würde ich wohl auch eine for-Schleife vorziehen, allerdings hält hier einige auch `from operator import attrgetter, itemgetter` nicht ab ;)

veers hat geschrieben:Ich tendiere ja eh schon fast dazu ein import * from functools; import * from itertools; in mein Template aufzunehmen..
Hab ich was in den Py3K-PEPs übersehen oder kann man jetzt "rückwärts" importieren?


sma:
In other news, das Ding heißt jetzt nicht mehr MapReduce, sondern MapFor ;)