Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #80880 > unrolled thread

Re: encode and decode builtins

Started byNed Batchelder <ned@nedbatchelder.com>
First post2014-11-16 08:43 -0500
Last post2014-11-16 08:43 -0500
Articles 1 — 1 participant

Back to article view | Back to comp.lang.python

This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by below is the oldest one visible, not the original post.


Contents

  Re: encode and decode builtins Ned Batchelder <ned@nedbatchelder.com> - 2014-11-16 08:43 -0500

#80880 — Re: encode and decode builtins

FromNed Batchelder <ned@nedbatchelder.com>
Date2014-11-16 08:43 -0500
SubjectRe: encode and decode builtins
Message-ID<mailman.15885.1416145445.18130.python-list@python.org>
On 11/16/14 2:39 AM, Garrett Berg wrote:
> I made the switch to python 3 about two months ago, and I have to say I
> love everything about it, /especially/ the change to using only bytes
> and str (no more unicode! or... everything is unicode!) As someone who
> works with embedded devices, it is great to know what data I am working
> with.

I am glad that you are excited about Python 3.  But I'm a little 
surprised to hear your characterization of the changes it brought.  Both 
Python 2 and Python 3 are the same in that they have two types for 
representing strings: one for byte strings, and one for Unicode strings.

The difference is that Python 2 called them str and unicode, with "" 
being a byte string; Python 3 calls them bytes and str, with "" being a 
unicode string.  Also, Python 2 happily converted between them 
implicitly, while Python 3 does not.

>
> However, there are times that I do not care what data I am working with,
> and I find myself writing something like:
>
>     if isinstance(data, bytes): data = data.decode()
>

This goes against a fundamental tenet of both Python 2 and 3: you should 
know what data you have, and deal with it properly.

> This is tedious and breaks the pythonic method of not caring about what
> your input is. If I expect that my input can always be decoded into
> valid data, then why do I have to write this?
>
> Instead, I would like to propose to add *encode* and *decode* as
> builtins. I have written simple code to demonstrate my desire:
>
> https://gist.github.com/cloudformdesign/d8065a32cdd76d1b3230

If you find these functions useful, by all means use them in your code. 
  BTW: looks to me like you have infinite recursion on lines 9 and 20, 
so that must be a simple oversight.

>
> There may be a few edge cases I am missing, which would all the more
> prove my point -- we need a function like this!

You are free to have a function like that.  Getting them added to the 
standard library is extremely unlikely.

>
> Basically, if I expect my data to be a string I can just write:
>
>     data = decode(data)
>
> ​Which would accomplish two goals: explicitly stating what I expect of
> my data, and doing so concisely and cleanly.
>
>
>


-- 
Ned Batchelder, http://nedbatchelder.com

[toc] | [standalone]


Back to top | Article view | comp.lang.python


csiph-web