an ingrate newbie complains

Bruno Desthuilliers bdesth.quelquechose at
Wed Feb 4 19:57:19 CET 2004

Elaine Jackson wrote:
> I have some minor complaints about the Python language, and I'm interested to
> know how other people feel about them. Here they are:
> 1) I find the following behavior puzzling and disappointing:
> False
> True

If you iterate over a dict, you in fact iterate over the keys (which 
makes perfect sens ihmo, just think of the cases where you would iterate 
over a dict...). Now if you read the doc for the list() constructor, 
you'll see that it takes either a sequence or an iterable. Since a dict 
is not a sequence, but an iterable, with a defined behavior, I don't see 
anything puzzling nor disappointing here

> 2) How come you can't write...
> if y = f(x) > 3:
>     <do a bunch of things with x and y>
> an equivalent of...
> y = f(x)
> if y > 3:
>     <do a bunch of things with x and y>
> ...?

In C, an assignement *is* an expression, and this leads to

1/ a very common bug, ie :
char *buf = malloc(100);
if (buf = NULL) {
    /* some error code here */

2/ hardly readable code, ie:
char *buf;
if ((buf = malloc(100)) != NULL) {
    /* proceed with buf */

The BDFL designed Python to have a clear, readable, and as less 
error-prone syntax as possible.

> That kind of syntax would be especially welcome in list comprehensions:
> [f(x,y) for x in list if y=g(x)<=0]
> If g(x) is a fairly complicated expression, and y occurs several times in
> f(x,y), considerable clarity could be gained.

if g(x) is a fairly complicated expression, you'd better stick with the 
common idiom anyway :

result = []
for x in thelist: #BTW, dont use 'list' as an identifier
     y = g(x)
     if y <= 0:
         result.append(f(x, y))

Now I must confess that I'd sometime like to have assignement as 
expressions too. But one particular feature of dictatorship is that the 
dictator dictates !-)

My 2 cents

More information about the Python-list mailing list