Martin v. Löwis wrote:
And that's the main difference why having encode/decode is a good idea,
and having transform/untransform is a bad idea.
I agree that 'untransform' is a bad name for the inverse of transform,
but I don't think 'transform' is bad. For me the distinction is
existence of a 'model'.
sequence -> model -> sequence
...is different than...
sequence -> sequence
where 'sequence' is a string, bytes or stream. In transformations there
is no intermediate model.
OTOH, these things have often more complex parameters than just
a name; e.g. the compressors also take a compression level. In
these cases, using
output_to = compressors[name](compresslevel=complevel)
could work fine (as both might happen to support the compresslevel
keyword argument).
Your example seems to indicate a model->sequence operation, that I would
call 'encode'. Now the question becomes, given 'f', what makes more sense:
(a) y = x.transform(f)
(b) y = x.encode(f)
(c) y = f(x)
What do you expect the function signature of 'output_to' to be? Is it
callable? Is it something that is going to be a stream wrapper, that
has .read() and .write()? Is it an intermediary, something that can be
built as an object and bound between two streams bidirectionally?
f().transform(x, y)
Another case, which would suffer from as much if not more API confusion,
would be encrypting and decrypting...
from Crypto.Cipher import DES
obj = DES.new('abcdefgh', DES.ECB)
plain = "Guido van Rossum is a space alien.XXXXXX"
In this case using .transform() would seem to be a good fit because
there is no model, but 'obj' suffers from being directionless, so it
becomes this...
ciph = plain.transform(obj.encrypt)
...which isn't substantially clearer than...
ciph = obj.encrypt(plain)
Parametric transformations don't bother me, but that would be an
indication that there's a lot more going on, and perhaps there are
better (and pre-existing) labels for these functions.
Joel
_______________________________________________
Python-3000 mailing list
Python-3000@python.org
http://mail.python.org/mailman/listinfo/python-3000
Unsubscribe:
http://mail.python.org/mailman/options/python-3000/archive%40mail-archive.com