首页 文章

为什么不打印lambda?

提问于
浏览
143

为什么这不起作用?

lambda: print "x"

这不是一个单一的陈述,还是别的什么?关于lambda中允许的内容,文档似乎有点稀疏......

8 回答

  • 24

    使用Python 3.x,打印CAN可以在lambda中工作,而无需更改lambda的语义 .

    以特殊方式使用,这对于调试非常方便 . 我发布这个'迟到的答案',因为这是我经常使用的实用技巧 .

    假设你的'uninstrumented'lambda是:

    lambda: 4
    

    然后你的'仪表'lambda是:

    lambda: (print (3), 4) [1]
    
  • 1

    lambda 的身体必须是单一的表达 . 在Python 2.x中, print 是一个语句 . 但是,在Python 3中, print 是一个函数(函数应用程序是一个表达式,因此它将在lambda中工作) . 如果您使用的是最新的Python 2.x,则可以(并且应该为了向前兼容性:)使用后端打印功能:

    In [1324]: from __future__ import print_function
    
    In [1325]: f = lambda x: print(x)
    
    In [1326]: f("HI")
    HI
    
  • 3

    你写的东西相当于

    def anon():
        return print "x"
    

    这也导致了一个SyntaxError,python不允许你在2.xx中分配一个打印值;你可以说在python3中

    lambda: print('hi')
    

    它会工作,因为他们已经将print更改为函数而不是语句 .

  • 10

    lambda的主体必须是单个表达式 . print 是一个声明,不幸的是它已经出局了 .

  • 22

    如果我使用它来进行简单的删除,我会使用:

    fn = lambda x: sys.stdout.write(str(x) + "\n")
    

    这很完美 .

  • 11

    Here,您看到了问题的答案 . 它说 print 不是Python中的表达式 .

  • 2

    lambda的主体必须是一个返回值的表达式 . print ,作为一种陈述,不会返回任何东西,甚至不会返回 None . 同样,您不能将 print 的结果赋给变量:

    >>> x = print "hello"
      File "<stdin>", line 1
        x = print "hello"
                ^
    SyntaxError: invalid syntax
    

    您也不能在lambda中放置变量赋值,因为赋值是语句:

    >>> lambda y: (x = y)
      File "<stdin>", line 1
        lambda y: (x = y)
                     ^
    SyntaxError: invalid syntax
    
  • 174

    你可以做这样的事情 .

    Create a function to transform print statement into a function:

    def printf(text):
       print text
    

    And print it:

    lambda: printf("Testing")
    

相关问题