【发布时间】:2011-07-02 23:14:29
【问题描述】:
def attrs(**kwds):
def decorate(f):
for k in kwds:
setattr(f, k, kwds[k])
return f
return decorate
@attrs(argument_types=(int, int,), returns=int)
def add(a, b):
return a + b
这里我需要 add() 能够显示其可接受的参数类型。 但是我可以在运行时做这样的事情吗?
ladd=[]
for x in range(0,10):
@attrs(argument_types=int, returns=int,default_parameter1 = x)
exp = lambda : add(a,x)
ladd.append(exp)
或
ladd=[]
for x in range(0,10):
@attrs(argument_types=int, returns=int,default_parameter1 = x)
addx = functools.partial(add, 2)
ladd.append(addx)
我需要那些函数可以生成运行时与“装饰”参数绑定要么
嗯,这是错误信息,我认为上面的代码不能工作,但我从来没有尝试将它粘贴到python中测试它......
>>> ladd=[]
>>> for x in range(0,10):
... @attrs(argument_types=int, returns=int,default_parameter1 = x)
... exp = lambda : add(a,x)
File "<stdin>", line 3
exp = lambda : add(a,x)
^
SyntaxError: invalid syntax
>>> ladd.append(exp)
File "<stdin>", line 1
ladd.append(exp)
^
IndentationError: unexpected indent
>>>
【问题讨论】:
-
你试了一下,遇到了什么错误?
-
@S.Lott:虽然错误消息通常非常有用,并且在有疑问时应该包含在内,但任何有足够 Python 知识来回答这个问题的人都应该非常清楚这是一个普通的语法错误.
-
@delnan:这个问题不是针对“任何有足够 Python 知识可以回答的人”,而是针对@user478514 用更多信息更新问题,也许自己做一些真正的调试工作。当然,您是对的,但有时人们只需提供所见内容的文档即可获得帮助。
-
@S.Lott:感谢您的指出,我认为您的意思是我应该在粘贴之前对其进行测试。在这种情况下,我认为上面的“代码”可能不起作用,所以我从不测试它,实际上,这只是我心中的“假设”想法。
-
@user478514:困惑不是“如果”。困惑意味着你有让你困惑的代码。 “如果”是愚蠢的,因为用代码实际做一些事情并实际看到做其他事情会发生什么要容易得多。提示如下:先尝试。