[pyar] Duda: str.upper("string") vs "string".upper()

Alejandro Santos listas en alejolp.com
Dom Nov 10 14:48:27 -03 2019


En Python 2, el upper() está en dos lugares: en str, y en string, que
son dos cosas diferentes. "str" es un tipo de datos, y "string" es un
módulo/librería. En Python 3, el upper() solamente existe en str.

La diferencia entre usar str.upper(texto) y texto.upper() es ninguna,
aunque lo ideal es que uses la segunda (texto.upper()), en especial si
estás aprendiendo!

Es una de esas cosas "históricas" de Python, gracias a decisiones
tomadas hace 30 años por Guido y los que crearon Python. Acá[1] está
(más o menos) explicado en la FAQ de Python, tiene que ver con el uso
de "self" y las variables de instancia de los objetos.

Acá está la diferencia entre py2 y py3:

$ python2
Python 2.7.15+ (default, Oct  7 2019, 17:39:04)
[GCC 7.4.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import string
>>> texto = "hola"
>>> string.upper(texto)
'HOLA'
>>> texto.upper()
'HOLA'
>>> str.upper(texto)
'HOLA'

$ python3
Python 3.6.8 (default, Oct  7 2019, 12:59:55)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> texto = "hola"
>>> texto.upper()
'HOLA'
>>> str.upper(texto)
'HOLA'
>>> import string
>>> string.upper(texto)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: module 'string' has no attribute 'upper'

[1] https://docs.python.org/3/faq/design.html#why-must-self-be-used-explicitly-in-method-definitions-and-calls



-- 
Alejandro Santos


Más información sobre la lista de distribución pyar