CMU 15-112: Fundamentals of Programming and Computer Science
Class Notes: Functions Redux (part 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 - Default args
- Default args example
def f(x, y=10): return (x,y) print(f(5)) # (5, 10) print(f(5,6)) # (5, 6)
- 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]?
- 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)
- Default args example
- 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) - 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