2015-02-26 6 views
2

Я пытаюсь передать метод, в частности метод строкового класса, функции, которая его запустит. Мой код выглядит примерно так:Метод передачи функции в Python

def foo (list): 
    for in_str in list[0]: 
     print(in_str.list[1]()) 

# format of list 
list = [ 
    [["Hello world!", "helloworld"], str.isalpha] 
] 

Желаемая работа функции будет вызывать метод IsAlpha на строку in_str затем распечатать результат. Это не работает, потому что in_str явно не имеет списка атрибутов, но я хочу знать, как сделать список [1] ​​ссылкой на метод.

Любые предложения?

Спасибо!

ответ

3
def foo (l): 
    for in_str in l[0]: 
     print(l[1](in_str)) 

# format of list 
l = [["Hello world!", "helloworld"], str.isalpha] 
print(foo(l)) 

Вам нужно передать строку в str.isalpha, также у вас есть дополнительная пара скобок в списке.

In [2]: foo(l) 
False 
True 

Если вы просто хотите, чтобы передать функцию затем передать его в качестве параметра и просто передать список строк:

def foo(l, func): 
    for in_str in l[0]: 
     print(func(in_str)) 


l = ["Hello world!", "helloworld"] 

print(foo(l,str.isalpha)) 

приятнее способ может быть использование map для отображения FUNC каждого строка:

def foo(l,func): 
    return map(func,l) # list(map(...) python 3 

print(foo(l,str.isalpha)) 
+0

Да! Это идеальный ответ. ** Но **, вы говорите *, также у вас есть дополнительная пара скобок в списке *, Что если OP вызывает функцию как 'print (foo (l [0])) –

+1

@BhargavRao, я думаю, что это было опечатка OP, поскольку использование 'l [0]', 'in_str'' будет списком. Если нет, мы можем сделать небольшое изменение. –

+0

Я не уверен, правильно ли сформулировал это, но то, что я хочу, чтобы функция выполняла, - это вызвать in_str.isalpha(), передав его как параметр. Моя фактическая программа намного больше и имеет множество разных методов, но ее нужно загружать списком. – SuperUser320

1

Либо вы вызываете функцию isalpha со строкой в ​​качестве аргумента:

str.isalpha('Hello World!") 

или как ориентированный подход объекта:

'Hello World'.isalpha() 

В вашем случае мы должны исправить некоторые показатели. Я также изменил имя переменной list, потому что оно затеняет функцию built-in list.

def foo(anestedlist): 
    for a_str in anestedlist[0][0]: 
     print(anestedlist[0][1](a_str)) 

# format of list 
anestedlist = [[["Hello world!", "helloworld"], str.isalpha]] 

и

foo(anestedlist) 

печатает

False 
True 

Важной частью здесь

print(anestedlist[0][1](a_str)) 

который переводит к str.isalpha(a_str), т.е. передача строки в качестве аргумента.

Смежные вопросы