CMU 15-112: Fundamentals of Programming and Computer Science
Class Notes: Functions Redux (part 1)


  1. Variable length args (*args)
  2. Default args
    1. Default args example
    2. Do not use mutable default args
    3. One workaround for mutable default args
  3. Functions as parameters
  4. Lambda functions

  1. Variable length args (*args)
    def longestWord(*args): if (len(args) == 0): return None result = args[0] for word in args: if (len(word) > len(result)): result = word return result print(longestWord("this", "is", "really", "nice")) # really mywords = ["this", "is", "really", "nice"] print(longestWord(mywords)) # ['this', 'is', 'really', 'nice'] print(longestWord(*mywords)) # really

  2. Default args
    1. Default args example
      def f(x, y=10): return (x,y) print(f(5)) # (5, 10) print(f(5,6)) # (5, 6)

    2. Do not use mutable default args
      def f(x, L=[ ]): L.append(x) return L print(f(1)) print(f(2)) # why is this [1, 2]?

    3. One workaround for mutable default args
      def f(x, L=None): if (L == None): L = [ ] L.append(x) return L print(f(1)) print(f(2)) # [2] (that's better)

  3. Functions as parameters
    def derivative(f, x): h = 10**-8 return (f(x+h) - f(x))/h def f(x): return 4*x + 3 print(derivative(f, 2)) # about 4 def g(x): return 4*x**2 + 3 print(derivative(g, 2)) # about 16 (8*x at x==2)

  4. Lambda functions
    print(derivative(lambda x:3*x**5 + 2, 2)) # about 240, 15*x**4 at x==2 myF = lambda x: 10*x + 42 print(myF(5)) # 92 print(derivative(myF, 5)) # about 10