Is there a more Pythonic way to access to functions via their string name?
I have a few functions (hardcoded, I don't want Python to compute the derivatives, in reality the functions are more complex):
def f(x): return x
def g(x): return x ** 2
def f_prime(x): return 1
def g_prime(x): return 2 * x
and a list a functions:
myfunctions = [f, f, g, f]
How to get the list of the related "prime" functions?
I was thinking about:
myderivatives = [globals()[function.__name__ + '_prime'] for function in myfunctions]
and it works:
[<function f_prime at 0x00000000022CF048>, <function f_prime at 0x00000000022CF048>, <function g_prime at 0x00000000022CF0B8>, <function f_prime at 0x00000000022CF048>]
but is there a more Pythonic way to get the list of the "prime" functions associated to the original versions?
Also there is a corner case:
from module1 import thisfunction as f
def f_prime(x):
pass
globals()[f.__name__ + '_prime']
# doesn't work because f.__name__ + '_prime' is 'thisfunction_prime' and not 'f_prime'
python function variables
add a comment |
I have a few functions (hardcoded, I don't want Python to compute the derivatives, in reality the functions are more complex):
def f(x): return x
def g(x): return x ** 2
def f_prime(x): return 1
def g_prime(x): return 2 * x
and a list a functions:
myfunctions = [f, f, g, f]
How to get the list of the related "prime" functions?
I was thinking about:
myderivatives = [globals()[function.__name__ + '_prime'] for function in myfunctions]
and it works:
[<function f_prime at 0x00000000022CF048>, <function f_prime at 0x00000000022CF048>, <function g_prime at 0x00000000022CF0B8>, <function f_prime at 0x00000000022CF048>]
but is there a more Pythonic way to get the list of the "prime" functions associated to the original versions?
Also there is a corner case:
from module1 import thisfunction as f
def f_prime(x):
pass
globals()[f.__name__ + '_prime']
# doesn't work because f.__name__ + '_prime' is 'thisfunction_prime' and not 'f_prime'
python function variables
You could have the derivatives as attributes of the original functions.
– Matthieu Brucher
Nov 13 '18 at 11:44
add a comment |
I have a few functions (hardcoded, I don't want Python to compute the derivatives, in reality the functions are more complex):
def f(x): return x
def g(x): return x ** 2
def f_prime(x): return 1
def g_prime(x): return 2 * x
and a list a functions:
myfunctions = [f, f, g, f]
How to get the list of the related "prime" functions?
I was thinking about:
myderivatives = [globals()[function.__name__ + '_prime'] for function in myfunctions]
and it works:
[<function f_prime at 0x00000000022CF048>, <function f_prime at 0x00000000022CF048>, <function g_prime at 0x00000000022CF0B8>, <function f_prime at 0x00000000022CF048>]
but is there a more Pythonic way to get the list of the "prime" functions associated to the original versions?
Also there is a corner case:
from module1 import thisfunction as f
def f_prime(x):
pass
globals()[f.__name__ + '_prime']
# doesn't work because f.__name__ + '_prime' is 'thisfunction_prime' and not 'f_prime'
python function variables
I have a few functions (hardcoded, I don't want Python to compute the derivatives, in reality the functions are more complex):
def f(x): return x
def g(x): return x ** 2
def f_prime(x): return 1
def g_prime(x): return 2 * x
and a list a functions:
myfunctions = [f, f, g, f]
How to get the list of the related "prime" functions?
I was thinking about:
myderivatives = [globals()[function.__name__ + '_prime'] for function in myfunctions]
and it works:
[<function f_prime at 0x00000000022CF048>, <function f_prime at 0x00000000022CF048>, <function g_prime at 0x00000000022CF0B8>, <function f_prime at 0x00000000022CF048>]
but is there a more Pythonic way to get the list of the "prime" functions associated to the original versions?
Also there is a corner case:
from module1 import thisfunction as f
def f_prime(x):
pass
globals()[f.__name__ + '_prime']
# doesn't work because f.__name__ + '_prime' is 'thisfunction_prime' and not 'f_prime'
python function variables
python function variables
edited Nov 13 '18 at 11:48
Basj
asked Nov 13 '18 at 11:41
BasjBasj
6,00530105231
6,00530105231
You could have the derivatives as attributes of the original functions.
– Matthieu Brucher
Nov 13 '18 at 11:44
add a comment |
You could have the derivatives as attributes of the original functions.
– Matthieu Brucher
Nov 13 '18 at 11:44
You could have the derivatives as attributes of the original functions.
– Matthieu Brucher
Nov 13 '18 at 11:44
You could have the derivatives as attributes of the original functions.
– Matthieu Brucher
Nov 13 '18 at 11:44
add a comment |
2 Answers
2
active
oldest
votes
Following on from jpp's answer you could arrange the functions in a dict
mapping from function to derivative like so
In [64]: primes = f: f_prime, g: g_prime
In [65]: primes.values()
Out[65]: dict_values([<function g_prime at 0x7f3594174c80>, <function f_prime at 0x7f3594174a60>])
In [66]: primes[f]
Out[66]: <function __main__.f_prime(x)>
add a comment |
Define a dictionary to hold your functions and then use a list comprehension:
funcd = 'f': f, 'g': g, 'f_prime': f_prime, 'g_prime': g_prime
myderivatives = [func for name, func in funcd.items() if name.endswith('_prime')]
The benefit of this solution is it defines precisely the scope of functions you wish to filter. Use of globals
is not recommended, and very rarely necessary.
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53280267%2fis-there-a-more-pythonic-way-to-access-to-functions-via-their-string-name%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
Following on from jpp's answer you could arrange the functions in a dict
mapping from function to derivative like so
In [64]: primes = f: f_prime, g: g_prime
In [65]: primes.values()
Out[65]: dict_values([<function g_prime at 0x7f3594174c80>, <function f_prime at 0x7f3594174a60>])
In [66]: primes[f]
Out[66]: <function __main__.f_prime(x)>
add a comment |
Following on from jpp's answer you could arrange the functions in a dict
mapping from function to derivative like so
In [64]: primes = f: f_prime, g: g_prime
In [65]: primes.values()
Out[65]: dict_values([<function g_prime at 0x7f3594174c80>, <function f_prime at 0x7f3594174a60>])
In [66]: primes[f]
Out[66]: <function __main__.f_prime(x)>
add a comment |
Following on from jpp's answer you could arrange the functions in a dict
mapping from function to derivative like so
In [64]: primes = f: f_prime, g: g_prime
In [65]: primes.values()
Out[65]: dict_values([<function g_prime at 0x7f3594174c80>, <function f_prime at 0x7f3594174a60>])
In [66]: primes[f]
Out[66]: <function __main__.f_prime(x)>
Following on from jpp's answer you could arrange the functions in a dict
mapping from function to derivative like so
In [64]: primes = f: f_prime, g: g_prime
In [65]: primes.values()
Out[65]: dict_values([<function g_prime at 0x7f3594174c80>, <function f_prime at 0x7f3594174a60>])
In [66]: primes[f]
Out[66]: <function __main__.f_prime(x)>
answered Nov 13 '18 at 11:54
aydowaydow
2,36011026
2,36011026
add a comment |
add a comment |
Define a dictionary to hold your functions and then use a list comprehension:
funcd = 'f': f, 'g': g, 'f_prime': f_prime, 'g_prime': g_prime
myderivatives = [func for name, func in funcd.items() if name.endswith('_prime')]
The benefit of this solution is it defines precisely the scope of functions you wish to filter. Use of globals
is not recommended, and very rarely necessary.
add a comment |
Define a dictionary to hold your functions and then use a list comprehension:
funcd = 'f': f, 'g': g, 'f_prime': f_prime, 'g_prime': g_prime
myderivatives = [func for name, func in funcd.items() if name.endswith('_prime')]
The benefit of this solution is it defines precisely the scope of functions you wish to filter. Use of globals
is not recommended, and very rarely necessary.
add a comment |
Define a dictionary to hold your functions and then use a list comprehension:
funcd = 'f': f, 'g': g, 'f_prime': f_prime, 'g_prime': g_prime
myderivatives = [func for name, func in funcd.items() if name.endswith('_prime')]
The benefit of this solution is it defines precisely the scope of functions you wish to filter. Use of globals
is not recommended, and very rarely necessary.
Define a dictionary to hold your functions and then use a list comprehension:
funcd = 'f': f, 'g': g, 'f_prime': f_prime, 'g_prime': g_prime
myderivatives = [func for name, func in funcd.items() if name.endswith('_prime')]
The benefit of this solution is it defines precisely the scope of functions you wish to filter. Use of globals
is not recommended, and very rarely necessary.
answered Nov 13 '18 at 11:47
jppjpp
100k2161111
100k2161111
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53280267%2fis-there-a-more-pythonic-way-to-access-to-functions-via-their-string-name%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
You could have the derivatives as attributes of the original functions.
– Matthieu Brucher
Nov 13 '18 at 11:44