这是我的代码:
def testit(func, *nkwargs, **kwargs):
try:
retval = func(*nkwargs, **kwargs)
result = (True, retval)
except Exception, diag:
result = (False, str(diag))
return result
def test():
funcs = (int, long, float)
vals = (1234, 12.34, '1234', '12.34')
for eachFunc in funcs:
print '-' * 20
for eachVal in vals:
retval = testit(eachFunc, eachVal)
if retval[0]:
print '%s(%s) =' % \
(eachFunc.__name__, `eachVal`), retval[1]
else:
print '%s(%s) = FAILED:' % \
(eachFunc.__name__, `eachVal`), retval[1]
if __name__ == '__main__':
test()
第三行中func
的功能是什么?我认为这是一个变量。它是如何成为一个功能名称?
答案 0 :(得分:0)
Python函数是第一类对象。这意味着您可以将这样的对象分配给变量并将其传递给另一个函数。执行def functionname(): ...
语句的行为将此类对象分配给名称(此处为functionname
):
>>> def foo(): return 42
...
>>> foo
<function foo at 0x107e9f0d0>
>>> bar = foo
>>> bar
<function foo at 0x107e9f0d0>
>>> bar()
42
所以表达式
funcs = (int, long, float)
需要3个内置函数并将它们放入元组中。 funcs[0]('10')
将返回整数对象10
,因为funcs[0]
是对int()
函数的另一个引用,因此funcs[0]('10')
会给出与{{完全相同的结果1}}。
这些函数对象在循环中传递给int('10')
函数:
testit()
因此 for eachFunc in funcs:
print '-' * 20
for eachVal in vals:
retval = testit(eachFunc, eachVal)
被绑定到eachFunc
元组逐个引用的函数对象。
funcs
将该函数对象作为testit()
参数,然后调用它:
func
所以这会从def testit(func, *nkwargs, **kwargs):
try:
retval = func(*nkwargs, **kwargs)
元组中调用int()
,long()
和float()
各种测试值。