python - separar - Concatenación de cadenas sin el operador ''+''
reemplazar caracteres en python (7)
De los docs :
Se permiten múltiples literales de cadena adyacentes (delimitados por espacios en blanco), posiblemente utilizando diferentes convenciones de cotización, y su significado es el mismo que su concatenación. Por lo tanto, "hola" "mundo" es equivalente a "helloworld".
La declaración 3 no funciona porque:
El operador ''+'' se debe usar para concatenar expresiones de cadena en tiempo de ejecución.
Observe que el título del subencabezado en los documentos es "cadena concatenación literal" también. Esto solo funciona para literales de cadena, no para otros objetos.
Probablemente no haya diferencia. Si lo hay, probablemente sea extremadamente pequeño y nada de lo que nadie deba preocuparse.
Además, entienda que puede haber peligros para esto:
>>> def foo(bar, baz=None):
... return bar
...
>>> foo("bob"
... "bill")
''bobbill''
Este es un ejemplo perfecto de donde los errores nunca deben pasar en silencio. ¿Qué pasaría si quisiera que "bill"
sea el argumento baz
? He olvidado una coma, pero no se ha producido ningún error. En cambio, la concatenación ha tenido lugar.
Estaba jugando con Python y me di cuenta de que no necesitamos usar el operador ''+'' para concatenar cadenas a menos que se use directamente.
Por ejemplo:
string1 = ''Hello'' ''World'' #1 works fine
string2 = ''Hello'' + ''World'' #2 also works fine
string3 = ''Hello''
string4 = ''World''
string5 = string3 string4 #3 causes syntax error
string6 = string3 + string4 #4 works fine
Ahora tengo dos preguntas:
- ¿Por qué la instrucción 3 no funciona mientras que la declaración 1?
- ¿Hay alguna diferencia técnica, como la velocidad de cálculo, etc. entre las afirmaciones 1 y 2?
Esta es una concatenación literal de cadena implícita. Solo ocurre con los literales de cadena, no con las variables u otras expresiones que evalúan a las cadenas. Solía haber una (pequeña) diferencia de rendimiento, pero en estos días, el optimizador de mirilla debe hacer que las formas sean esencialmente equivalentes.
La instrucción 3 no funciona, porque cuando concatena dos expresiones de cadena para crear una nueva cadena, necesita un operador ''+''.
mientras que en el caso del sting 1, 2 y 4, los literales adyacentes separados por espacios en blanco utilizan diferentes convenciones de citas. Por lo tanto, se les permite hacer que se impriman igual que su concatenación.
Además, no habrá ninguna diferencia de tiempo significativa o notable al ejecutar esas 2 operaciones.
%%timeit -n 1
s1=''ab''
s2=''ba''
print(s1+s2)
o / p La carrera más lenta tomó 17.08 veces más que la más rápida. Esto podría significar que se está almacenando en caché un resultado intermedio. 57.8 μs ± 92.5 μs por loop (media ± std. Dev. De 7 runs, 1 loop cada uno)
%%timeit -n 1
s3=''ab'' ''ba''
print(s3)
o / p La carrera más lenta tomó 4.86 veces más que la más rápida. Esto podría significar que se está almacenando en caché un resultado intermedio. 25.7 μs ± 21 μs por loop (media ± std. Dev. De 7 runs, 1 loop cada uno)
Para responder a su segunda pregunta: No hay ninguna diferencia (al menos con la implementación que uso). Desmontando ambas declaraciones, se representan como LOAD_CONST STORE_FAST
. Ellos son equivalentes.
Puedes usar %s
ya que es más eficiente que usar el signo +.
>>> string2 = "%s %s" %(''Hello'', ''World'')
>>> string2
''Hello World''
(O)
un método más es .format
>>> string2 = "{0} {1}".format("Hello", "World")
>>> string2
''Hello World''
>>>
¿Por qué la instrucción 3 no funciona mientras que la declaración 1?
Porque, en la primera declaración, estamos asignando alguna constante a una variable. La asignación de variables es lo suficientemente simple como para que podamos seguir poniendo constantes múltiples en una sola variable y la tarea seguirá ejecutándose. Los términos "hello"
y "world"
son dos constantes del mismo tipo. Entonces, la declaración funcionó.
Si hacemos lo siguiente, obtendremos SyntaxError
string1 = "Hello" 1
La razón es que suministramos constantes múltiples en una sola asignación de variable. Esta pitón confundida y la arrojó como un error.
La declaración 3 se trata de asignar una variable basada en dos variables. Esto producirá SyntaxError
ya que Python no sabe qué puede hacer con 2 variables antes de asignarlo a la variable.
¿Hay alguna diferencia técnica, como la velocidad de cálculo, etc. entre las afirmaciones 1 y 2?
Sí. La única diferencia técnica es la legibilidad en lugar de cualquier otra cosa. La legibilidad es lo más importante en Python. Para un ojo no entrenado, el "hello" "world"
podría parecer que el compilador agregaría el espacio a las cuerdas. Que no es el caso.
Sin embargo,
"hello" + "world"
es explícito y normal. Casi siempre, explícito es mejor que implícito.
La unión de dos o más cadenas en una sola se llama concatenación.
El operador + hace esto en Python. Simplemente escribir dos literales de cadena juntos también los concatena.
str1 = ''Hello''
str2 =''World!''
# using +
print(''str1 + str2 = '', str1 + str2)
No es necesario utilizar la cadena con el símbolo "+".
en python Unirse al método de compilación está ahí, que hace la concatenación de cadenas.
Código:
def stringConcat(fname, lname):
fullname=" ".join([fname,lname])
print("name of person is ",fullname)
stringConcat("john", "smith")
salida:
stringConcat("john", "smith")
name of person is john smith