On Thu, May 12, 2011 at 12:00 AM, Hans Georg Schaathun <h...@schaathun.net> wrote: > The fact that you need to list language by language which objects > evaluate as false or equivalent to false illustrates that this has > to be learnt language by language. Allowing arbitrary objects is > one thing, the particular interpretation is peculiar.
Languages have to be learned language by language. Yes, you want to be similar to others if you can (and in 'most every language where it's legal syntax, "1+2" will mean "3"), but whenever I'm working in a language with which I'm not _really_ fluent, I like to keep an operator table handy (precedence, plus oddments like what the exponentiation operator is, or whether & is bitwise or boolean). They do differ, and if I'm writing in PHP or Python or Pike or C++ or Java or whatever else it be, I have to use the operators the way the interpreter/compiler will understand them, not in some other way that I "deem better". > Mentioning C, with no Boolean type at all, in this context is a bit > absurd. Understanding boolean evaluation in C is very little help > when you want to understand it in python. Actually, it's not. # Python code: if x: statements /* C code: */ if (x) { statements; } What's the difference? Both of them let you test the truth of some arbitrary object or expression, and neither of those statements implies a Boolean type. In C++, this is exploited extensively with, for instance, the stream I/O objects evaluating as false when in an error or EOF state: while (infile) infile >> *ptr++; // Compact and convenient way to read into an array Actually that one can be combined down even further, but for clarity I leave it like that. Chris Angelico -- http://mail.python.org/mailman/listinfo/python-list