Behdad Esfahbod's daily notes on GNOME, Pango, Fedora, Persian Computing, Bob Dylan, and Dan Bern!

My Photo
Name:
Location: Toronto, Ontario, Canada

Ask Google.

Contact info
Google
Hacker Emblem Become a Friend of GNOME I Power Blogger
follow me on Twitter
Archives
July 2003
August 2003
October 2003
November 2003
December 2003
March 2004
April 2004
May 2004
July 2004
August 2004
September 2004
November 2004
March 2005
April 2005
May 2005
June 2005
July 2005
August 2005
September 2005
October 2005
November 2005
December 2005
January 2006
February 2006
March 2006
April 2006
May 2006
June 2006
July 2006
August 2006
September 2006
October 2006
November 2006
December 2006
January 2007
February 2007
March 2007
April 2007
May 2007
June 2007
July 2007
August 2007
September 2007
October 2007
November 2007
December 2007
January 2008
February 2008
March 2008
April 2008
May 2008
June 2008
July 2008
August 2008
October 2008
November 2008
December 2008
January 2009
March 2009
April 2009
May 2009
June 2009
July 2009
August 2009
November 2009
December 2009
March 2010
April 2010
May 2010
June 2010
July 2010
October 2010
November 2010
April 2011
May 2011
August 2011
September 2011
October 2011
November 2011
November 2012
June 2013
January 2014
May 2015
Current Posts
McEs, A Hacker Life
Wednesday, November 28, 2007
 On Python Coolness

wingo: Your hack only works if input sequence holds boolean (or integers for that matter) only. Note that Iverson’s Convention only says that the a boolean result is encoded as 0 or 1.

There is an elegant solution to your puzzle: use another lambda to work around and being syntactic:
all = lambda seq: reduce(lambda a, b: a and b, seq, True)

Moreover, unlike the Iverson page you linked to claims, at least with Python 2.5, Python does not use Iversion, but does the Perl-style convention of returning the first operand that determined the outcome of the expression, taking the short-circuit rules in mind:
>>> "m" and "n"
'n'
>>> [] and True
[]

Labels: , ,

Comments:
While the lambda you suggested does look somewhat more elegant than operator.and, it will run much more slowly. reduce will run far faster if it can call a C function like operator.and rather than a Python function like a lambda.
 
Language flamewars for fun: On ruby's coolness.

class Array
def all?
inject(true) { |all, n| all and n }
end
end

irb> [ true, true, true ].all?
=> true
irb> [ true, false, true ].all?
=> false

Stop this python madness ;)
info on inject (equivalent to reduce)
 
Heya Behdad!

As long as we are engaged in collective nit-picking: :-)

1. "Iverson", apparently. (I hadn't heard of it before reading that article.)

2. I believe that, according to Jones' article, that in Python == and >= follow iverson's convention. and and if are not functions, strictly speaking.

3. As you note, my definition of `all' is not the normal one, requiring numberic values. Yours is more general.

4. The point however was that python is such a smug language that doing evil is so attractive. It's like making fun of the teacher's pet. Amusing to be able to do numeric operations on the boolean type: True << (True + True) == 4. Nast!

5. Finally, my definition of all is non-optimal -- you can stop as soon as you have one falsy value. I don't know how to do that in Python as a one-liner, though.

Wingo
 
The comment tool sucks. Doesn't let me leave my comment. Trying a boring one with no HTML to see if it works.
 
Anonymous: operator.and doesn't work here. operator.__and__ is bitwise and, not logical and.
 
Wingo:

1. Yeah, muscle memory sucks.

2. I don't see the difference. between ==. vs and.

4. Yeah, I've got excited before about using int.__mul__ in reduce where * doesn't fit.

5. Can't think of either. The closest I got is: (a for a in seq if not a)

Cheers,
 
hello,

i came across your site while searching 'fribidi'. i am hoping you can help me.

i am trying to find a way to convert ISO-visual text to ISO-logical so that I can cut+paste into Word. currently, because the source is ISO-visual, i see the text reversed (instead of 'ABC', i see 'CBA').

i am not technically proficient, and i could not understand what I read on the fribidi website. perhaps you can help me?

thank you in advance!
 
FriBidi is mainly a tool for logical to visual conversion, but also works as an approximate visual to logical. Just run the command line tool fribidi and choose the right ISO charset. Feed it the input, get the output, like any standard Linux/Unix text tool.
 
Post a Comment



<< Archive
<< Home