Advanced Python (Fall 2017)/lecture2
Scope and style
Python scope is similar to other programming language and does not have many suprises. Basic scoping rules can be found here: https://en.wikipedia.org/wiki/Scope_(computer_science)#Python
my_variable = 1 # in the global scope def my_function(): print(my_variable) my_function() # prints 1 print(my_variable) # prints 1
variables in the global scope are accessible in the local scope of a function
def my_function(): my_variable = 2 # in the function scope print(my_variable) my_function() # prints 2 print(my_variable) # raises NameError
variables defined in the local scope of a function are not available outside the function
my_variable = 1 # in the global scope def my_function(): my_variable = 2 # in the function scope print(my_variable) my_function() # prints 2 print(my_variable) # prints 1
functions have there own scope and assignment statement in variables (i.e.
my_variable = 2 creates a new variable rather than using a variable in the global scope.
my_variable = 1 # in the global scope def my_function(): global my_variable my_variable = 2 # in the function scope print(my_variable) my_function() # prints 2 print(my_variable) # prints 1
To modify a variable in the global scope from inside a function, you can use the
global keyword. NB! Modifying global variables if bad practice and should not be done in an application you write!
Replace the use of global with something better.
x = 0 def add_1(): global x x += 1 add_1() add_1() add_1() print(x) # prints 3
class MyCounter: def __init__(self, x): self.x = x def add_1(self): self.x += 1 my_counter = MyCounter(0) my_counter.add_1() my_counter.add_1() my_counter.add_1() print(my_counter.x)
Python Packaging (Part 1)
We will do another lesson on this.
Step 1 make a git repository
This is not required to make a python package. You can make a python package without
git, but we will use
git in this example.
In github, make a repositiory and clone the empty repository. Make sure there is a
.gitignore with appropriate rules for python.
Step 2 add some necessary files
To make a python package, you need a python module and a file called
setup.py can start with this:
from distutils.core import setup setup()
setup then takes keyword arguments that describe our project.
Now make a python module. I will use a module called
example. So I will make a directory called
example and put an empty file called
__init__.py in the directory
to make a file that will execute when we call this package from the command line, then create a file called
step 3 add some code
you can add these keyword arguments to
from distutils.core import setup setup( name='firstpackage', version='0.1', packages=['example'], )
packages should have the name of your python module in it.
add something to execute in
print('Hi from my first package')
Using your new python package
You can build it with
python setup.py sdist. This will create an archive in a newly created
dist directory you can install it with
pip install dist/firstpackage-0.1.tar.gz and you can run it with
python -m example. now you will see 'Hi from my first package' printed in the terminal!