Short-Code ist nicht besser Code. Kurzcode ist kein schneller Code. Der Funktionscode ist kein wartbarer Code. Nun, das sagte, es ist gut, um Ihre einzelnen Komponenten prägnant und einfach zu machen.
hier, was ich tun würde:
def split_odd_even(number_list):
return {
'odds': filter(lambda n: (n % 2) != 0, number_list),
'evens': filter(lambda n: (n % 2) == 0, number_list)
}
def string_to_ints(string):
return map(int, numbers.strip().split())
numbers = '1 2 3 4 5 6 7 8 9 10'
nums = split_odd_even(string_to_ints(numbers))
print nums
Das gibt mir:
{'odds': [1, 3, 5, 7, 9], 'evens': [2, 4, 6, 8, 10]}
Während dieser Code tatsächlich hat ein paar Zeilen lang hinzugefügt, hat es viel mehr klar, was das Programm geworden ist tun, wie wir Abstraction angewendet haben und machte jede Komponente des Codes nur eine Sache gut.
Obwohl wir haben zwei Funktionen hinzugefügt, die am meisten sichtbaren Teil des Codes hat sich von dieser weg:
numbers = '1 2 3 4 5 6 7 8'
nums = {'evens': [], 'odds': []}
for number in numbers.split(' '):
if int(number) % 2:
nums['odds'].append(number)
else:
nums['evens'].append(number)
Um dies:
numbers = '1 2 3 4 5 6 7 8 9 10'
nums = split_odd_even(string_to_ints(numbers))
Und nur durch diese beiden Zeilen lesen Wir wissen, dass numbers
aus einer Zeichenfolge in eine Liste von int
s konvertiert wird, und dass wir diese Zahlen dann in ungerade und gerade aufteilen und das Ergebnis nums
zuweisen.
Um aa paar Dinge zu erklären, die nicht alle vertraut sind:
map()
ruft eine Funktion für jedes Element in einem list
(oder tuple
oder andere iterable) und gibt eine neue Liste mit das Ergebnis der Funktion, die für jeden Artikel aufgerufen wird. In diesem Fall verwenden wir es, um int()
für jedes Element in der Liste aufzurufen.
filter()
ruft eine Funktion für jedes Element in einer list
(oder tuple
oder anderer iterable), die True
oder False
für jedes Element zurückzugibt (na ja, truthy or falsey), und gibt eine Liste der Elemente, die zu True
ausgewertet, wenn die Funktion wird genannt.
Lambda-Ausdrücke (lambda
) sind wie "Mini-Funktionen", die Argumente übernehmen und in-Place erstellt werden können.
was Erledigen? –
Ihr Code ist leicht zu verstehen und ist nur eine Handvoll Zeilen lang. Es verwendet grundlegende Bausteine der Python-Kodierung. Ich bevorzuge es tatsächlich zu einigen der esoterischen Antworten –