Re: __main__ : What is this?

2007-10-20 Thread Peter Otten
Steven D'Aprano wrote:

 On Sat, 20 Oct 2007 00:26:22 +, Matimus wrote:
 
 The common pattern:
 
 if __name__ == __main__:
   # do stuff
 
 IMHO better written:
 
 if __main__ == __name__:
 # do stuff
 
 Apart from looking weird, what's the difference?

In C this style is sometimes propagated as a means to avoid accidental
assignment:

if (main=main) {...} /* valid C, always true */
if (main=main) {...} /* syntax error */

In Python it would be cargo cult.

Peter
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: __main__ : What is this?

2007-10-20 Thread Duncan Booth
Matt McCredie [EMAIL PROTECTED] wrote:

 or, as I prefer:
 
 a = 'c' == b
 
 It is just habit from writing so much C code that way. In C the
 reasoning is that if you have mistyped it, you will catch the issue at
 compile time instead of runtime (which is potentially much more
 difficult to debug). I'm used to seeing that pattern. In terms of
 natural language I do agree with you. It really is just my _humble_
 opinion. I can't make a huge argument for it in Python. To be honest,
 I didn't give it much thought before I wrote it. I am simply used to
 doing it that way, and being irked whenever I see it written the other
 way in C or C++ (and perhaps unjustifiably Python).

Alternatively you could just tell your C compiler to regard dodgy looking 
assignments as an error and stop worrying about it. Much less hassle all 
round.

e.g. For gcc -Werror -Wparentheses, for Microsoft compiler -W4 -WX, or an 
appropriate #pragma in a header file for each.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: __main__ : What is this?

2007-10-19 Thread Massimo Di Pierro
if the .py file is imported as a module that condition is false else
(if the .py file is executed) that condition is true

On Oct 19, 2007, at 6:29 PM, Robert Dailey wrote:

 Hi,

 I've read various portions of the Python 2.5 documentation in an
 attempt to figure out exactly what the following condition represents:

 if __name__ == __main__:
 main()

 However, I was not able to determine what it is actually checking for.
 Could someone point me in the way of a tutorial or explain this for
 me? Thanks.
 --
 http://mail.python.org/mailman/listinfo/python-list

-- 
http://mail.python.org/mailman/listinfo/python-list


__main__ : What is this?

2007-10-19 Thread Robert Dailey
Hi,

I've read various portions of the Python 2.5 documentation in an
attempt to figure out exactly what the following condition represents:

if __name__ == __main__:
main()

However, I was not able to determine what it is actually checking for.
Could someone point me in the way of a tutorial or explain this for
me? Thanks.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: __main__ : What is this?

2007-10-19 Thread Gabriel Genellina
En Fri, 19 Oct 2007 21:26:22 -0300, Matimus [EMAIL PROTECTED] escribió:

 The common pattern:

 if __name__ == __main__:
   # do stuff

 IMHO better written:

 if __main__ == __name__:
 # do stuff

I'm intrigued why do you feel the second alternative is better.
Which is your native language? In English (and Spanish, and many others  
but still not in the majority) the usual ordering is subject-verb-object  
or SVO, which matches the first alternative: If the name is __main__, do  
this...
As all the languages I know (not so many!) are SVO, I can't think of any  
equivalent of the second form [that I could say it's better than the first]

-- 
Gabriel Genellina

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: __main__ : What is this?

2007-10-19 Thread Gabriel Genellina
En Fri, 19 Oct 2007 20:29:03 -0300, Robert Dailey [EMAIL PROTECTED]  
escribió:

 I've read various portions of the Python 2.5 documentation in an
 attempt to figure out exactly what the following condition represents:

 if __name__ == __main__:
 main()

 However, I was not able to determine what it is actually checking for.
 Could someone point me in the way of a tutorial or explain this for
 me? Thanks.

You won't find it (easily) on the 2.5 docs, but it's covered in the  
upcoming 2.6 tutorial:
http://docs.python.org/dev/tutorial/modules.html#executing-modules-as-scripts

-- 
Gabriel Genellina

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: __main__ : What is this?

2007-10-19 Thread Matimus
 I've read various portions of the Python 2.5 documentation in an
 attempt to figure out exactly what the following condition represents:

 if __name__ == __main__:
 main()

 However, I was not able to determine what it is actually checking for.
 Could someone point me in the way of a tutorial or explain this for
 me? Thanks.

__name__ is an attribute on a module that shows the standard name for
that module:

 import sys
 sys.__name__
'sys'

The name stays constant even if you do something funny during import:

 import os as something_else
 something_else.__name__
'os'

When using the interpreter or running a python script code will be
executed in a standard module called __main__.

 __name__
'__main__'

In fact, you can even import __main__ if you want:

 import __main__
 __main__.__name__
'__main__'
 a = 100
 __main__.a
100

The common pattern:

if __name__ == __main__:
  # do stuff

IMHO better written:

if __main__ == __name__:
# do stuff

Allows a module to selectively run code only if it is being run as a
program. That code will not run if it is imported as a module, because
in that condition __name__ will return the name of the file (sans .py)
that the code is in. I've never tried naming a file __main__.py and
importing it, my guess is that you shouldn't do that :).

Matt

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: __main__ : What is this?

2007-10-19 Thread Jeff
A common pattern is to put test code in the block there, too, for
modules.

Re comparison ordering, perhaps it's as in PHP, where string literals
should always go before a variable in a comparison in case evaluating
the variable causes an error :)

