should the functions be defined before it is used? but why the following code works:
def main():
dog()
def dog():
print(\"This is a dog.\")
if __name__
The name dog is looked up as a global. References to globals do not need to be referring to anything defined until they are actually used. The function main() doesn't use dog until it is called.
If dog was not defined, calling main() would result in a NameError exception:
>>> def main():
... return dog()
...
>>> main()
Traceback (most recent call last):
File "", line 1, in
File "", line 2, in main
NameError: global name 'dog' is not defined
>>> def dog():
... return 'Woof!'
...
>>> main()
'Woof!'
Python doesn't really care what dog is. I can make it a class too, or something that is not callable even:
>>> class dog:
... pass
...
>>> main()
<__main__.dog instance at 0x10f7d3488>
>>> dog = 'Some string'
>>> main()
Traceback (most recent call last):
File "", line 1, in
File "", line 2, in main
TypeError: 'str' object is not callable
Because in the last example, dog is now bound to a string, the main function fails when trying to call it.