यह केवल आश्वस्त करता है कि दो बाइट n
बार प्रदान किए जाते हैं ताकि सरणी का आकार n
के बराबर होगा। यदि '\0'
प्रदान किया गया था, परिणामी सरणी में size == n//2
(due to the type-code 'H'
requiring 2
bytes) होगा; जो स्पष्ट रूप से काउंटर सहज है:
>>> array('H', b'\0\0' * 10)
array('H', [0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
के रूप में:
>>> array('H', '\0' * 10) # 5 elements
array('H', [0, 0, 0, 0, 0])
>>> array('H', '\0\0' * 10) # 10 elements
array('H', [0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
ध्यान दें कि, अजगर 3
में, आप initializer
तर्क array
के रूप में काम करने के लिए यदि आप ही टुकड़ा आवश्यकता चाहिएprovide a bytes
object आप Python 2 में u''
स्ट्रिंग भी प्रदान नहीं कर सकते हैं। इसके अलावा, व्यवहार बिल्कुल वही रहता है।
तो '\0\0'
सुविधा कारणों से है, और कुछ नहीं। '\0\0'
से कोई अर्थशास्त्र संलग्न नहीं है।
कोई अर्थ विज्ञान वास्तव में (के रूप में वे में करते हैं, उदाहरण के लिए C
) '\0'
या तो से जुड़े होते हैं '\0'
सिर्फ अजगर में एक और स्ट्रिंग है।
इस व्यवहार के लिए एक और उदाहरण के रूप में, 2
बाइट्स की एक न्यूनतम के साथ अहस्ताक्षरित ints के लिए 'I'
का एक प्रकार है-कोड के साथ एक सरणी का प्रारंभ हो जाती हैं लेकिन 4
64bit
पर अजगर का निर्माण करता है।
टुकड़ा आपके द्वारा दिए गए की भावना में, आप कुछ इस तरह कर रही द्वारा सरणी को प्रारंभ करेंगे:
>>> array('I', b'\0\0\0\0' * 10)
array('I', [0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
हाँ, चार बार b'\0'
स्ट्रिंग 10
तत्वों मिलता है।
एक अंतिम नोट के रूप में - निम्नलिखित समय अजगर 3 पर प्रदर्शन कर रहे हैं लेकिन 2 एक ही है - आप के लिए उत्सुक हों वह क्यों इस्तेमाल किया बजाय '\0\0\' * n
अधिक सहज ज्ञान युक्त दिखने [0] * n
प्रारंभ करने में सरणी खैर, यह काफी तेज है:
n = 10000
%timeit array('I', [0]*n)
1000 loops, best of 3: 212 µs per loop
%timeit array('I', b'\0\0\0\0'* n)
100000 loops, best of 3: 6.36 µs per loop
बेशक
, आप एक bytearray
array
को खिला द्वारा (के लिए 'b'
के अलावा अन्य प्रकार के कोड) बेहतर कर सकते हैं। एक तरह से अशक्त बाइट्स के साथ a bytearray
is by providing an int
as the number of items to initialize प्रारंभ करने में:
%timeit array('I', bytearray(n))
1000000 loops, best of 3: 1.72 µs per loop
लेकिन, अगर मैं सही ढंग से याद है, एक bytearray आरंभ की bytearray(int)
रास्ता 3.7+
:-) में पदावनत हो सकता है।