IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Raccourcissement code python


Sujet :

Python

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2007
    Messages : 41
    Par défaut Raccourcissement code python
    Coucou tout le monde,

    J'ai un petit problème dans mon code car j'ai beaucoup de répétitions, que je pense que l'on pourrait éviter! Il s'agit d'optimiser mon code.

    Voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    			for dict in list_params:
    				if DCC <> "":
    					if 'dccAccession' in dict and dict['dccAccession'] == DCC:
    						n = n + 1
    						if dict['view'] == 'RawData' or dict['type'] == 'fastq':
    							rawData.append(dict['type']+' = '+dict['url'])		# fastq URLs are added
    						elif dict['type'] <> 'bai':
    							treatedData.append(dict['type']+' = '+dict['url'])	# Processed data URLs are added
    				else:
    					# Check if other parameters of the list of files are the same as in the summary file
    					if ('datatype' in dict and dict['dataType'].lower() == dataT.replace('-','').lower()
    						and dict['strain'] == strain and dict['cell'] == cellT and dict['grant'] == grant
    						and dict['lab'] == lab and dict['age'] == age):
    						if 'treatment' in dict and dict['treatment'] == treatment:
    							if antibody <> "" and 'antibody' in dict and dict['antibody'] == antibody:
    								if control <> "" and 'control' in dict and dict['control'] == control:
    									if dict['view'] == 'RawData' or dict['type'] == 'fastq':
    										rawData.append(dict['type']+' = '+dict['url'])		# fastq URLs are added
    									elif dict['type'] <> 'bai':
    										treatedData.append(dict['type']+' = '+dict['url'])	# Processed data URLs are added
    								elif control == "":
    									if dict['view'] == 'RawData' or dict['type'] == 'fastq':
    										rawData.append(dict['type']+' = '+dict['url'])		# fastq URLs are added
    									elif dict['type'] <> 'bai':
    										treatedData.append(dict['type']+' = '+dict['url'])	# Processed data URLs are added
    							elif antibody == "":
    								if dict['view'] == 'RawData' or dict['type'] == 'fastq':
    									rawData.append(dict['type']+' = '+dict['url'])		# fastq URLs are added
    								elif dict['type'] <> 'bai':
    									treatedData.append(dict['type']+' = '+dict['url'])	# Processed data URLs are added
    						elif not('treatment' in dict):
    							if dict['view'] == 'RawData' or dict['type'] == 'fastq':
    								rawData.append(dict['type']+' = '+dict['url'])		# fastq URLs are added
    							elif dict['type'] <> 'bai':
    								treatedData.append(dict['type']+' = '+dict['url'])	# Processed data URLs are added
    Quelqu'un aurait il une idée pour ne pas me répéter un peu trop avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if dict['view'] == 'RawData' or dict['type'] == 'fastq':
    							rawData.append(dict['type']+' = '+dict['url'])		# fastq URLs are added
    						elif dict['type'] <> 'bai':
    							treatedData.append(dict['type']+' = '+dict['url'])	# Processed data URLs are added
    Merci d'avance

  2. #2
    Membre Expert
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Par défaut
    Bonjour,

    - déplacer le bout de code dans une fonction ?
    - utiliser un dictionnaire ('view','type') -> action à prendre

    Mais s'agit il vraiment d'optimiser, ou d'améliorer la lisibilité ? Le bout de code que tu veux factoriser n'est appelé qu'une seule fois avec le jeu des if extérieur, donc tu ne gagnera rien en temps de calcul à faire le test pour tout le monde à l'entrée du code (au contraire si tu passes par les else)

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2007
    Messages : 41
    Par défaut
    Bonjour VV33D,

    En fait, ce que je désirerais faire, c'est faciliter la modification pour quelqu'un d'autre. Si je déplace ce bout de code dans une fonction, il y aura toujours des répétitions. Penses tu qu'il puisse exister un autre moyen de faire ceci (en retournant le code, ou autre...)?

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2012
    Messages : 39
    Par défaut
    Bonjour,

    Si d'autres personnes vont intervenir sur le script, alors tu peux "complexifier" ton code et interroger l'utilisateur grâce à un questionnaire de départ avec des input() au début de ton script. Après tout dépend des modifications à réaliser...

    Précise ces modifications...


    En tout cas, la définition d'une fonction semble convenir.

    Bon courage.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Avril 2007
    Messages : 41
    Par défaut
    Merci pour vos réponse, je vais alors définir une fonction. J'aurais une dernière petite question : est-il possible de définir une fonction à l'intérieur d'une fonction??

  6. #6
    Membre Expert
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Par défaut
    Oui, elle peut alors accéder aux variables autour d'elles (Attention dans une boucle toutefois).

    Rien ne t’empêche non plus de la mettre à l'extérieur et de lui passer ce dont elle a besoin. Cela augmentera la flexibilité sur cette fonction (en changer dynamiquement par exemple)

Discussions similaires

  1. Récupérer le code source d'une page HTML
    Par phyn04 dans le forum Réseau/Web
    Réponses: 5
    Dernier message: 24/11/2016, 14h45
  2. Réponses: 3
    Dernier message: 08/03/2009, 10h50
  3. conversion d'indentation dans un code python
    Par KINENVEU dans le forum Général Python
    Réponses: 2
    Dernier message: 26/02/2009, 04h04
  4. Réponses: 1
    Dernier message: 24/05/2008, 17h04
  5. [SWIG] dialogue entre code C et code python
    Par dmichel dans le forum Interfaçage autre langage
    Réponses: 12
    Dernier message: 19/12/2007, 21h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo