|
è un bitwise, logical or:
>>> 0 | 1
1
>>> 1 | 1
1
Ridurre chiamate il lambda
con il totale di funzionamento corrente e il valore successivo (integer) dell'uscita della funzione map()
. Quindi, si sta facendo quanto segue in un ciclo:
sum = 0
for chunk in map(int, ip.split(".")):
sum = (sum << 8) | chunk
dove map(int, ip.split("."))
trasformato l'indirizzo IP in una sequenza di numeri interi; 1.2.3.4
diventa [1, 2, 3, 4]
.
Il <<
è un bitwise left shift, da 8 bit in questo caso:
>>> 1 << 8
256
Quindi, per ciascuna parte intera di un indirizzo IP, esso sposta il valore a sinistra di 8 posizioni, e aggiunge i bit della prossima parte dell'indirizzo a quel numero.
Questo ha perfettamente senso, poiché un indirizzo IP non è altro che un numero a 32 bit e la notazione di stringa divide quel numero in 4 blocchi di 8 bit e "stampa" il valore intero di ciascuno di questi 8 bit con un carattere .
in mezzo.
aiuta a stampare ogni fase come numero binario:
>>> map(int, '1.2.3.4'.split('.'))
[1, 2, 3, 4]
>>> bin(1)
'0b1'
>>> bin(2)
'0b10'
>>> bin(3)
'0b11'
>>> bin(4)
'0b100'
>>> bin(1 << 8)
'0b100000000'
>>> bin(1 << 8 | 2)
'0b100000010'
>>> bin((1 << 8 | 2) << 8)
'0b10000001000000000'
>>> bin((1 << 8 | 2) << 8 | 3)
'0b10000001000000011'
>>> bin(((1 << 8 | 2) << 8 | 3) << 8)
'0b1000000100000001100000000'
>>> bin(((1 << 8 | 2) << 8 | 3) << 8 | 4)
'0b1000000100000001100000100'
fonte
2012-10-31 10:55:10
come nota a margine, pitone include questo tipo di batterie: 'struct.unpack (, socket.inet_aton (ip 'I!')) [ 0] ' – georg
Mi chiedo quale sia la differenza di prestazioni? – Keith