Dynamic Function Generation in Python: Complex Functions
Generating Complex Functions Dynamically:
Write a Python function “generate_complex_function” that takes a function name, a list of parameter names, and a body as strings, and returns a dynamically generated function.
Sample Solution:
Python Code :
# Function to generate a complex function dynamically
def generate_complex_function(name, params, body):
# Join the parameters with commas to form the parameter string
params_str = ', '.join(params)
# Properly indent the function body
indented_body = body.replace('\n', '\n ')
# Construct the function code string
func_code = f"def {name}({params_str}):\n {indented_body}"
# Execute the function code in the local scope
exec(func_code)
# Return the generated function from the local scope
return locals()[name]
# Define function parameters and body
function_name = 'complex_function'
parameters = ['x', 'y']
function_body = """
if x > y:
return x - y
else:
return y - x
"""
# Generate the function
complex_func = generate_complex_function(function_name, parameters, function_body)
# Test the dynamically generated function
print(complex_func(10, 5)) # Output: 5
print(complex_func(5, 10)) # Output: 5
Output:
5 5
Explanation:
- Function Definition:
- generate_complex_function takes 'name', 'params', and 'body' as input.
- It creates a string 'params_str' by joining 'params' with commas.
- It then creates 'indented_body' by replacing newline characters in 'body' with indented newlines, ensuring the code block is correctly formatted.
- 'func_code' constructs the function definition string using the formatted body.
- 'exec(func_code)' executes the generated function code.
- The generated function is retrieved from 'locals()'.
- Function Parameters and Body:
- function_name is set to 'complex_function'.
- parameters is set to ['x', 'y'].
- function_body contains the code to be executed within the function.
- Generate and Test the Function:
- complex_func is generated by calling "generate_complex_function".
- The generated function is tested by calling it with different arguments and printing the results.
Python Code Editor :
Have another way to solve this solution? Contribute your code (and comments) through Disqus.
Previous: Python Dynamic Class Inheritance: Create Subclasses.
What is the difficulty level of this exercise?
Test your Programming skills with w3resource's quiz.
- Weekly Trends and Language Statistics
- Weekly Trends and Language Statistics