2017-06-05 3 views
0

Peut-être une base:Plusieurs opérations de mise en forme de chaîne sont-elles autorisées en Python?

Je suis juste en train de faire plusieurs opérations sur l'une des clés dans un dictionnaire avec codant pour le premier élément de la clé, le fractionnement davantage basé sur un personnage et se joindre également une autre chaîne comme ci-dessous:

images_list["RepoTag"] = image["RepoDigests"][0].encode("utf-8").split("@")[0] + ":none" 

extrait de code dans lequel je fais la mise en forme ci-dessus:

from django.http import JsonResponse 
from django.views.decorators.http import require_http_methods 
import requests 

@require_http_methods(["GET"]) 
def images_info(request): 
    response = requests.get("http://127.0.0.1:6000/images/json") 
    table = [] 
    images_list = {} 
    for image in response.json(): 
     try: 
      images_list["RepoTag"] = image["RepoTags"][0].encode("utf-8") 
     except TypeError: 
      images_list["RepoTag"] = image["RepoDigests"][0].encode("utf-8").split("@")[0] + ":none" 
     images_list["Id"] = image["Id"].encode("utf-8")[7:19] 
     table.append(images_list) 
     images_list = {} 

    return JsonResponse(table,safe=False) 

quelqu'un peut-il me dire si elle est le droit façon de faire ces nombreuses opérations dans une seule ligne? ou d'une autre manière Est-ce qu'il suit les standards python?

Si ce n'est pas le cas, les normes python suggèrent des opérations limitées sur une seule ligne ou alors?

La raison de cette requête est que le nombre de caractères ne doit pas dépasser 79 caractères, conformément au code pep-8.

+0

Etes-vous sûr que vous voulez dire "opérations sur l'un des ** clé ** dans un dictionnaire"? – khelwood

+0

Si ce n'est pas cassé, ne le réparez pas. –

+0

@Shiva [La règle du louveteau] (http://pragmaticcraftsman.com/2011/03/the-boy-scout-rule/): Laissez le camping nettoyeur plus propre que vous ne l'avez trouvé. –

Répondre

3

Il n'y a rien de mal à enchaîner quelques opérations de chaîne ensemble. Si vous voulez le garder dans la ligne de 80 caractères, il suffit d'ajouter quelques parenthèses:

images_list["RepoTag"] = (
    image["RepoDigests"][0].encode("utf-8").split("@")[0] + 
    ":none") 

ou utiliser str.format() pour fournir ces mêmes parenthèses:

images_list["RepoTag"] = '{}:none'.format(
    image["RepoDigests"][0].encode("utf-8").split("@")[0]) 

Vous pouvez, sinon, utiliser trivialement local variable:

first_digest = image["RepoDigests"][0].encode("utf-8") 
images_list["RepoTag"] = '{}:none'.format(first_digest.split("@")[0]) 
+0

merci .. J'ai aimé le str.format() et semble être propre –

-1

Il est demandé de ne pas dépasser 79 caractères, mais nous pouvons le faire.

images_list["RepoTag"] = image["RepoDigests"][0].encode("utf-8").split("@")[0] + \ 
    ":none" 

OU

images_list["RepoTag"] = \ 
    image["RepoDigests"][0].encode("utf-8").split("@")[0] + ":none" 
+1

Il est plus recommandé d'utiliser des parenthèses et non des barres obliques. – Nurjan