我正在尝试将一个方法(特别是字符串类的方法)传递给将运行它的函数。我的代码看起来像:
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]引用该方法。
有什么建议吗?
谢谢!
答案 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)
,即传递字符串作为参数。