2010-09-20 12 views
11

básicamente Busco el pitón equivalente a este VB/VBA operación de cadena:Ingreso cuerda y Ninguno/cadena usando delimitador opcional

FullName = LastName & ", " + FirstName 

En VB/VBA + y & son los dos operadores de concatenación, pero difieren en la forma en que manejan un valor nulo:

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

Esta característica oculta permite para la primera línea de código que he escrito para incluir una coma y el espacio entre los valores opcionales FirstName Apellido requerida y. Si FirstName es nulo (Null es el equivalente de VB/VBA de Python's None), FullName se establecerá en LastName sin coma al final.

¿Hay una forma idiomática de una línea para hacer esto en Python?

Nota técnica: Las respuestas de eumiro de
gnibbler y no son estrictamente el equivalente de VB/VBA de + y &. Usando sus enfoques, si FirstName es una cadena vacía ("") en lugar de None, no habrá una coma al final. En casi todos los casos, esto sería preferible al resultado de VB/VBA que sería agregar la coma final con un FirstName en blanco.

Respuesta

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

creo que este es el método más fácil de leer. – mwolfe02

+0

Para una sola concatenación de dos cadenas, esta es la solución más clara. – deed02392

50

La siguiente línea se puede utilizar para concatenar los elementos más no-Ninguno:

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

gnibbler's es el más claro y el mejor para un solo concat simple. Pero este es exactamente lo que necesitaba en mi caso de unirme a una lista completa. – CrazyPyro

0

operador ternario simple haría:

>>> s1, s 
('abc', None) 
>>> print(s if s is None else s1 + s) 
None 
>>> print(s1 if s is None else s1 + s) 
abc 
Cuestiones relacionadas