Выберите функцию Python для вызова на основе регулярного выражения

Можно ли поместить функцию в структуру данных, не дав ей предварительно имени с помощью def ?

# This is the behaviour I want. Prints "hi".
def myprint(msg):
    print msg
f_list = [ myprint ]
f_list[0]('hi')
# The word "myprint" is never used again. Why litter the namespace with it?

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

Редактировать: Для справки, это больше похоже на реальный код, в котором я столкнулся с проблемой.

def handle_message( msg ):
    print msg
def handle_warning( msg ):
    global num_warnings, num_fatals
    num_warnings += 1
    if ( is_fatal( msg ) ):
        num_fatals += 1
handlers = (
    ( re.compile( '^<\w+> (.*)' ), handle_message ),
    ( re.compile( '^\*{3} (.*)' ), handle_warning ),
)
# There are really 10 or so handlers, of similar length.
# The regexps are uncomfortably separated from the handler bodies,
# and the code is unnecessarily long.

for line in open( "log" ):
    for ( regex, handler ) in handlers:
        m = regex.search( line )
        if ( m ): handler( m.group(1) )
54
задан David Moles 23 March 2018 в 12:02
поделиться