Итерации по различным функциям в Python - PullRequest
0 голосов
/ 24 апреля 2018

Я хотел бы перебрать различные функции. Я посмотрел в itertools, и я не нашел там ничего уместного. Я ищу что-то вроде этого:

import mymod
import sys
mymodule= sys.module[__name__]
if __name__ == 'main':
    function_list1=['mymod.f1','mymod.f1(keyword=True)','mymod.f2']
    for func in function_list1:
        try:
            print(getattr(mymod,func)()) # problem: how do I call the keyword
        except Exception, e:
            print(e)
    function_list2=['f1','f2']
    for func in function_list2:
        getattr(mymodule,func)()

Я отредактировал код, потому что хочу сделать явным, что я хочу вызвать функцию из другого модуля и текущего модуля. И я могу захотеть передать ключевое слово в функцию

module mymod - это набор функций, он импортирует некоторые внешние модули и некоторые модули, написанные мной, а затем определяет функции, которые используют только локальные переменные

   import sys
   def f1(keyword=False, keyword2='something', keyword3=0.5):
       a = 2
       return a

Ответы [ 2 ]

0 голосов
/ 24 апреля 2018

Я думаю, вы ищете тип partial из functools.В большинстве случаев вам это не нужно, поскольку функции являются первоклассными объектами.

from functools import partial
import mymod

if __name__ == '__main__':
    # Functions from another module
    function_list1 = [
        mymod.f1,  # partial(mymod.f1) will work, too.
        partial(mymod.f1, keyword=True),
        mymod.f2
    ]
    for func in function_list1:
        try:
            print(func())
        except Exception, e:
            print(e)

    # Functions from the current module
    function_list2 = [f1, f2]
    for func in function_list2:
        func()
0 голосов
/ 24 апреля 2018

Используйте местных или глобальных.

import mymod
if __name__ == 'main':
    function_list=['mymod.f1','mymod.f2','mymod.f3']
    for func in function_list:
        try:
            locals()[func]() # something here?
        except Exception, e:
            print(e)

или

import mymod
if __name__ == 'main':
    function_list=['mymod.f1','mymod.f2','mymod.f3']
    for func in function_list:
        try:
            globals()[func]() # something here?
        except Exception, e:
            print(e)

это будет работать, только если функции находятся в одном модуле

Также, как сказано в комментарии, вы можете вызывать функции напрямую, если сохраните их без использования кавычек в списке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...