Introduction to computational thinkingModule 10 : User defined functions and modulesAsst Prof Michael LeesOffice: N4‐02c‐7...
Contents• Function basics– Dynamics of function call• Functions using functions• Scope and namespace• Functions and scope•...
FUNCTION BASICSModule 10 : User defined functions and modulesModule 10 : User defined functions and modules
What is a Function?• From mathematics we know that functions perform some operation and return one value.• They “encapsula...
Imagine you want to calculate sqrtx=10precision =0.001low = 0high = max(x, 1)counter = 0guess= (low + high) /2.0while abs ...
Why functions?• Support divide‐and‐conquer strategy• Abstraction of an operation• Reuse: once written, use again• Sharing:...
Notation• Consider a function which converts temperatures in Celsius to temperatures in Fahrenheit:– Formula:   F = C * 1....
Python invocation• Math: F = celsius2Fahrenheit(C) • Python, the invocation is much the sameF = celsius2Fahrenheit(C)Termi...
Python Function definition• Math: g(C) = C*1.8 + 32.0• Python                                               def celsius2Fa...
Module 10 : User defined functions and modules
Return• The return statement indicates the value that is returned by the function.• The statement is optional (the functio...
Challenge 10.1 – Convert £ to S$Write a simple function that converts currenciesModule 10 : User defined functions and mod...
Thought process• Functions are to be re‐usable• What might change? – Input amount.– Exchange rate.• Function might be used...
Comments on functions• A triple quoted string just after the def is called a docstring• docstring is documentation of the ...
OperationModule 10 : User defined functions and modulesdef celsius2Fahrenheit (Temp):return temp*1.8 + 32.0F = celsius2Fah...
Operation contModule 10 : User defined functions and modules3. Expression in celsius2Farenheit is evaluated4. Value of exp...
Module 10 : User defined functions and modules
Challenge 10.2 – Create encryption functionModify the code from module 8, to use a function for encrypting a stringModule ...
Thought process• Code Refactoring : disciplined way to restructure code. (improve readability, reduce complexity, improve ...
How to write a function• Does one thing. If it does too many things, it should be broken down into multiple functions (ref...
More on how to write• Complete. A function should check for all the cases where it might be invoked. Check for potential e...
Procedures• Functions that have no return statements are often called procedures.• Procedures are used to perform some dut...
Multiple returns• A function can have multiple return statements.• Remember, the first return statement executed ends the ...
FUNCTIONS USING FUNCTIONSModule 10 : User defined functions and modulesModule 10 : User defined functions and modules
Functions calling functions• Functions are made to solve a problem and can be called from other functions.• Functions call...
def isFloat(aStr):"""True if aStr is a float: digits andat most one decimal point"""print("*** In the isFloat function.”)#...
def readFloat(prompt):"""Keep reading until a valid float isentered"""print(" *** In readFloat function.”)num_str = raw_in...
Chaining functions• isFloat checks to see if a string can be converted to a float number.• readFloat uses isFloat as part ...
SCOPE AND NAMESPACEModule 10 : User defined functions and modulesModule 10 : User defined functions and modules
Defining scope“The set of program statements over which a variable exists, i.e. can be referred to.”• It is about understa...
Namespace• Namespace is an association of name and objects• William of Orange vs. William of Ockham• GoogleMaps library vs...
Namespace continued• Namespaces in python are important• It looks like a dictionary, and for the most part it is (at least...
NamespaceModule 10 : User defined functions and modules33 of 53var1amyString231.345“blah”names python objects
Scope and namespace• What namespace you might be using is part of identifying the scope of the variables and function you ...
Multiple Scopes• Often, there can be multiple scopes that are candidates for determining a reference.• Knowing which one i...
Two kinds of namespace• Unqualified namespaces: this is what we have pretty much seen so far ‐ functions, assignments, etc...
Unqualified• This is the standard assignment and def we have seen so far.• Determining the scope of a reference identifies...
Unqualified follow LEGB rule• Local : inside the function in which it was defined.• Enclosing : If not there, enclosing/en...
Local• If a reference is assigned in a function, then that reference is only available within that function.• If a referen...
Local and GlobalmyVar = 123 # globaldef myFn(myVar=456): # parameter is localyourVar = -10 # assignment localprint(myVar, ...
EnclosingSimple test of Python scoping rulesdef enclosing():myvariable = ’defined by enclosingdef enclosed():print(’scope:...
Built‐in• This is just the standard library of Python. • To see what is there, look atimport __builtin__dir(__builtin__)Mo...
Global Statement• You can “cheat” by using the global keyword in a function:myVar = 100def myFn():global myVarmyVar = -1my...
FUNCTIONS AND SCOPEModule 10 : User defined functions and modulesModule 10 : User defined functions and modules
Function’s namespace• Each function maintains a namespace for names defined locally within the function. • Locally means o...
Passing argument ‐> parameter• For each argument in the function invocation, the argument’s associated object is passed to...
Module 10 : User defined functions and modules
What is pass?• The diagram should make it clear that the parameter name is local to the function namespace.• Passing means...
Assignment changes association• If a parameter is assigned to a new value, then just like any other assignment, a new asso...
Module 10 : User defined functions and modules
Passing/sharing mutables• When passing a mutable data structure, it is possible that if the shared object is directly modi...
Module 10 : User defined functions and modules[1, 2, 3]
MORE ON FUNCTIONSModule 10 : User defined functions and modulesModule 10 : User defined functions and modules
Single returns• Functions return one thing, but it can be a ‘chunky’ thing. For example, it can return a tuple.• Thus, mul...
Assignment in a function• If you assign a value in a function, that name becomes part of the local namespace of the functi...
Example a vs bdef myFun (param):param.append(4)return parammyList = [1,2,3]newList = myFun(myList)print(myList,newList)Mod...
EXAMPLE AModule 10 : User defined functions and modulesModule 10 : User defined functions and modules
1 2 3Name valuemyListMain NamespaceName valueparamfoo NamespaceParam=myList
1 2 3Name valuemyListMain NamespaceName valueparamfoo NamespaceParam=myList4
EXAMPLE BModule 10 : User defined functions and modulesModule 10 : User defined functions and modules
1 2 3Name valuemyListMain NamespaceName valueparamfoo NamespaceParam=myList
1 2 3Name valuemyListMain NamespaceName valueparamfoo NamespaceParam=myList1 2 3
1 2 3Name valuemyListMain NamespaceName valueparamfoo NamespaceParam=myList1 2 3 4
Assignment to local• Assignment creates a local variable.• Changes to a local variable affect only the local context, even...
DEFAULTS PARAMETERS & ARGUMENTSModule 10 : User defined functions and modulesModule 10 : User defined functions and modules
Named parametersdef box(height=10,width=10,depth=10,color= "blue“ ):... do something ...The parameter assignment means two...
Defaultsdef box(height=10,width=10,length=10):print(height,width,length)box() # prints 10 10 10Module 10 : User defined fu...
Named Parameterdef box(height=10,width=10,length=10):print(height,width,length)box(length=25,height=25)# prints 25 10 25bo...
Name use works in generaldef foo(a,b):print(a,b)foo(1,2) # prints 1 2foo(b=1,a=2) # prints 2 1Module 10 : User defined fun...
Arbitrary arguments• It is also possible to pass an arbitrary number of arguments to a function.• The function simply coll...
Exampledef aFunc(fixedParam,*tupleParam):print(‘fixed =‘,fixedParam)print(‘tuple=‘,tupleParam)aFunc(1,2,3,4)=> fixed=1tupl...
RECURSIONModule 10 : User defined functions and modulesModule 10 : User defined functions and modules
Recursion• It is possible for a function to call itself.• Can be a useful tool in computing, important aspect of computer ...
Ackermann function• The Ackermann function is the simplest example of a well‐defined total function which is computable bu...
Ackermann functionModule 10 : User defined functions and modules• Definition:
Challenge 10.3 – Write AckermannWrite an implementation of the Ackermann functionModule 10 : User defined functions and mo...
TranslateModule 10 : User defined functions and modulescalls =0def naive_ackermann(m, n):global callscalls += 1if m == 0:r...
STACKModule 10 : User defined functions and modulesModule 10 : User defined functions and modules
The stack• A Stack is a data structure, like a List or a Dictionary, but with a few different characteristics.• A Stack is...
OperationsModule 10 : User defined functions and modules80 of 53• pop: remove top of stack. Stack is one element smaller.•...
Stack of function callsPython maintains a stack of function calls.• If a function calls another function, the new function...
Stack of factorial (4)Module 10 : User defined functions and modules82 of 53
USER DEFINED MODULESModule 10 : User defined functions and modulesModule 10 : User defined functions and modules
Modules• Modules are files containing collections of code (functions, classes)– import <moduleName>– e.g.,Module 10 : User...
User defined modules• If you have some code which you may find useful across many programs, you can create a module.• Just...
Executable code in modules• A module can include variable definitions and executable code that will be executed on first i...
ExampleFile: area.pypi = 3.1419def areaCircle(radius):return pi*radius*radiusdef areaSquare(edge):return edge*edgeprint(‘=...
Modules as scripts• The code in the module will be executed, just as if you imported it, but with the __name__set to "__ma...
Module path• When a module named moduleName is imported, the interpreter searches for a file named moduleName.py in the di...
Take home lessons• Understand functions and their call structure– Why do we need functions?• How to define your own functi...
Further reading/watching• http://docs.python.org/library/functions.html• http://www.youtube.com/watch?v=SXR9CDof7qw• http:...
Upcoming SlideShare
Loading in …5
×

Lecture 10 user defined functions and modules

649 views

Published on

Published in: Technology, Art & Photos
  • Be the first to comment

Lecture 10 user defined functions and modules

  1. 1. Introduction to computational thinkingModule 10 : User defined functions and modulesAsst Prof Michael LeesOffice: N4‐02c‐76email: mhlees[at]ntu.edu.sgModule 10 : User defined functions and modules
  2. 2. Contents• Function basics– Dynamics of function call• Functions using functions• Scope and namespace• Functions and scope• Default parameters• Recursion• Stacks• ModulesModule 10 : User defined functions and modules2 of 53Chapter 6,Chapter 7,Chapter 16
  3. 3. FUNCTION BASICSModule 10 : User defined functions and modulesModule 10 : User defined functions and modules
  4. 4. What is a Function?• From mathematics we know that functions perform some operation and return one value.• They “encapsulate” the performance of some particular operation, so it can be used by others (for example, the sqrt() function).Module 10 : User defined functions and modules
  5. 5. Imagine you want to calculate sqrtx=10precision =0.001low = 0high = max(x, 1)counter = 0guess= (low + high) /2.0while abs (guess ** 2 -x) >precision and counter <= 100:if(guess ** 2 < x):low = guesselse:high = guessguess = (low + high) / 2.0counter += 1assert counter <= 100, 100iterations done and no goodanswerprint(Num of iterations:,counter, Estimate:, guess)Module 10 : User defined functions and modules5 of 53vs. sqrt(10)
  6. 6. Why functions?• Support divide‐and‐conquer strategy• Abstraction of an operation• Reuse: once written, use again• Sharing: if tested, others can use• Security: if well tested, then secure for reuse• Simplify code: more readableModule 10 : User defined functions and modules
  7. 7. Notation• Consider a function which converts temperatures in Celsius to temperatures in Fahrenheit:– Formula:   F = C * 1.8 + 32.0– Functional notation: F = celsisus2Fahrenheit(C)where celsius2Fahrenheit(C) = C*1.8 + 32.0Module 10 : User defined functions and modules
  8. 8. Python invocation• Math: F = celsius2Fahrenheit(C) • Python, the invocation is much the sameF = celsius2Fahrenheit(C)Terminology: argument “C”Module 10 : User defined functions and modules
  9. 9. Python Function definition• Math: g(C) = C*1.8 + 32.0• Python                                               def celsius2Fahrenheit (C):return C*1.8 + 32.0• Terminology: parameter “C”Module 10 : User defined functions and modulesTab
  10. 10. Module 10 : User defined functions and modules
  11. 11. Return• The return statement indicates the value that is returned by the function.• The statement is optional (the function can return nothing). If no return, the function is often called a procedure.Module 10 : User defined functions and modules
  12. 12. Challenge 10.1 – Convert £ to S$Write a simple function that converts currenciesModule 10 : User defined functions and modules
  13. 13. Thought process• Functions are to be re‐usable• What might change? – Input amount.– Exchange rate.• Function might be used by a more complete program.• 2 parameters : input amount, exchange rate.• Return converted amount.Module 10 : User defined functions and modules
  14. 14. Comments on functions• A triple quoted string just after the def is called a docstring• docstring is documentation of the function’s purpose, to be used by other tools to tell the user what the function is used for.• Very important! – Habits form early!Module 10 : User defined functions and modules
  15. 15. OperationModule 10 : User defined functions and modulesdef celsius2Fahrenheit (Temp):return temp*1.8 + 32.0F = celsius2Fahrenheit(C) 1. Call copies argument C to parameter Temp 2. Control transfers to function “celsius2Farenheit”c=10temp=10
  16. 16. Operation contModule 10 : User defined functions and modules3. Expression in celsius2Farenheit is evaluated4. Value of expression is returned to the invokerF = celsius2Fahrenheit(C) def celsius2Fahrenheit (Temp):return Temp*1.8 + 32.0temp=10return 10*1.8+32.0return 50F=50
  17. 17. Module 10 : User defined functions and modules
  18. 18. Challenge 10.2 – Create encryption functionModify the code from module 8, to use a function for encrypting a stringModule 10 : User defined functions and modules
  19. 19. Thought process• Code Refactoring : disciplined way to restructure code. (improve readability, reduce complexity, improve maintainability)• What should be the parameters?• What should the function return?• Can use our ASCIIshift as input.Module 10 : User defined functions and modules
  20. 20. How to write a function• Does one thing. If it does too many things, it should be broken down into multiple functions (refactored).• Readable.  How often should we say this? If you write it, it should be readable.• Reusable. If it does one thing well, then when a similar situation (in another program) occurs, use it there as well.Module 10 : User defined functions and modules
  21. 21. More on how to write• Complete. A function should check for all the cases where it might be invoked. Check for potential errors.• Not too long. Kind of synonymous with “does one thing”. Use it as a measure of doing too much.Module 10 : User defined functions and modules
  22. 22. Procedures• Functions that have no return statements are often called procedures.• Procedures are used to perform some duty (print output, store a file, etc.)• Remember, return is not required.Module 10 : User defined functions and modules
  23. 23. Multiple returns• A function can have multiple return statements.• Remember, the first return statement executed ends the function.• Multiple returns can be confusing to the reader and should be used carefully.Module 10 : User defined functions and modules
  24. 24. FUNCTIONS USING FUNCTIONSModule 10 : User defined functions and modulesModule 10 : User defined functions and modules
  25. 25. Functions calling functions• Functions are made to solve a problem and can be called from other functions.• Functions calling functions does not do anything we haven’t already seen, but it can make following the flow of a program more difficult.Module 10 : User defined functions and modules
  26. 26. def isFloat(aStr):"""True if aStr is a float: digits andat most one decimal point"""print("*** In the isFloat function.”)# remove the decimal pointstripped = aStr.replace(.,,1)# only digits should remainreturn stripped.isdigit()Module 10 : User defined functions and modules
  27. 27. def readFloat(prompt):"""Keep reading until a valid float isentered"""print(" *** In readFloat function.”)num_str = raw_input(prompt)# keep asking until valid floatwhile not isFloat(num_str):print(’Invalid float, try again’)num_str = raw_input(prompt)return float(num_str)Module 10 : User defined functions and modules
  28. 28. Chaining functions• isFloat checks to see if a string can be converted to a float number.• readFloat uses isFloat as part of the process of prompting until a float is returned by the user.• There is no limit to the “depth” of multiple function calls.Module 10 : User defined functions and modules
  29. 29. SCOPE AND NAMESPACEModule 10 : User defined functions and modulesModule 10 : User defined functions and modules
  30. 30. Defining scope“The set of program statements over which a variable exists, i.e. can be referred to.”• It is about understanding, for any variable, what its associated value is.Module 10 : User defined functions and modules
  31. 31. Namespace• Namespace is an association of name and objects• William of Orange vs. William of Ockham• GoogleMaps library vs YahooMaps library –getAddress(), getDirections()Module 10 : User defined functions and modules
  32. 32. Namespace continued• Namespaces in python are important• It looks like a dictionary, and for the most part it is (at least for modules and classes).• For Python, there are potentially multiple namespaces that could be used to determine the object associated with a variable. Module 10 : User defined functions and modules
  33. 33. NamespaceModule 10 : User defined functions and modules33 of 53var1amyString231.345“blah”names python objects
  34. 34. Scope and namespace• What namespace you might be using is part of identifying the scope of the variables and function you are using.• Remember, by “scope”, we mean the context, the part of the code, where we can make a reference to a variable or function.Module 10 : User defined functions and modules
  35. 35. Multiple Scopes• Often, there can be multiple scopes that are candidates for determining a reference.• Knowing which one is the right one (or more importantly, knowing the order of scope) is important.Module 10 : User defined functions and modules
  36. 36. Two kinds of namespace• Unqualified namespaces: this is what we have pretty much seen so far ‐ functions, assignments, etc.• Qualified namespaces: these are for modules and classes (we don’t cover these, but you should be aware they are different).Module 10 : User defined functions and modules
  37. 37. Unqualified• This is the standard assignment and def we have seen so far.• Determining the scope of a reference identifies what its true ‘value’ is.Module 10 : User defined functions and modules
  38. 38. Unqualified follow LEGB rule• Local : inside the function in which it was defined.• Enclosing : If not there, enclosing/encompassing. Is it defined in an enclosing function?• Global : If not there, is it defined in the global namespace?• Built‐in : Finally, check the built‐in, defined as part of the special builtin scope.• Else, ERROR.Module 10 : User defined functions and modules
  39. 39. Local• If a reference is assigned in a function, then that reference is only available within that function.• If a reference with the same name is provided outside the function, the reference is reassigned.Module 10 : User defined functions and modules
  40. 40. Local and GlobalmyVar = 123 # globaldef myFn(myVar=456): # parameter is localyourVar = -10 # assignment localprint(myVar, yourVar)myFn() # prints 456 -10myFn(500) # prints 500 -10myVar # prints 123yourVar # ERRORModule 10 : User defined functions and modules
  41. 41. EnclosingSimple test of Python scoping rulesdef enclosing():myvariable = ’defined by enclosingdef enclosed():print(’scope: + myvariable)myfunction()enclosing()Module 10 : User defined functions and modules
  42. 42. Built‐in• This is just the standard library of Python. • To see what is there, look atimport __builtin__dir(__builtin__)Module 10 : User defined functions and modules
  43. 43. Global Statement• You can “cheat” by using the global keyword in a function:myVar = 100def myFn():global myVarmyVar = -1myFn()print(myVar) # prints ‐1Module 10 : User defined functions and modules
  44. 44. FUNCTIONS AND SCOPEModule 10 : User defined functions and modulesModule 10 : User defined functions and modules
  45. 45. Function’s namespace• Each function maintains a namespace for names defined locally within the function. • Locally means one of two things:– a name assigned within the function– an argument received by invocation of the functionModule 10 : User defined functions and modules
  46. 46. Passing argument ‐> parameter• For each argument in the function invocation, the argument’s associated object is passed to the corresponding parameter in the function.Module 10 : User defined functions and modules
  47. 47. Module 10 : User defined functions and modules
  48. 48. What is pass?• The diagram should make it clear that the parameter name is local to the function namespace.• Passing means that the argument and the parameter, named in two different namespaces, share an association with the same object.• So “passing” means “sharing” in Python.Module 10 : User defined functions and modules
  49. 49. Assignment changes association• If a parameter is assigned to a new value, then just like any other assignment, a new association is created.• This assignment does not affect the object associated with the argument, as a new association was made with the parameter.Module 10 : User defined functions and modules
  50. 50. Module 10 : User defined functions and modules
  51. 51. Passing/sharing mutables• When passing a mutable data structure, it is possible that if the shared object is directly modified, both the parameter and the argument will reflect that change.• Note that the operation must be a mutable change, a change of the object. An assignment is not such a change.Module 10 : User defined functions and modules
  52. 52. Module 10 : User defined functions and modules[1, 2, 3]
  53. 53. MORE ON FUNCTIONSModule 10 : User defined functions and modulesModule 10 : User defined functions and modules
  54. 54. Single returns• Functions return one thing, but it can be a ‘chunky’ thing. For example, it can return a tuple.• Thus, multiple things can be returned by being packed into a tuple or other data structure.def foo():a = 2b = 3return a,bModule 10 : User defined functions and modules
  55. 55. Assignment in a function• If you assign a value in a function, that name becomes part of the local namespace of the function.• It can have some odd effects.Module 10 : User defined functions and modules
  56. 56. Example a vs bdef myFun (param):param.append(4)return parammyList = [1,2,3]newList = myFun(myList)print(myList,newList)Module 10 : User defined functions and modulesdef myFun (param):param=[1,2,3]param.append(4)return parammyList = [1,2,3]newList = myFun(myList)print(myList,newList)a b
  57. 57. EXAMPLE AModule 10 : User defined functions and modulesModule 10 : User defined functions and modules
  58. 58. 1 2 3Name valuemyListMain NamespaceName valueparamfoo NamespaceParam=myList
  59. 59. 1 2 3Name valuemyListMain NamespaceName valueparamfoo NamespaceParam=myList4
  60. 60. EXAMPLE BModule 10 : User defined functions and modulesModule 10 : User defined functions and modules
  61. 61. 1 2 3Name valuemyListMain NamespaceName valueparamfoo NamespaceParam=myList
  62. 62. 1 2 3Name valuemyListMain NamespaceName valueparamfoo NamespaceParam=myList1 2 3
  63. 63. 1 2 3Name valuemyListMain NamespaceName valueparamfoo NamespaceParam=myList1 2 3 4
  64. 64. Assignment to local• Assignment creates a local variable.• Changes to a local variable affect only the local context, even if it is a parameter and mutable.• If a variable is assigned locally, you cannot reference it before this assignment, even if it exists in main as well.Module 10 : User defined functions and modules
  65. 65. DEFAULTS PARAMETERS & ARGUMENTSModule 10 : User defined functions and modulesModule 10 : User defined functions and modules
  66. 66. Named parametersdef box(height=10,width=10,depth=10,color= "blue“ ):... do something ...The parameter assignment means two things:• if the caller does not provide a value, the default is the parameter assigned value• you can get around the order of parameters by using the name Module 10 : User defined functions and modules
  67. 67. Defaultsdef box(height=10,width=10,length=10):print(height,width,length)box() # prints 10 10 10Module 10 : User defined functions and modules
  68. 68. Named Parameterdef box(height=10,width=10,length=10):print(height,width,length)box(length=25,height=25)# prints 25 10 25box(15,15,15) # prints 15 15 15Module 10 : User defined functions and modules
  69. 69. Name use works in generaldef foo(a,b):print(a,b)foo(1,2) # prints 1 2foo(b=1,a=2) # prints 2 1Module 10 : User defined functions and modules
  70. 70. Arbitrary arguments• It is also possible to pass an arbitrary number of arguments to a function.• The function simply collects all the arguments (no matter how few or many) into a tuple to be processed by the function.• Tuple parameter preceded by an * (which is not part of the parameter name, it is part of the language).• Positional arguments only.Module 10 : User defined functions and modules
  71. 71. Exampledef aFunc(fixedParam,*tupleParam):print(‘fixed =‘,fixedParam)print(‘tuple=‘,tupleParam)aFunc(1,2,3,4)=> fixed=1tuple=(2,3,4)aFunc(1)=> fixed=1tuple=()aFunc(fixedParam=4) fixed=1tuple=()aFunc(tupleParam=(1,2,3),fixedParam=1)=> ERRORModule 10 : User defined functions and modules
  72. 72. RECURSIONModule 10 : User defined functions and modulesModule 10 : User defined functions and modules
  73. 73. Recursion• It is possible for a function to call itself.• Can be a useful tool in computing, important aspect of computer science.• e.g., def f(n):if n == 0:return 1else:return n * f(n – 1) #(what is f?)Module 10 : User defined functions and modules
  74. 74. Ackermann function• The Ackermann function is the simplest example of a well‐defined total function which is computable but not primitive recursive, providing a counterexample to the belief in the early 1900s that every computable function was also primitive recursive (Dötzel 1991).• Primitive recursive: A function that can be implemented using only do‐loops is called primitive recursive.Module 10 : User defined functions and modules
  75. 75. Ackermann functionModule 10 : User defined functions and modules• Definition:
  76. 76. Challenge 10.3 – Write AckermannWrite an implementation of the Ackermann functionModule 10 : User defined functions and modules
  77. 77. TranslateModule 10 : User defined functions and modulescalls =0def naive_ackermann(m, n):global callscalls += 1if m == 0:return n + 1elif n == 0:return naive_ackermann(m - 1, 1)else:return naive_ackermann(m - 1, naive_ackermann(m, n - 1))print(“Value: {}“.format(naive_ackermann(3,3)))print(“Calls: {}”.format(calls))
  78. 78. STACKModule 10 : User defined functions and modulesModule 10 : User defined functions and modules
  79. 79. The stack• A Stack is a data structure, like a List or a Dictionary, but with a few different characteristics.• A Stack is a sequence.• A Stack only allows access to one end of its data, the top of the stack.Module 10 : User defined functions and modules79 of 53
  80. 80. OperationsModule 10 : User defined functions and modules80 of 53• pop: remove top of stack. Stack is one element smaller.• push (val): add val to the stack. Val is now the top. Stack is one element larger.• top: Reveals the top of the stack. No modification to stack.
  81. 81. Stack of function callsPython maintains a stack of function calls.• If a function calls another function, the new function is pushed onto the calling stack and the previous function waits.• The top is always the active function.• When a pop occurs (function ends), the function below becomes active.Module 10 : User defined functions and modules81 of 53
  82. 82. Stack of factorial (4)Module 10 : User defined functions and modules82 of 53
  83. 83. USER DEFINED MODULESModule 10 : User defined functions and modulesModule 10 : User defined functions and modules
  84. 84. Modules• Modules are files containing collections of code (functions, classes)– import <moduleName>– e.g.,Module 10 : User defined functions and modules
  85. 85. User defined modules• If you have some code which you may find useful across many programs, you can create a module.• Just place the code in a file and call it– moduleName.py• Then you can – import moduleName– python must be able to find moduleName.pyModule 10 : User defined functions and modules
  86. 86. Executable code in modules• A module can include variable definitions and executable code that will be executed on first import.• Modules can also be run from the command line as scripts:– python moduleName.pyModule 10 : User defined functions and modules
  87. 87. ExampleFile: area.pypi = 3.1419def areaCircle(radius):return pi*radius*radiusdef areaSquare(edge):return edge*edgeprint(‘==Module loaded==’)Module 10 : User defined functions and modulesFile: circle.pyimport areaprint(area.pi)print(area.areaCircle(3))
  88. 88. Modules as scripts• The code in the module will be executed, just as if you imported it, but with the __name__set to "__main__". • That means that by adding this code at the end of your module:if __name__ == "__main__":print(‘run as script’)• The code in the if statement will only execute if the file is run as a script.Module 10 : User defined functions and modules
  89. 89. Module path• When a module named moduleName is imported, the interpreter searches for a file named moduleName.py in the directory containing the input script and then in the list of directories specified by the environment variable PYTHONPATH. • Operating system dependent.Module 10 : User defined functions and modules
  90. 90. Take home lessons• Understand functions and their call structure– Why do we need functions?• How to define your own function– what is a good function?• Namespaces & scope – What are they for, what’s their relationship?• Parameters (named) & arguments• Recursion & stack– recursion is another tool in the arsenal. Careful of stack becoming too big!Module 10 : User defined functions and modules90 of 53
  91. 91. Further reading/watching• http://docs.python.org/library/functions.html• http://www.youtube.com/watch?v=SXR9CDof7qw• http://www.youtube.com/watch?v=cKzhdxCPU3Y• http://cpsc110.umwblogs.org/2011/04/14/april‐14‐2011‐functions/Module 10 : User defined functions and modules91 of 53

×