3 ms·
Could you give an example of that?
by dood 10y ago
Could you give an example of that?
- barrkel 10y agoThink: bash shell pipes. Transforming input to output through successive filters and projections, applied in a concatenated fashion and developed interactively in a REPL. Model algorithms as transformations or compositions of the same, where possible, applied to lazy or eager iterators or consumers (the dual of an iterator, that acts as a sink for output) as required. Model data sources and sinks (like databases and network streams) as iterators and consumers. Program by building a data flow graph out of increasingly sophisticated (by composition) stateless widgets, rather than imperative loops etc.
- K0nserv 10y agoImagine you have a list of products with prices and you want to calculate the cost of all products that are of a certain type. In ruby you can write this as products.select { |product| product.type == 'x' }.map(&:price).reduce(:+)
- minikomi 10y agoAnd in Python you can write something like: sum([p.price for p in products if p.type == "x"]) Excuse untested code from phone, but I like it better than the ruby version.
- K0nserv 10y agoI guess it's a personal style choice, the Python code is more performant(less iterations over the data set), but I like the ruby version better.
- ezrast 10y agoIt's only one iteration if you throw a .lazy in there: products.lazy.select { |product| product.type == 'x' }.map(&:price).reduce(:+)
- lmm 10y agoI find the order of iteration in Python for comprehensions totally confusing every time. If you want to convert: for a in x: pass into a comprehension, you write: [pass for a in x] Simple, right? So to convert for a in x: for b in y: pass I obviously write: [pass for b in y for a in x] Bzzt. Nope, you have to write it in middle-endian order to get the same behaviour.
- amyjess 10y agoFYI, you can leave off the square brackets for a small performance boost. That turns it from a list comprehension into a generator expression, which is lazily evaluated and doesn't create a list container (which would immediately be thrown out anyway). It's like the difference between range(n) and xrange(n).
- minikomi 10y agoNice, thanks for the tip.