2010-09-20 19 views
11

ich im Grunde für die Python entspricht dieser VB/VBA-String-Operation suchen:String und keine/string mit optionalen Begrenzer

FullName = LastName & ", " + FirstName 

In VB/VBA + und & sind beide Verkettungsoperatoren, aber sie unterscheiden sich in, wie sie einen Nullwert Griff:

"Some string" + Null ==> Null 
"Some string" & Null ==> "Some string" 

Diese versteckte Funktion ermöglicht die erste Zeile des Codes ich schrieb ein Komma und ein Leerzeichen zwischen dem erforderlichen Lastnamen und den optionalen Werten Vornamen aufzunehmen. Wenn FirstName Null ist (Null ist die VB/VBA-Entsprechung von Python's None), wird FullName auf LastName ohne abschließendes Komma festgelegt.

Gibt es eine idiomatische One-Line-Möglichkeit, dies in Python zu tun?

Technische Anmerkung:
gnibbler ist und eumiro die Antworten sind nicht unbedingt das Äquivalent von VB/VBA + und &. Wenn FirstName eine leere Zeichenfolge ("") anstelle von None ist, wird kein abschließendes Komma verwendet. In fast allen Fällen wäre dies dem VB/VBA-Ergebnis vorzuziehen, das das nachfolgende Komma mit einem leeren FirstName ergänzen würde.

Antwort

12
FullName = LastName + (", " + FirstName if FirstName else "") 
+0

Ich denke, dies ist der Ansatz lesbar. – mwolfe02

+0

Für eine einzelne Verkettung von zwei Strings ist dies die klarste Lösung. – deed02392

50

Die folgende Zeile kann mehr nicht-None-Elemente verwendet werden, um verketten:

FullName = ', '.join(filter(None, (LastName, FirstName))) 
+3

gnibbler ist am klarsten und am besten für eine einfache concat. Aber dieses war genau das, was ich in meinem Fall brauchte, um einer ganzen Liste beizutreten. – CrazyPyro

0

Einfacher ternärer Operator tun würde:

>>> s1, s 
('abc', None) 
>>> print(s if s is None else s1 + s) 
None 
>>> print(s1 if s is None else s1 + s) 
abc 
Verwandte Themen