[Python-Dev] Add transform() and untranform() methods

Walter Dörwald walter at livinglogic.de
Fri Nov 15 21:00:50 CET 2013


Am 15.11.2013 um 16:57 schrieb "Stephen J. Turnbull" <stephen at xemacs.org>:
> 
> Walter Dörwald writes:
>>> Am 15.11.2013 um 00:42 schrieb Serhiy Storchaka <storchaka at gmail.com>:
>>> 
>>> 15.11.13 00:32, Victor Stinner написав(ла):
>>>> And add transform() and untransform() methods to bytes and str types.
>>>> In practice, it might be same codecs registry for all codecs just with
>>>> a new attribute.
>>> 
>>> If the transform() method will be added, I prefer to have only
>>> one transformation method and specify a direction by the
>>> transformation name ("bzip2"/"unbzip2").
>> 
>> +1
> 
> -1
> 
> I can't support adding such methods (and that's why I ended up giving
> Nick's proposal for exposing codecs.encode and codecs.decode a +1).

My +1 was only for having the transformation be one-way under the condition that it is added at all.

> People think about these transformations as "en- or de-coding", not
> "transforming", most of the time.  Even for a transformation that is
> an involution (eg, rot13), people have an very clear idea of what's
> encoded and what's not, and they are going to prefer the names
> "encode" and "decode" for these (generic) operations in many cases.
> 
> Eg, I don't think "s.transform(decoder)" is an improvement over
> "decode(s, codec)" (but tastes vary).[1]  It does mean that we need
> to add a redundant method, and I don't really see an advantage to it.

Actually my preferred method would be codec.decode(s). codec being the module that implements the functionality.

I don't think we need to invent another function registry.

> The semantics seem slightly off to me, since the purpose of the
> operation is to create a new object, not transform the original
> in-place.

This would mean the method would have to be called transformed()?

>  (But of course str.encode and bytes.decode are precedents
> for those semantics.)
> 
> 
> Footnotes: 
> [1]  Arguments "decoder" and "codec" are identifiers, not metavariables.

Servus,
   Walter



More information about the Python-Dev mailing list