2010-07-03 14 views
15

que acaba de ejecutar pylint en mi código y de que aparezca este mensaje:El uso de un módulo de 'cadena' obsoleto

Uses of a deprecated module 'string'

Estoy utilizando el módulo de string para unirse a/dividida principalmente.

>>> names = ['Pulp', 'Fiction'] 
>>> import string 
>>> fullname = string.join(names) 
>>> print fullname 
Pulp Fiction 

Above es un ejemplo. En mi código tengo que usar mucho split y join y para eso estaba usando el módulo string.

¿Ha quedado obsoleto? En caso afirmativo, ¿cuál es la forma de manejar split/join en Python 2.6? Intenté buscar pero no pude encontrarme claro así que pregunté aquí.

+1

¿Qué tutorial o libro te dio la idea de que deberías usar string.join, etc. y no los métodos de la clase str? –

+0

@John: http://openbookproject.net/thinkcs/python/english2e/ch09.html – user225312

+0

Esto es impactante y sorprendente. Pretende ser la versión 2 y tiene Copyright 2010 en cada página. El Capítulo 7 trata sobre cadenas y menciona solo el módulo de cadena, a pesar de que los métodos de cadena se introdujeron en Python 2.0 en octubre de 2000, casi DIEZ años atrás. Sugiero que dejes de leerlo al instante. –

Respuesta

1

no todas las funciones de "cadenas" están en desuso. si desea utilizar una función de cadenas que no está en desuso, entonces elimine una cadena de la configuración de módulos en desuso en la configuración de pylint.

[IMPORTS] 
deprecated-modules=string 
+0

.pylintrc dice esto: "; Módulos obsoletos que no deberían usarse, separados por una coma ". Entonces, según usted, eso es engañoso o demasiado imperativo. – Hibou57

0

Solía ​​llamar split, join y strip como métodos de objetos de cadena hasta que un día que tenía que hacer una escritura más eficiente.

La creación de perfiles usando cProfile me mostró que se había gastado mucho tiempo en estas llamadas a métodos. Performance tips sugirió que yo en lugar de hacer una "copia" de estos métodos en mi alcance para evitar esto:

split = str.split 
join = str.join 
for _ in xrange(1000000): 
    print join("_", split("Pulp Fiction")) 

Si recuerdo bien, el truco de hecho dio lugar a mejoras de rendimiento.

Sin embargo, si necesito estas funciones de manipulación de cadenas en varias funciones, hago estas copias en el "alcance global" de mi programa (no estoy seguro de que esta sea la forma correcta de decirlo). pylint luego se queja de que no estoy usando la convención de nomenclatura correcta para mi variables:

Invalid name "split" (should match (([A-Z_][A-Z0-9_]*)|(__.*__))$) 

Así que terminan nombrarlos con mayúsculas:

SPLIT = str.split 
JOIN = str.join 

def main(): 
    for _ in xrange(1000000): 
     print JOIN("_", SPLIT("Pulp Fiction")) 

Es un poco feo, sin embargo.

A veces me olvido de la posibilidad de hacer copias y hacer importaciones:

from string import split, join 

Y cuando me siento el aviso Uses of a deprecated module 'string'.

Cuestiones relacionadas