2010-01-15 14 views
5

Aquí hay un par de ejemplos tomados de django-basic-apps:'% s' % '' someString

# self.title is a unicode string already 
def __unicode__(self): 
     return u'%s' % self.title 

# 'q' is a string 
search_term = '%s' % request.GET['q'] 

Cuál es el punto de este formato de cadenas?

Respuesta

3

Es sólo una costumbre mía. En estos casos, no es necesario.

1

A primera vista, no parece sensato, pero tiene el beneficio de forzar el resultado para que sea una cadena (o cadena unicode), en lugar de lo que podría haber sido de antes. Otra forma de hacer lo mismo podría ser llamar al str en el argumento de formato (o unicode).

+0

Ya son los tipos apropiados (unicode y str). –

1

Probablemente sea mejor que pregunte Nathan Borror, el autor. Puede ser solo un estilo personal.

Django sí utiliza objetos proxy para cadenas en algunos casos, por lo que puede obligarlos a cadenas "reales". Creo que estos proxies son para propósitos de i18n/l10n (no me cites sobre eso, también podría ser para evitar búsquedas de db hasta que sea necesario, o una serie de otras razones).

+1

En esos dos casos ya serían cadenas. CharacterFields devuelve unicodes y RequestDicts devuelve strs. –

0

Tal vez el autor está acostumbrado a los lenguajes estrictamente tipados y lo echa de menos en python y esta es su manera de hacer python más estrictamente tipeado de lo que es.

aquí - para hacer los tipos de parámetros de entrada/salida clara sólo para el lector porque proporcionan todo está funcionando como se esperaba, es simplemente inútil para el pitón sí.

+0

Inútil para el intérprete, pero eso es solo que yo soy exigente. –

+0

Gracias, corregido. –

+0

Bueno, Python tiene un compilador y un intérprete, pero esto es algo de tiempo de ejecución, por lo que es el intérprete el que no le importa. –

0

Otra idea: ¿Quizás esto se hace con posibles implementaciones futuras en mente? self.title y request.GET [...] actualmente ya son del tipo deseado, pero los detalles de implementación podrían cambiar en el futuro, y podrían dejar de ser una cadena unicode o una cadena. str

Ahora, habría utilizado() y Unicode(), aunque ...

Cuestiones relacionadas