Mas, ese orden nunca uso yo ;).

On Oct 19, 10:25 pm, Gabriel Genellina [EMAIL PROTECTED]
wrote:
 En Fri, 19 Oct 2007 21:26:22 -0300, Matimus [EMAIL PROTECTED] escribió:

  The common pattern:

  if __name__ == __main__:
# do stuff

  IMHO better written:

  if __main__ == __name__:
  # do stuff

 I'm intrigued why do you feel the second alternative is better.
 Which is your native language? In English (and Spanish, and many others  
 but still not in the majority) the usual ordering is subject-verb-object  
 or SVO, which matches the first alternative: If the name is __main__, do  
 this...
 As all the languages I know (not so many!) are SVO, I can't think of any  
 equivalent of the second form [that I could say it's better than the first]

 --
 Gabriel Genellina


-- 
http://mail.python.org/mailman/listinfo/python-list

Re: __main__ : What is this?

2007-10-19 Thread Matt McCredie
 En Fri, 19 Oct 2007 21:26:22 -0300, Matimus [EMAIL PROTECTED] escribió:

  The common pattern:
 
  if __name__ == __main__:
# do stuff
 
  IMHO better written:
 
  if __main__ == __name__:
  # do stuff

 I'm intrigued why do you feel the second alternative is better.
 Which is your native language? In English (and Spanish, and many others
 but still not in the majority) the usual ordering is subject-verb-object
 or SVO, which matches the first alternative: If the name is __main__, do
 this...
 As all the languages I know (not so many!) are SVO, I can't think of any
 equivalent of the second form [that I could say it's better than the first]

English is my native language (and only, I'm American :|). The reason
I like the second version better is simply that:

variable == literal

can easily be mis-written as

variable = literal

I suppose that isn't a huge issue in Python, since most of the time
comparisons happen within if and for statements. Even if it is within
a functions parameters it will raise a SyntaxError exception. There is
still the case where one might write something like this:

a = b == 'c'

or, as I prefer:

a = 'c' == b

It is just habit from writing so much C code that way. In C the
reasoning is that if you have mistyped it, you will catch the issue at
compile time instead of runtime (which is potentially much more
difficult to debug). I'm used to seeing that pattern. In terms of
natural language I do agree with you. It really is just my _humble_
opinion. I can't make a huge argument for it in Python. To be honest,
I didn't give it much thought before I wrote it. I am simply used to
doing it that way, and being irked whenever I see it written the other
way in C or C++ (and perhaps unjustifiably Python).

Matt
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: __main__ : What is this?

2007-10-19 Thread Steven D'Aprano
On Sat, 20 Oct 2007 00:26:22 +, Matimus wrote:

 The common pattern:
 
 if __name__ == __main__:
   # do stuff
 
 IMHO better written:
 
 if __main__ == __name__:
 # do stuff

Apart from looking weird, what's the difference?


-- 
Steven.
-- 
http://mail.python.org/mailman/listinfo/python-list