Ich war in der Mitte einige Legacy-Code zu modernisieren, wenn ich in die folgende Zeile gestolpert:Was ist der beste Weg, um eine ungerade Zahl zu einer geraden zu runden?
rounded_val = (len(src_string)/2) * 2
Was es war es tat Vorteil Python's weird integer division nehmen, den Längenwert des Strings abzurunden, wenn ungerade, zum ersten geraden Wert vor ihm. Aber die Integer-Division wird sich in Python 3 ändern, und ich muss diese Zeile ändern. Zuerst dachte ich, dieses:
rounded_val = len(src_string) if len(src_string)%2 == 0 else len(src_string)-1
Aber das nennt len()
3 mal. Dann dachte ich daran, die ursprüngliche Idee zu verwenden, aber mit dem Etagenunterteilungsoperator //
, und dachte, es könnte weniger kompatibel sein, um es so zu machen, und dass ich math.floor()
stattdessen verwenden sollte (aber dann müsste ich einen anderen Import für math
haben).
Ich überlege das wahrscheinlich, aber was ist die optimale Möglichkeit, dies in Python zu tun?
PS: Die Ausgabe muss eine ganze Zahl sein.
Möchten Sie, dass ungerade Zahlen auf- oder abgerundet werden? –
Down, es ist in der Frage. –
Sie wissen, wie sie sagen * vorzeitige Optimierung ist die Wurzel allen Übels? * Der Unterschied zwischen der "langsamen" Funktion in Ihrer Frage und der ausgewählten Antwort ist 0,1 * Mikrosekunden *. Selbst wenn Sie eine Million dieser Berechnungen nacheinander durchgeführt haben, beträgt der Leistungsunterschied lediglich 100 Millisekunden. Die ausgewählte Antwort ist clever, aber wenn Ihre Mitarbeiter Bitmathematik nicht verstehen, verwenden Sie den expliziteren Operator für die Unterteilung in Unterteilungen. P.S. sag nicht "das sieht schneller aus" - beweise es. Python hat speziell dafür ein [timeit] (http://docs.python.org/2/library/timeit.html) Modul. – nemec