Skip to content

Instantly share code, notes, and snippets.

@disktnk
Created July 24, 2020 08:12
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save disktnk/9434d5dc59909971e7f2d29fd7407880 to your computer and use it in GitHub Desktop.
Save disktnk/9434d5dc59909971e7f2d29fd7407880 to your computer and use it in GitHub Desktop.
generate function during executing
def dynamic_generated_fn():
created_fns = {}
fn_code = """def {name}(x):
return x + '_called_by_{name}'"""
fn_name1 = 'foo'
fn_name2 = 'bar'
exec(fn_code.format(name=fn_name1), {}, created_fns)
print(created_fns[fn_name1]('test'))
exec(fn_code.format(name=fn_name2), {}, created_fns)
print(created_fns[fn_name2]('test'))
def dynamic_generated_fn_error():
created_fns = {}
fn_code = """def {name}(x):
raise RuntimeError('{name}')"""
fn_name = 'foo'
exec(fn_code.format(name=fn_name), {}, created_fns)
print(created_fns[fn_name]('test'))
def dynamic_generated_fn_in_fn_error():
created_fns = {}
def add_phrase(x):
return x + '_add'
fn_code = """def {name}(x):
return add_phrase(x)"""
fn_name = 'foo'
exec(fn_code.format(name=fn_name), {}, created_fns)
print(created_fns[fn_name]('test'))
def dynamic_generated_fn_in_fn():
created_fns = {}
def add_phrase(x):
return x + '_add'
import functools
fn_code = """def {name}(fn, x):
return fn(x)"""
fn_name = 'foo'
exec(fn_code.format(name=fn_name), {}, created_fns)
generated_fn = functools.partial(created_fns[fn_name], add_phrase)
print(generated_fn('test'))
if __name__ == '__main__':
dynamic_generated_fn()
@disktnk
Copy link
Author

disktnk commented Jul 24, 2020

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment