2012-12-04 7 views

Odpowiedz

162

Można użyć operatora or:

return x or "default" 

pamiętać, że ta zwraca również "default" jeśli x jest dowolna wartość falsy, w tym pustym liście, 0, pusty ciąg znaków, a nawet datetime.time(0) (do północy).

+24

Powoduje to, że "default" powróci, jeśli x jest dowolną wartością falsyfikacji, np. 'Brak',' [] ',' "", itp., Ale często jest wystarczająco dobre i czystsze. – FogleBird

+0

Otrzymuję 'NameError: nazwa 'x' nie jest zdefiniowana' – Stephen

+9

Zwrócił wartość "default", jeśli x jest równe 0 (zero) oraz – thameera

23

Można użyć conditional expression:

x if x is not None else some_value 

Przykład:

In [22]: x = None 

In [23]: print x if x is not None else "foo" 
foo 

In [24]: x = "bar" 

In [25]: print x if x is not None else "foo" 
bar 
3

Masz potrójny składni x if x else '' - jest to, że Ty jesteś po?

+4

I tak naprawdę nie jest * nazywana * potrójną składnią (każdy operator, który bierze 3 operandy, mógłby być nazywany operatorem potrójnym, a nie tylko tym). Jego własna nazwa jest wyrażeniem warunkowym. –

+2

nie działa w przypadku, gdy x == 0 lub dowolna wartość falsy – wisbucky

+0

@wisbucky, a następnie określasz kryteria specyficzne dla kontekstu ... "Brak" lub jakakolwiek inna wartość wartownika lub kryteria ... –

51
return "default" if x is None else x 

wypróbuj powyższe.

+0

Użyj tej opcji, jeśli chcesz uzyskać domyślną wartość tylko wtedy, gdy x to Brak, a nie inne fałszywe wartości. Który pasuje do C# x ?? "domyślnie" –

+2

W przeciwnym razie po prostu upuść 'jest Brak', a niech' x' ocenia samo w sobie wartość logiczną. – chepner

+0

Lub użyj @ starhusker's x lub "default". Często używałem potrójnego sytax b/c I co zrobić x.value, jeśli X może być Brak. Więc x.value, jeśli x else "default", ale jest to bardziej czytelne getattr (obj, "value", "default"). Wyjątkiem jest to, że później nie jest on przechwytywany przez wiele narzędzi automatycznego refaktora. –

6
x or "default" 

działa najlepiej - mogę nawet użyć inline wywołania funkcji, bez wykonywania go dwukrotnie lub za pomocą dodatkowej zmiennej:

self.lineEdit_path.setText(self.getDir(basepath) or basepath) 

go używać podczas otwierania Qt dialog.getExistingDirectory() i anulowanie, która zwraca pusty ciąg.

+1

_ "działa najlepiej" _ - z wyjątkiem sytuacji, gdy _x_ może mieć wartość prawnie fikcyjną. wtedy ta składnia doprowadzi do subtelnych, trudnych do debugowania błędów. –

Powiązane problemy