|
एक bitwise, logical or है:
>>> 0 | 1
1
>>> 1 | 1
1
कम कॉल वर्तमान कुल चल रहा है और map()
फ़ंक्शन के परिणाम के अगले (पूर्णांक) मूल्य के साथ lambda
। इसलिए, यह क्या कर रहा है एक पाश में निम्नलिखित:
sum = 0
for chunk in map(int, ip.split(".")):
sum = (sum << 8) | chunk
जहां map(int, ip.split("."))
पूर्णांक के अनुक्रम में रखता आईपी पते बदल गया; 1.2.3.4
[1, 2, 3, 4]
बन जाता है।
<<
एक bitwise left shift, इस मामले में है 8 बिट द्वारा:
>>> 1 << 8
256
तो, एक आईपी पता से प्रत्येक पूर्णांक भाग के लिए, यह 8 पदों द्वारा छोड़ गए मूल्य बदलाव, और बिट्स कहते हैं पते के अगले भाग के उस नंबर पर।
यह सही समझ में आता है, क्योंकि आईपी पता 32-बिट संख्या के अलावा कुछ भी नहीं है, और स्ट्रिंग नोटेशन उस संख्या को 8 बिट्स के 4 हिस्सों में विभाजित करता है, और 'प्रिंट्स' उन 8 बिट्स में से प्रत्येक का पूर्णांक मान के बीच में .
चरित्र के साथ।
यह एक द्विआधारी संख्या के रूप में प्रत्येक चरण मुद्रित करने के लिए मदद करता है:
>>> 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'
स्रोत
2012-10-31 10:55:10
एक पक्ष नोट के रूप में में यह व्यक्त की तरह एक सा कह सकते हैं, अजगर बैटरी के इस प्रकार भी शामिल है 0] ' – georg
मुझे आश्चर्य है कि प्रदर्शन अंतर क्या है? – Keith