6 votes

Comment simplifier cette masse de "si" similaires ?

J'essaie de trouver un moyen de simplifier ce morceau de code. La logique de chaque condition "if" est fondamentalement la même, je veux donc me débarrasser des "if" en double :

      if "video_codec" in profile:
          self.video_codec = profile["video_codec"]
      if "resolution_width" in profile:
          self.resolution_width = profile["resolution_width"]
      if "resolution_height" in profile:
          self.resolution_height = profile["resolution_height"]
      if "ratio" in profile:
          self.ratio = profile["ratio"]
      if "video_bitrate" in profile:
          self.video_bitrate = profile["video_bitrate"]
      if "profile" in profile:
          self.profile = profile["profile"]
      if "audio_codec" in profile:
          self.audio_codec = profile["audio_codec"]
      if "audio_channels" in profile:
          self.audio_channels = profile["audio_channels"]
      if "audio_bitrate" in profile:
          self.audio_bitrate = profile["audio_bitrate"]

J'espère que cela peut être fait en 3-4 lignes au lieu de mes 18 lignes.

10voto

Jakob Bowyer Points 12873
for key, value in profile.iteritems():
    setattr(self, key, value)

Vous devriez faire ce que vous voulez

7voto

Andrew Clark Points 77748

Si vous souhaitez simplement copier toutes les paires clé/valeur de l'application profile aux attributs dans self vous pouvez utiliser ce qui suit :

self.__dict__.update(profile)

S'il y a des éléments dans profile que vous ne voulez pas copier, alors vous pouvez utiliser ce qui suit :

for attr in ("video_codec", "resolution_width", "resolution_height", "video_bitrate", 
             "ratio", "profile", "audio_codec", "audio_channels", "audio_bitrate"):
    if attr in profile: 
        setattr(self, attr, profile[attr])

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X