2010-12-08 9 views
1
if report == True: 
    print ("\tActive parts:\t%s")%(len(pact)) # TOTAL P Part and Active 
    print ("\tDiscontinued parts:\t%s")%(len(pdisc)) # TOTAL P Part and Discontinued 
    print ("\tSlow-moving parts:\t%s")%(len(pslow)) # TOTAL P Part and Slow-moving 
    print ("\tObsolete parts:\t%s")%(len(pobs)) # P TOTAL Part and Obsolete 

Comment pourrais-je simplifier au mieux ce qui précède? J'ai environ 80 autres déclarations d'impression telles que celles qui font régulièrement le code très difficile à travailler avec?Quelle est la meilleure façon de simplifier le code suivant?

+0

Sont-elles toutes des variables d'espace de noms locaux? – GWW

+0

Oui, contenu dans une fonction. – user428370

+0

Dénudez '== True'. Cela ne rendra pas ces 80 lignes moins douloureuses, mais il est facile à corriger et peut rendre les développeurs si fâchés;) (Ok, sérieux: Que faites-vous?!? 80 variables dans une fonction? Je pense que ce code peut être plus problèmes sérieux que le nombre d'instructions d'impression) – delnan

Répondre

1

Re facteur votre code afin que vos variables individuelles sont stockées dans un dictionnaire, par exemple,

data['pact'] = ... 
data['pdisc'] = ... 

Ou même comme des attributs d'une classe,

class Data: 
    pact = ... 
    pdisc = ... 

Ensuite, vous allez pouvoir créer liste séparée des chaînes pour décrire chaque attribut, tels que:

longnames = {"pact": "Active parts", "pdisc": "Discontinued parts", ... } 

Ensuite, vous pouvez les imprimer comme ceci:

if report: 
    for key, name in values: 
     print "\t%s\t%d" % (name, len(data[key])) # if using a dict 
     print "\t%s\t%d" % (name, len(getattr(data, key))) # if using a class 
2

Ecrire un modèle en tant que « constante » puis print(template % dictionary_of_values)

Pour clarifier:

template = """\tActive parts:\t%(pactlen)d 
\tDiscontinued parts:\t%(pdisclen)d 
...""" 
... 
values = {'pactlen':len(pact), 'pdisclen':len(pdics) } 
print(template % values) 
2

Vous pouvez faire une liste de tuples contenant toutes les étiquettes et les valeurs, et faire une boucle comme si:

if report: 
    values = [ 
     ("Active parts:", pact), 
     ("Discontinued parts:", pdisc), 
     # etc... 
    ] 
    for label, value in values: 
     print ("\t{}\t{}".format(label, len(value))) 
+2

Je laisserais tomber l'appel len() des valeurs, et le mettrais dans la boucle. Sinon, c'est ce que je me serais proposé moi aussi. –

+0

Oh bien sûr. Bon appel. –

+0

vous devriez utiliser "if report:" plutôt que "if report == True:" –

0

définir une méthode afin que vous puissiez envoyer une liste et se joindre à la liste avec « \ n »

Questions connexes