如果元素在列表中,则打印“Foo”

时间:2012-02-18 23:44:48

标签: python python-3.x python-2.x

我试过了:

>>> l = [1,2,3]
>>> x = 1
>>> x in l and lambda: print("Foo")
    x in l && print "Horray"
            ^
SyntaxError: invalid syntax

一些谷歌搜索显示printpython2中的一个陈述,而python3中有一个函数。但是,我已经在python3中尝试了上面的剪辑,并抛出了SyntaxError异常。

有关如何在一行中进行操作的任何想法? (可读性或谷歌编程实践不是问题)

4 个答案:

答案 0 :(得分:6)

l = [1, 2, 3]
x = 1
if x in l: print "Foo"

我不是一个自作聪明,这是在一行中做到这一点的方法。或者,如果您使用的是Python3:

if x in l: print("Foo")

答案 1 :(得分:2)

lambda创造了一个lambda。需要调用来执行它。你不能这样做,因为Python在这个上下文中不允许语句,只允许表达式(包括函数调用)。

要在Python 2.x中创建print函数,请尝试:

from __future__ import print_function
x in l and print('foo')

但要小心。如果您尝试:

x in l and print('foo') or print('bar')

它不起作用,因为print返回None,因此第一个and表达式为False,因此两个print都将被执行。在Python 3.x中,您不需要导入。

如果您没有复杂的短路(即只有一个andor),或者您知道您的功能或表达式不会让短路逻辑感到惊讶,那就没有错与代码。否则,尝试非短路1线:

print('foo') if x in l else print('bar')

仅当条件为True的概率/期望大于高于False时,才建议使用此表单。否则,简单的好if-else就是你要走的路。

答案 2 :(得分:0)

使用from __future__ import print_function消除print2作为Python2.x语句的缺点是第一步。然后以下所有工作:

x in l and (lambda: print("yes"))()       # what an overkill!
(x in l or print("no")) and print("yes")  # note the order, print returns None
print("yes") if x in l else print("no")   # typical A if Cond else Y
print("yes" if x in l else "no")          # a more condensed form

为了更有趣,如果你进入这个,你可以考虑这个 - 打印并返回True或False,具体取决于x in l条件(为了得到False我没有使用double):

def check_and_print(x, l):
    return x in l and not print("yes") or not not print("no")
那是丑陋的。要使打印透明,您可以定义另外两个版本 print,返回True或False。这实际上可用于记录:

def trueprint(*args, **kwargs):
    print(*args, **kwargs)
    return True

def falseprint(*args, **kwargs):
    return not trueprint(*args, **kwargs)

result = x in l and trueprint("yes") or falseprint("no")

答案 3 :(得分:0)

  1. 如果要在真假情况下打印不同的内容,请使用条件表达式创建要打印的值:print ('foo' if x in l else 'bar')

  2. 如果您只想在Python 2中输出一个函数,您可以尝试sys.stdout.write(当然在您import sys之后),但请记住,这远不是那么灵活;在这里,您将标准输出视为类文件对象(它是)。

  3. lambda几乎肯定在这里买不到任何东西。

  4. 使用和/或链接技巧是令人难以置信的非Pythonic。无论如何,人们都在努力克服这些黑客,知道他们有多糟糕,这正是为什么第1点的条件表达式被添加到语言中的原因。关于语法的讨论有很多