Wende if-elseif-Anweisungen ins Wörterbuch

Ich habe den folgenden Code für einen RESTful Anruf zu einem Server:

def request(self, request, account_id, user): if request is 'get_id': #Get user from id result = requests.get(api_root + "/accounts/" + account_id + "/users/" + user, headers=self.headers) elif request is 'get_username': #Get user from username result = requests.get(api_root + "/accounts/" + account_id + "/users?username=" + user, headers=self.headers) elif request is 'get_email': #Get user from username result = requests.get(api_root + "/accounts/" + account_id + "/users?email=" + user, headers=self.headers) elif request is 'post': #Add user to new account result = requests.post(api_root + '/accounts/' + account_id + '/users', data=json.dumps(user), headers=self.headers) elif request is 'delete': #Delete user from account result = requests.delete(api_root + "/accounts/" + account_id + "/users/" + user, headers=self.headers) #Throw exception if non-200 response result.raise_for_status() #Print request result / status print "\nRequest " + request + " Result: " + result.text + "\nStatus: " + str(result.status_code) return result 

Ich weiß, das ist hässlich und ich wollte es in ein Wörterbuch umwandeln, so etwas wie:

 def request(self, request, account_id, user): url = api_root + "/accounts/" + account_id function_dictionary = {} function_dictionary['get_id'] = requests.get(url + "/users/" + user, headers=self.headers) function_dictionary['get_username'] = requests.get(api_root + "/accounts/" + account_id + "/users?username=" + user, headers=self.headers) function_dictionary['get_email'] = requests.get(api_root + "/accounts/" + account_id + "/users?email=" + user, headers=self.headers) function_dictionary['delete'] = requests.delete(url + "/users/" + user, headers=self.headers) function_dictionary['post'] = requests.post(url + '/users', data=json.dumps(user), headers=self.headers) result = function_dictionary.get(request) #Throw exception if non-200 response result.raise_for_status() return result 

Ich habe immer noch das Gefühl, dass ich es falsch mache. Kann jemand mir sagen, was die richtige Methode zu nähern, wenn / elseif Aussagen in Python ist?

Vielen Dank!

  • Gutes Design für die Veränderung der verschiedenen Kombination von Säulen in einer Tabelle
  • Delegierte in Python
  • Was ist der Unterschied zwischen Python-Dekorateuren und dem Dekorationsmuster?
  • Warum ist IoC / DI nicht in Python üblich?
  • Wie man eine Klasse automatisch registriert, wenn sie definiert ist
  • Dynamische Methode Bindung mit Vererbung in Python
  • One Solution collect form web for “Wende if-elseif-Anweisungen ins Wörterbuch”

    Mit einem dict zu ersetzen, if: elif: Loops ist sicherlich Pythonic, aber beachten Sie, dass in Ihrem Beispiel Sie fordern requests.get etc für jeden Fall, den Sie im Wörterbuch speichern, dh die Wörterbuchwerte sind die Ergebnisse dieser Anrufe.

    Eine Alternative wäre, die Funktion und die Argumente separat im Wörterbuch zu speichern:

     function_dict = {'get_id': (requests.get, # function (url + "/users/" + user,), # tuple of arguments {'headers': self.headers}), # dict of keyword args ...} 

    Jetzt können Sie verwenden

     func, args, kwargs = function_dict[request] result = func(*args, **kwargs) 

    Auch beachten Sie, dass das Vergleichen von Strings mit is eine schlechte Idee (obwohl es manchmal funktioniert ); Es ist besser zu verwenden == :

     if request == 'get_id': 
    Python ist die beste Programmiersprache der Welt.