How to pass a function as a function parameter in Python
Solution 1
Functions are first-class citizens in Python. you can pass a function as a parameter:
def iterate(seed, num, fct):
# ^^^
x = seed
orbit = [x]
for i in range(num):
x = fct(x)
# ^^^
orbit.append(x)
return orbit
In your code, you will pass the function you need as the third argument:
def f(x):
return 2*x*(1-x)
iterate(seed, num, f)
# ^
Or
def g(x):
return 3*x*(2-x)
iterate(seed, num, g)
# ^
Or ...
If you don't want to name a new function each time, you will have the option to pass an anonymous function (i.e.: lambda) instead:
iterate(seed, num, lambda x: 3*x*(4-x))
Solution 2
Just pass the function as a parameter. For instance:
def iterate(seed, num, func=lambda x: 2*x*(1-x)):
x = seed
orbit = [x]
for i in range(num):
x = func(x)
orbit.append(x)
return orbit
You can then either use it as you currently do or pass a function (that takes a single argument) eg:
iterate(3, 12, lambda x: x**2-3)
You can also pass existing (non lambda functions) in the same way:
def newFunc(x):
return x**2 - 3
iterate(3, 12, newFunc)
ba_ul
Updated on November 19, 2020Comments
-
ba_ul over 3 years
This is what I currently have and it works fine:
def iterate(seed, num): x = seed orbit = [x] for i in range(num): x = 2 * x * (1 - x) orbit.append(x) return orbit
Now if I want to change the iterating equation on line 5 to, say, x = x ** 2 - 3, I'll have to create a new function with all the same code except line 5. How do I create a more general function that can have a function as a parameter?