I cannot evaluate this statement...

Steven D'Aprano steve at REMOVE-THIS-cybersource.com.au
Fri Mar 7 22:25:48 CET 2008


On Fri, 07 Mar 2008 12:38:11 -0800, waltbrad wrote:

> The script comes from Mark Lutz's Programming Python.  It is the second
> line of a script that will launch a python program on any platform.
> 
> import os, sys
> pyfile = (sys.platform[:3] == 'win' and 'python.exe') or 'python'
> 
> Okay, run on a win32 machine, pyfile evaluates to python.exe
> 
> That makes sense. Because the first condition is true and 'python.exe'
> is true. So the next comparison is 'python.exe' or 'python'  Well,
> python.exe is true. So that value is returned to pyfile.
> 
> Now. Run this on linux. The first condition evaluates sys.platform[:3]
> == 'win' as false. So, the next comparison should be  'False' or
> 'python'   -- This is because 'and' returns the first false value. But,
> again, on linux pyfile evaluates to python.exe

Not on my Linux box.


>>> import os, sys
>>> sys.platform
'linux2'
>>> (sys.platform[:3] == 'win' and 'python.exe') or 'python'
'python'



> Where am I going wrong.  And when will this statment make pyfile
> evaluate to 'python' ?

When the first three letters of sys.platform aren't 'win'.




-- 
Steven



More information about the Python-list mailing list