2014-09-06 78 views
1

我不主張這是一種很好的風格,我只是好奇它爲什麼不起作用(無效的語法),我的搜索福是讓我失望。python返回語句在一個和門

def f(x): 
    x and return x 
    return 0 

這樣做的工作在Perl中,例如:

sub f { 
    my $x = shift; 
    $x && return $x 
    return 0 
} 
+0

你能改寫爲一個清晰的問題,而不是僅僅陳述? – JustinJDavies 2014-09-06 14:23:59

回答

4

Python是用語句和表達式之間的區別的語言。

return是一個語句,它不能用於需要表達式的地方。

與往常一樣,具有這種雙重性的語言的反面是相反有效的,因爲表達式可以被視爲語句(例如,您可以將foo()寫爲語句)。

如果你喜歡一個襯片的代碼可以寫成

return x if x else 0 

或者更簡單地說

return x or 0 

因爲or運算符返回第一個操作數是「truthy」不只是TrueFalse (也是短路的,即如果左操作數是真的,則不評估右操作數)。

1

什麼你想在Python寫在這種情況下是:

def f(x): 
    return x if x else 0 

或者:

def f(x): 
    return x or 0