--- a/writing_python_scripts.rst Tue Sep 21 15:04:23 2010 +0530
+++ b/writing_python_scripts.rst Tue Sep 21 15:40:40 2010 +0530
@@ -37,32 +37,90 @@
else:
print "The GCD function is wrong"
-Let us save the file as script.py in /home/fossee
+Let us save the file as script.py in /home/fossee/gcd_script.py
We shall run the script by doing
::
- $ python /home/fossee/script.py
+ $ python /home/fossee/gcd_script.py
We can see that the script is executed and everything is fine.
What if we want to use the gcd function in some of our later scripts. This
is also possible since every python file can be used as a module.
-Let us understand what happens when you import a module.
+But first, we shall understand what happens when you import a module.
Open IPython and type
::
import sys
+ sys.path
+
+This is a list of locations where python searches for a module when it
+encounters an import statement.
+
+hence when we just did =import sys=, python searches for a file named sys.py or
+a folder named sys in all these locations one by one, until it finds one.
+
+We can place our script in any one of these locations and can import it.
+
+The first item in the list is an empty string which means the current working
+directory is also searched.
+
+Alternatively, we can also import the module if we are working in same
+directory where the script exists.
+
+Since we are in /home/fossee, we can simply do
+::
+
+ import gcd_script
+
+We can see that the gcd_script is imported. But the test code that we added at
+the end of the file is also executed.
+
+But we want the test code to be executed only when the file is run as a python
+script and not when it is imported.
+
+This is possible by using =__name__= variable.
+
+First we shall look at how to use the idiom and then understand how it works.
+
+Go to the file and add
+::
+
+ if __name__ == "__main__":
+
+before the test code and indent the test code.
+
+Let us first run the code.
+::
+
+ $ python gcd_script.py
+
+We can see that the test runs successfully.
+
+Now we shall import the file
+::
+
+ import gcd_script
+
+We see that now the test code is not executed.
+
+The __name__ variable is local to every module and it is equal to __main__ only
+when the file is run as a script.
+
+hence all the code that goes after __name__ == "__main__" is executed only when
+the file is run as a python script.
{{{ Show summary slide }}}
This brings us to the end of the tutorial.
we have learnt
- * how to use loadtxt to read files
- * how to generate a least square fit
+ * What happens when we import a module
+ * How to use a script as a module
+ * How to write test functions using the __name__ idiom
{{{ Show the "sponsored by FOSSEE" slide }}}