codice corto è il codice non è migliore. Il codice breve non è un codice più veloce. Il codice breve non è un codice gestibile. Ora, detto questo, lo è buono per rendere i vostri singoli componenti concisi e semplici.
Ecco cosa farei:
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
Questo mi dà:
{'odds': [1, 3, 5, 7, 9], 'evens': [2, 4, 6, 8, 10]}
Anche se questo codice è in realtà aggiunto alcune righe di lunghezza, è diventato molto più chiaro ciò che il programma è facendo, come abbiamo applicato Abstraction e reso ogni componente del codice fare solo una cosa bene.
Anche se abbiamo aggiunto due funzioni, la parte più visibile del codice è passato da questa:
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)
A tal:
numbers = '1 2 3 4 5 6 7 8 9 10'
nums = split_odd_even(string_to_ints(numbers))
E solo leggendo queste due linee , sappiamo che numbers
viene convertito da una stringa in un elenco di int
s e che quindi suddividiamo questi numeri in pari e dispari e assegniamo il risultato a nums
.
Per spiegare paio aa di cose che potrebbe non essere familiare a tutti:
map()
chiama una funzione per ogni elemento in un list
(o tuple
o altro iterabile), e restituisce un nuovo elenco con il risultato della chiamata della funzione su ogni articolo. In questo caso, lo usiamo per chiamare int()
su ciascun elemento nell'elenco.
filter()
chiama una funzione per ogni elemento in un list
(o tuple
o altro iterabile), che restituisce True
o False
per ogni elemento (beh, truthy or falsey), e restituisce un elenco di elementi che ha valutato per True
quando la funzione è chiamato.
Lambda Expressions (lambda
) sono come "mini-funzioni" che accettano argomenti e possono essere creati sul posto.
compiere ciò? –
Il codice è facile da capire ed è lungo solo una manciata di righe. Usa i blocchi di base della codifica di Python. In realtà lo preferisco ad alcune delle risposte più esoteriche –