在Python中调用匿名函数而不将它们分配给变量

时间:2012-02-18 15:47:58

标签: javascript python python-3.x

如何在Python中创建自调用匿名函数

例如使用JavaScript:

标准方式:

function fn (a) {
   if (a == 1) {
      alert(a);
   }
   else {
     alert(0);
   }
  /...
}

fn(1);

自我调用匿名电话:

!function(a) {
   if (a == 1) {
      alert(a);
   }
   else {
     alert(0);
   }
   /...
}(1);

Python中是否有任何类似物?

5 个答案:

答案 0 :(得分:6)

鉴于您对lambda答案的评论,我认为不可能。 lambda运算符是Python支持匿名函数的唯一方法。如果您需要支持语句,则需要使用始终必须命名的def

请记住,lambdas可以支持有限的if-then逻辑。以下两个是lambda表达式,它们实现了上面给出的if-then逻辑:

(lambda a: alert(1 if a == 1 else 0))(1)

更字面意思:

(lambda a: alert(a) if a == 1 else alert(0))(1)

答案 1 :(得分:4)

如果您的函数很简单且只有表达式(没有语句),那么您可以使用lambda创建匿名函数并将其调用为内联函数。

>>> (lambda x, y: x*y)(3, 5)
15

答案 2 :(得分:2)

是(使用from __future__ import print_function的Python 3或Python 2):

(lambda x: print(x))('foo')

但是使用lambda,您只能编写一行代码。

答案 3 :(得分:2)

您可以使用命名函数并在使用它之后取消绑定其名称,如:

def hello(there):
    print there
hello("france")
del hello

答案 4 :(得分:1)

您始终可以滥用exec,将代码作为字符串传递:

def anon(code):
    execdict = {}
    exec('def f():{}'.format(code), execdict)
    return execdict['f']

anon("print('hello'); print('hello again')")()

(这在python 3中有效,我认为exec在早期版本中表现得非常不同)