|
jest bitwise, logical or:
>>> 0 | 1
1
>>> 1 | 1
1
Zmniejszenie Wywołuje lambda
z obecnym SUMARYCZNY i następnej wartości (całkowitej) na wyjściu funkcji map()
. Tak, to jest w następujący sposób w pętli:
sum = 0
for chunk in map(int, ip.split(".")):
sum = (sum << 8) | chunk
gdzie map(int, ip.split("."))
okazało adres IP na ciąg liczb całkowitych; 1.2.3.4
staje się [1, 2, 3, 4]
.
<<
jest bitwise left shift przez 8 bitów w tym przypadku:
>>> 1 << 8
256
Tak, dla każdej części całkowitej adresu IP, to Zmienia wartość w lewo o 8 pozycjach, i dodaje bity następnej części adresu do tego numeru.
Ma to sens, ponieważ adres IP to nic innego jak liczba 32-bitowa, a notacja ciągu dzieli tę liczbę na 4 części o 8 bitach i "drukuje" całkowitą wartość każdego z tych 8 bitów ze znakiem .
pomiędzy.
Pomaga wydrukować każdą scenę w postaci liczby binarnej:
>>> 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'
Na marginesie, python zawiera tego rodzaju baterie: 'struct.unpack ('! I', socket.inet_aton (ip)) [ 0] ' – georg
Zastanawiam się, jaka jest różnica w wydajności? – Keith