将方法传递给Python中的函数

时间:2015-02-26 16:43:10

标签: python

我正在尝试将一个方法(特别是字符串类的方法)传递给将运行它的函数。我的代码看起来像:

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

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

该函数的所需操作是在字符串in_str上调用isalpha方法,然后打印结果。这不起作用,因为in_str显然没有属性列表,但我想知道如何使list [1]引用该方法。

有什么建议吗?

谢谢!

2 个答案:

答案 0 :(得分: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))

答案 1 :(得分: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),即传递字符串作为参数。