新手问一个关于函数变量的问题。

新手问一个关于函数变量的问题。

def abc()
    print "abc func"

...
itemFunc=item[5]            #item[5]存放的是一个函数名称 如abc
if( not isinstance(itemFunc, types.FunctionType) ):
    raise Exception("函数未找到:"+itemFunc)
else:
    itemFunc()


如果把 itemFunc=item[5] 改成itemFunc=abc
则itemFunc为函数,否则为str,

请问该如何处理,才能正确执行item[5]里指定的函数。

谢谢!
我也是新手, 不知有什么好方法, 不过有一个笨方法是可以的:
用getattr(object, method)

看样子你也不是在类里面定义的, 那么object可以改为你的模块名,
比如你起的文件名为ok.py, 那么可以这么写:

[Copy to clipboard] [ - ]
CODE:
import types

#定义了item才好...

def abc():
  print "abc fuc"

item[5]="abc"
itemFunc=getattr(ok,item[5])  #ok为文件名

if(not isinstance(itemFunc, types.FunctionType)):
    raise Exception("Cannot found fuction:"+itemFunc)
else:
    itemFunc()

这样倒是可以成功, 不知有没有什么高手有更好的方法
有模块或者对象就是getattr
否则还有一个办法
>>> globals()['abc']
<function abc at 0xb7e72aac>


QUOTE:
如果把 itemFunc=item[5] 改成itemFunc=abc
则itemFunc为函数,否则为str,

请问该如何处理,才能正确执行item[5]里指定的函数。

到底是想执行itemFunc呀,还是item[5]呀?

def a():print 'name'
b = a
b()

这样就可以执行啊。
item[5]里有函数名,itemFunc=item[5],只是为了读程序时能比较清楚知道item[5]里是函数名


QUOTE:
原帖由 ttvast 于 2006-12-29 01:31 发表
有模块或者对象就是getattr
否则还有一个办法
>>> globals()['abc']
<function abc at 0xb7e72aac>

我用是不是模块也不是对象,这个方法好使,太感谢了!