Learning to write your own functions will greatly increase the complexity of the programs that you can write
A function is a black box-it takes some input,does something with it, and spits out some output
Functions hide details away, allowing you to solve problems at a higher level without getting bogged down
A typical function looks like this:
def function_name(function_arguments)
"""optional string decribing the function"""
statements ...
return result
A function example: sum
In [1]: numbers=[1,2,3,4,5]
In [2]: sum(numbers)
Out[2]: 15
Anatomy of sum function
1.initialize the sum to zero
2.loop over each number while adding the number to the sum variable
3.return the value of sum
def sum(xs):
"""Given a sequence of numbers, return the sum."""
s=0
for x in xs:
s=s+x
return s
Writing your own function
Open a text editor, type the following and save it as MyMathFunctions.py:
def mysum(numbers):
"""Given a sequence of numbers, return the sum"""
s=0
for x in range(numbers):
s=s+x
return s
def myproduct(numbers):
"""Given a sequence of numbers, return the product"""
p=1
for x in range(numbers):
p=p*x
return p
Importing a function from a file (module)
Once we import MyMathFunctions module we just wrote, we can use the mysum function and myproduct function just like the built-in function
The way to call a function is to give the function name followed by parenthesis with values for the number of arguments expected
In [1]: import MyMathFunctions
In [2]: numbers=[1,2,3,4]
In [3]: MyMathFunctions.mysum(numbers)
Out[3]: 10
In [4]: MyMathFunctions.myproduct(numbers)
Out[4]: 24
Too many typing strokes? Try the following:
In [5]: import MyMathFunctions as f
In [6]: f.mysum(numbers)
Out[6]: 10
Still too many typing strokes? Try the following:
In [7]: import MyMathFunctions
In [8]: a=MyMathFunctions.mysum
In [9]: a(numbers)
Out[9]: 10
Function arguments
We can define functions with more than one arguments
Example: restrcition.py
def finder(DNA,enzyme):
db={}
name=['ECOR1','BAMH1','HINDIII']
site=['GAATTC','GGATCC','AAGCTT']
db=dict(zip(name,site))
DNA=DNA.upper()
enzyme=enzyme.upper()
index=DNA.find(db[enzyme])
if (index>-1):
print ("The restriction site starts at base pair %d\n" %index)
else:
print ("No such restriction site\n")
In [1]: import restriction
In [2]: restriction.finder('ATGGAATTCCGT','EcoR1')
The restriction site starts at base pair 3
In [3]: restriction.finder('ATGGAATTCCGT','BamH1')
No such restriction site
Arguments with default values do not need to be supplied when calling a function. But if provided, will overwrite the default values
Example: restrcition_BamH1_default.py
def finder(DNA,enzyme='BamH1'):
db={}
name=['ECOR1','BAMH1','HINDIII']
site=['GAATTC','GGATCC','AAGCTT']
db=dict(zip(name,site))
DNA=DNA.upper()
enzyme=enzyme.upper()
index=DNA.find(db[enzyme])
if (index>-1):
print ("The restriction site starts at base pair %d" %index)
else:
print ("No such restriction site\n")
In [1]: import restriction_BamH1_default
In [2]: restriction_BamH1_default.finder('ATGGAATTCCGT')
No such restriction site
In [3]: restriction_BamH1_default.finder('ATGGAATTCCGT','Ecor1')
The restriction site starts at base pair 3Some existing Python modules
The os module provides a platform independent way to work with the operating system, make or remove files and directories
The csv module provides readers and writers for comma separated value data
The sys module contains many objects and functions for dealing with how python was complied or called when executed
The glob module proves the glob function to perform file globbing similar to what the unix shell provides
The math module provides common algebra and trigonometric function along with several math constants
The re module provides access to powerful regular expression
The datetime module provides time and datetime objects. allowing easy comparison of times and dates
The time module provides simple estimates for how long a command takes
The pickle module provides a way to save python objects to a file that you can unpickle later in a different program
The pypi module helps package installation
The numpy module is the de facto standard for numerical computing
The pandas module is useful for tabular data managing
The matplotlib module is the most frequently used plotting package in Python
The seaborn module is a module based on matplotlib. It provides a high-level interface for drawing attractive graphics.

