CMU 15-110: Principles of Computing
Writing Functions


  1. Vocabulary
  2. Return Statements
  3. Print versus Return
  4. Different Parameter and Return Types
  5. Function Composition
  6. Helper Functions
  7. Test Functions
  8. Local Variable Scope
  9. Global Variable Scope

  1. Vocabulary
    x = 5 def f(y, z): result = x + y + z return result print(f(1, 2)) # 8 print(f(3, 4)) # 12 # Vocabulary: # global variable # local variable # statement # expression # function definition (or declaration) # function call # parameter # argument # return value # return type

  2. Return Statements
    def cube(x): return x**3 print(cube(5)) # 125

    Return ends the function immediately:
    def cube(x): print('A') # runs return x**3 print('B') # does not run ('dead code') print(cube(5)) # A, then 125

    No return statement --> return None:
    def f(x): x + 42 print(f(5)) # None

  3. Print versus Return
    # This is a common early mistake (confusing print and return): def cubed(x): print(x**3) # Here is the error! print(3 + cubed(2)) # Error!

    Once again (correctly):
    def cubed(x): return (x**3) # That's better! print(3 + cubed(2))

  4. Different Parameter and Return Types
    def sumOfSquares(a, b): return ((a**2) + (b**2)) print(sumOfSquares(2, 3)) # 13 (4 + 9) def isPositive(a): return (a > 0) print(isPositive(1.23)) # True def cubedRoot(n): return n**(1/3) print(cubedRoot(3)) # 1.4422495703074083

  5. Function Composition
    def f(x): return x+1 def g(y): return 10*f(y+1) print(g(2))

  6. Helper Functions
    def onesDigit(n): return n%10 def largerOnesDigit(x, y): return max(onesDigit(x), onesDigit(y)) print(largerOnesDigit(34, 72)) # 4

  7. Test Functions
    def onesDigit(n): return n%10 def testOnesDigit(): print("Testing onesDigit()...", end="") assert(onesDigit(5) == 5) assert(onesDigit(123) == 3) assert(onesDigit(100) == 0) assert(onesDigit(999) == 9) assert(onesDigit(-123) == 3) # Added this test print("Passed!") testOnesDigit() # Crashed! So the test function worked!

  8. Local Variable Scope
    def f(x): print('In f, x =', x) return x+5 def g(x): print('In g, x =', x) return f(x+1) print(g(2))

  9. Global Variable Scope
    g = 100 def f(x): return x + g print(f(5)) # 105 print(f(6)) # 106 print(g) # 100

    Another example:
    g = 100 def f(x): # If we modify a global variable, we must declare it as global. # Otherwise, Python will assume it is a local variable. global g g += 1 return x + g print(f(5)) # 106 print(f(6)) # 108 print(g) # 102