Строка соединения и None / строка с использованием необязательного разделителя - PullRequest
14 голосов
/ 20 сентября 2010

Я в основном ищу Python эквивалент этой строковой операции VB / VBA:

FullName = LastName & ", " + FirstName

В VB / VBA + и & оба являются операторами конкатенации, но они различаются по тому, как они обрабатывают нулевое значение:

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

Эта скрытая функция позволяет первой строке кода, которую я написал, включать запятую и пробел между обязательными значениями LastName и необязательными значениями FirstName. Если FirstName имеет значение Null (Null является эквивалентом VB / VBA для Python's None), FullName будет иметь значение LastName без запятой.

Есть ли однострочный идиоматический способ сделать это в Python?

Техническое примечание :
Ответы Гнибблера и Эумиро не являются строго эквивалентными ответам VB / VBA + и &. Используя их подходы, если FirstName является пустой строкой (""), а не None, запятая не будет. Почти во всех случаях это было бы предпочтительнее результата VB / VBA, который заключался бы в добавлении запятой через запятую FirstName.

Ответы [ 3 ]

67 голосов
/ 20 сентября 2010

Следующая строка может использоваться для объединения большего числа элементов not-None:

FullName = ', '.join(filter(None, (LastName, FirstName)))
17 голосов
/ 20 сентября 2010
FullName = LastName + (", " + FirstName if FirstName else "")
0 голосов
/ 20 сентября 2010

Простой троичный оператор будет делать:

>>> s1, s
('abc', None)
>>> print(s if s is None else s1 + s)
None
>>> print(s1 if s is None else s1 + s)
abc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...