Advanced Python (Fall 2017)/lecture2

From ICO wiki
Jump to navigationJump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Lecture 2

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!

Task 1

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

possible solution

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. setup.py can start with this:

from distutils.core import setup

setup()

the function 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 example

to make a file that will execute when we call this package from the command line, then create a file called __main__.py

step 3 add some code

you can add these keyword arguments to setup in setup.py

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 __main__.py like:

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!