2012-07-02 12 views
5

पायथन के परीक्षण के लिए स्ट्रिंग के लिए फ़ंक्शन है कि सभी वर्ण अंक हैं: string.isdigit()string.isdigit() लोकेल कैसे और क्यों निर्भर है?

पुस्तिका में लिखा है:

8-बिट श्रृंखला के लिए, इस विधि वातावरण पर निर्भर है

कैसे इस विधि स्थान-depedent है? 0-9 रेंज के बाहर कौन से स्थान हैं?

इसके अलावा, यदि यह लोकेल निर्भर है, तो क्या पाइथन के पास एक विशिष्ट लोकेल (यानी केवल 0-9 अंक) के साथ जांच करने का तरीका होता है।

+3

http://en.wikipedia.org/wiki/Glyphs_used_with_the_Hindu-Arabic_numeral_system#Symbols – interjay

+0

मैं मैनुअल के लिए लगता है कि बस का अर्थ है कि वास्तविक 8 बिट चरित्र कोड स्थान पर निर्भर कर रहे हैं, कि वर्ण नहीं हैं नहीं टी 0-9। – martineau

उत्तर

1

क्या पाइथन के पास एक विशिष्ट लोकेल (यानी केवल 0-9 अंक) के साथ जांच करने का एक तरीका है।

सबसे आसान तरीका:

>>> '1' in '1234567890' 
True 
>>> 'a' in '1234567890' 
False 

आपका भी ord जांच कर सकते हैं, यह तेजी से हो सकता है (isn't):

>>> ord('0') <= ord('a') <= ord('9') 
False 
>>> ord('0') <= ord('5') <= ord('9') 
True 
+0

एक वैश्विक फ़ंक्शन देखकर और इसे कॉल करना, तीन बार, स्थानीय लोड करने और सी – delnan

+0

युप में 10 वर्ण तुलना करने से तेज़ नहीं होना चाहिए, पहला तेज़ है। जोड़ा बेंचमार्क – Kos

+0

यह केवल एक वर्ण की जांच करता है, न कि अंकों की पूरी स्ट्रिंग। –

4

CPython सी समारोह का उपयोग करता है "isdigit" तारों पर is_digit विधि के लिए (stringobject.c देखें)। इस संबंधित धागे को देखें: Can isdigit legitimately be locale dependent in C

जाहिर है, इसे 0xB2 ('²'), 0xB3 ('³'), 0xB3 ('³'), 0xB9 ('¹') जैसे सुपरस्क्रिप्ट अंकों के साथ करना है।

HTH

संबंधित मुद्दे