我知道函数可以在Python中作为参数传递,但我不明白为什么我不能这样做:
>>> def foo(bar): return bar()
...
>>> foo(def a(): return 'hello')
File "<stdin>", line 1
foo(def a(): return 'hello')
^
SyntaxError: invalid syntax
当这完全有效时:
>>> def foo(bar): return bar()
...
>>> def a(): return 'hello'
...
>>> foo(a)
'hello'
答案 0 :(得分:4)
def
是一个声明。如果您想要匿名函数,请使用lambda
表达式。
foo(lambda: 'hello')
答案 1 :(得分:2)
您无法使用lambda
。对于函数的对象表示,您可以使用foo(lambda a: 'hello')
。
var animation = false;
this.executePlan = function(){ // part of object
var self = this // part of object
for (var i = 0; i < this.moves.length; i++){
var move = this.moves[i];
if (move.type == "move"){
var path = new Path({x: self.x, y: self.y}, {x: move.x, y: move.y});
animation = setInterval(function(){
console.log("move");
ctx.clearRect(0, 0, res, res);
self.draw();
self.x += path.vector.x;
self.y += path.vector.y;
path.vector.s--;
if (path.vector.s <= 0){
clearInterval(animation);
}
},
10);
}
else if (move.type == "turn"){
animation = setInterval(function(){
console.log("turn");
if (move.a > 0){
self.facing++;
move.a--;
}
else {
self.facing--;
move.a++;
}
ctx.clearRect(0, 0, res, res);
ctx.save();
ctx.translate(self.x, self.y);
ctx.rotate(self.facing*Math.PI/180);
ctx.drawImage(self.img, -self.size/2, -self.size/2, self.size, self.size);
ctx.restore();
if (move.a == 0){
clearInterval(animation);
}
},
30);
}
}
}
或者您可以使用函数的名称,如第二个示例所示。