2014-01-12 45 views
1

當檢查非y變量時,三元組很容易使用。三元函數可以返回並在python中打印嗎?

>>> x = None 
>>> y = 2 if x else 3 
>>> y 
3 

如果我想檢查無-兩者均我回來之前是有一個三元等價於:

def foobar(x): 
    if x: 
    return x*x 
    else: 
    print 'x is None-y' 

有什麼,看起來像:

def foobar(x): 
    return x*x if x else print 'x is None-y' 
+2

不要做,在實際程序。 Python不是Ruby。 :-) – Kos

回答

2

使用print的功能,從__future__它導入Python2:

>>> from __future__ import print_function 
>>> def foobar(x): 
     return x*x if x else print ('x is None-y') 
... 
>>> foobar(0) 
x is None-y 
>>> foobar(2) 
4 

另一種選擇將是使用sys.stdout

>>> import sys 
>>> def foobar(x): 
     return x*x if x else sys.stdout.write('x is None-y\n') 
... 
>>> foobar(0) 
x is None-y 
>>> foobar(2) 
4 
+0

ahhhh'__future__'黑魔法=) – alvas

+0

赦免編輯,foobar(2)是一個更好的例子。 – alvas

1

在Python 2 ,print是一個語句,不能在條件表達式中使用。

在Python 3中,print是一個函數,因此可以像這樣使用(帶圓括號)。然而,我認爲這是不好的風格,因爲print()被稱爲副作用而不是返回值。

我會堅持使用原始的if(爲了清楚起見,可能會在else上添加明確的return)。

最後,您的代碼聲稱0None -y,在這種情況下有點奇怪。