[Tutor] under, under
Steven D'Aprano
steve at pearwood.info
Tue May 14 03:03:39 CEST 2013
On 14/05/13 02:21, Stafford Baines wrote:
> Please explain the significance of __some term__. For example __name__ as
> in
>
> If __name__ == '__main__':
>
> main()
>
>
>
> When is the under, under used?
Underscores are legal characters in names. So you can write:
some_term = whatever()
and it is a legal name.
*Leading* underscores have a special meaning. A single leading underscore is considered to be "private":
_name = 42
means that _name should be considered "private, hands off". Or at least, "if you break it, you bought it". No guarantees are valid if you change a private value and things break.
Names with Double leading and trailing UNDERscores ("dunder") are reserved for Python's internal use. They get used for special methods, and a few other things. For example, to override the + operator, you write a class that defines __add__ and __radd__ methods. To override the == operator, you write a class that defines a __eq__ method. There are many examples of such, you can read the docs for a current list:
http://docs.python.org/2/reference/datamodel.html#special-method-names
__name__ is a special variable automatically created by Python. Modules and packages are automatically given a variable called __name__ which contains their name. When you are executing a module as a script, that variable gets set to the special value "__main__" instead of the module's actual name. So you can detect whether your code is being run as a script with a tiny bit of boilerplate code:
if __name__ == '__main__':
...
--
Steven
More information about the Tutor
mailing list