[英]Print “Foo” if an element is in a list
我努力了:
>>> l = [1,2,3]
>>> x = 1
>>> x in l and lambda: print("Foo")
x in l && print "Horray"
^
SyntaxError: invalid syntax
一點點谷歌搜索發現print
是python2
一條語句,而它是python3
的一個函數。 但是,我已經嘗試了以上在python3
中的python3
,並拋出了SyntaxError異常。
關於如何在一行中執行此操作的任何想法? (可讀性或google編程習慣在這里不是問題)
l = [1, 2, 3]
x = 1
if x in l: print "Foo"
我不是一個聰明的驢子,這是做它在同一行的方式。 或者,如果您使用的是Python3:
if x in l: print("Foo")
lambda
可以創建lambda。 需要調用它來執行它。 您不能那樣做,因為Python不允許在這種情況下使用語句,而僅允許表達式(包括函數調用)。
要使print
在Python 2.x中成為函數,請嘗試:
from __future__ import print_function
x in l and print('foo')
但是要小心。 如果你試試:
x in l and print('foo') or print('bar')
它不會起作用,因為print返回None
,所以first and
expression為False,因此將同時執行兩個print
。 在Python 3.x中,您不需要導入。
如果您不會遇到復雜的短路情況(即,一個and
或or
),或者您知道函數或表達式不會讓短路邏輯感到驚訝,那么代碼就沒有錯。 否則,請嘗試非短路式1缸套:
print('foo') if x in l else print('bar')
這種形式的推薦僅當條件的概率/預期為True是遠遠大於被假高。 否則,簡單的老式if-else
是if-else
的方法。
第一步,使用from __future__ import print_function
在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
為了獲得更多的樂趣,如果您對此感興趣,可以考慮一下-根據x in l
條件打印並返回True或False(為得到False,我使用了double not):
def check_and_print(x, l):
return x in l and not print("yes") or not not print("no")
那太丑了。 要使打印透明,您可以定義其他兩個版本的打印,它們返回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")
如果要在真假情況下都打印不同的內容,請使用條件表達式創建要打印的值: print ('foo' if x in l else 'bar')
。
如果您只想使用Python 2中的函數輸出,則可以嘗試sys.stdout.write
(當然,在您首次import sys
之后),但是請記住,這遠遠沒有那么靈活。 在這里,您將標准輸出視為類似於文件的對象(它是)。
lambda
幾乎可以肯定在這里買不到任何東西。
使用和/或鏈接技巧絕非Pythonic。 人們無論如何都在為這些駭客而苦苦掙扎的事實,知道它們的可怕程度,這正是為什么將第1點中的條件表達式添加到語言中的原因。 關於語法有很多討論。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.