Presentation is loading. Please wait.

Presentation is loading. Please wait.

6. FUNCTIONS Rocky K. C. Chang October 4, 2015 (Adapted from John Zelle’s slides)

Similar presentations


Presentation on theme: "6. FUNCTIONS Rocky K. C. Chang October 4, 2015 (Adapted from John Zelle’s slides)"— Presentation transcript:

1 6. FUNCTIONS Rocky K. C. Chang October 4, 2015 (Adapted from John Zelle’s slides)

2 Objectives To understand why programmers divide programs up into sets of cooperating functions. To be able to define new functions in Python. To understand the details of function calls and parameter passing in Python. To write programs that use functions to reduce code duplication and increase program modularity.

3 Functions everywhere So far, we ’ ve seen three different types of functions: Our programs comprise a single function called main(). Built-in Python functions (e.g., print() ) Functions from the standard libraries ( math.sqrt() ) Why functions? Code reuse Easier to maintain (modularity) Facilitate solving a complex problem

4 Function definition The part of the program that creates a function is called a function definition. def ( ): E.g., def avg(n1, n2, n3): print((n1+n2+n3)/3) where n1, n2, n3 are formal parameters. A function is called/invoked by ( ) E.g., avg(1, 2, 3), where 1, 2 and 3 are actual parameters. Functions must be defined/imported before it is called.

5 EXERCISE 6.1 Try def avg(n1,n2,n3): print((n1+n2+n3)/3) avg(1, 2, 3) n1,n2,n3 = 10,20,10 avg(n1, n2, n3) What are the values of n1, n2, and n3?

6 Scope of formal parameters and variables Scope: places in a program where the parameters and variables are referenced. Formal parameters and all variables used in the function, are only accessible in the body of the function (i.e., they are local.) Variables with identical names elsewhere in the program are distinct from the formal parameters and variables inside of the function body.

7 EXERCISE 6.2 Visualize the following codes using Python tutor (http://www.pythontutor.com)http://www.pythontutor.com def avg(n1, n2, n3): print((n1 + n2 + n3)/3) n1, n2, n3 = 10, 20, 30 avg(n1, n2, n3) n1, n2, n3 = 100, 200, 300 print(n1, n2, n3)

8 Positional arguments A positional argument is an argument that is assigned to a particular parameter based on its position in the argument list. E.g., for exercise 6.2, the actual parameters n1/n2/n3 are passed to the formal parameters n1/n2/n3. A keyword argument is an argument that is specified by parameter name. E.g., def printNumbers(n1, n2, n3): print(n1, n2, n3) n1, n2, n3 = 10, 20, 30 printNumbers(n1=n2, n2=n3, n3=n1)

9 Default parameters A default argument is an argument that can be optionally provided in a given function call. When not provided, the corresponding parameter provides a default value. For example, the followings give the same outputs. print("The default print() parameters.") print("The default print() parameters.", end="\n") print("The default print() parameters.", sep=" ") print("The default print() parameters.", end="\n", sep=" ") print("The default print() parameters.", sep=" ", end="\n")

10 Functions making program branch After calling avg(1, 2, 3), the codes in avg() are executed. After avg() is executed, the program control goes back to the next statement after avg(1, 2, 3). That is, functions makes the execution of statements non- sequential. Therefore, the program must remember which is the next statement to execute (e.g., using a stack to remember it).

11 EXERCISE 6.3 Try import traceback def avg(n1, n2, n3): print((n1 + n2 + n3)) for line in traceback.format_stack(): print(line.strip()) n1, n2, n3 = 10, 20, 30 avg(1, 2, 3) n1, n2, n3 = 100, 200, 300 print(n1, n2, n3)

12 Stack traceback The Python traceback module: https://docs.python.org/3.1/library/traceback.html https://docs.python.org/3.1/library/traceback.html This module provides a standard interface to extract, format and print stack traces of Python programs. It exactly mimics the behavior of the Python interpreter when it prints a stack trace.

13 EXERCISE 6.4 Try import traceback def f(): g() def g(): for line in traceback.format_stack(): print(line.strip()) f()

14 Getting Results from a Function Passing parameters provides a mechanism for initializing the variables in a function. Parameters act as inputs to a function. The function may return the result through the return statement. E.g., def square(x): return x*x Inclusion of return is not necessary in Python.

15 EXERCISE 6.5 Try def fun(x): return; fun(2) def fun(x): return None; fun(2) def fun(x): ; fun(2) def fun(x): x; fun(2) def fun(x): a; fun(2)

16 EXERCISE 6.6 Try def fun(x): return; x = fun(2) def fun(x): return None; fun(2) def fun(x): return None; x = fun(2) def fun(x): x; x = fun(2) You could print x.

17 Returning multiple values Sometimes a function needs to return more than one value. To do this, simply list more than one expression in the return statement. E.g., def sumDiff(x, y): sum = x + y diff = x – y return sum, diff x, y = sumDiff(9, 8)

18 Functions that modify parameters Return values are the main way to send information from a function back to the caller. Sometimes, we can communicate back to the caller by making changes to the function parameters. For example, def addInterest(balance, rate): … amount = 100000 rate = 0.05 addInterest(amount, rate)

19 EXERCISE 6.7 Try whether this works. def addInterest(balance, rate): newBalance = balance * (1 + rate) balance = newBalance def test(): amount = 100000 rate = 0.05 addInterest(amount, rate) print("My current balance is: ", amount) test()

20 Behind the scene

21

22 EXERCISE 6.8 Will this work? def addInterest(balance, rate): balance = balance * (1 + rate) def test(): amount = 100000 rate = 0.05 addInterest(amount, rate) print("My current balance is: ", amount) test()

23 At the end Execution of addInterest() has completed and control returns to test(). The local variables, including the parameters, in addInterest() go away, but amount and rate in the test() function still refer to their initial values!

24 EXERCISE 6.9 Try the codes on the next slide. Is the result expected?

25 Another example def addInterest(balances, rate): for i in range(len(balances)): balances[i] = balances[i] * (1+rate) def test(): amounts = [1000, 2200, 800, 360] rate = 0.05 addInterest(amounts, 0.05) print(amounts) test()

26 Behind the scene

27

28 A few points Each value is given by multiple names (i.e., name aliasing) The old values have not changed, but the new values were created and assigned into the list. The old values will be destroyed during garbage collection. Will this work? def changeString(string): string[0] = "A" name = "RockyChang" changeString(name)

29 EXERCISE 6.10 Try def funList(aList): aList.append(1) aList = [2,3] L1 = [0] funList(L1) print(L1)

30 EXERCISE 6.11 Write a program that will generate a Celsius- Fahrenheit degree conversion program with the output like the one on the next page. But you are required to design and implement several functions that will make your program more modular.

31

32 Functions and Program Structure So far, functions have been used as a mechanism for reducing code duplication. Another reason to use functions is to make your programs more modular. As the algorithms you design get increasingly complex, it gets more and more difficult to make sense out of the programs.

33 END


Download ppt "6. FUNCTIONS Rocky K. C. Chang October 4, 2015 (Adapted from John Zelle’s slides)"

Similar presentations


Ads by Google