क्या यह जांचने का एक तरीका है कि अजगर में एक चर का प्रकार एक है string
, जैसे:
isinstance(x,int);
पूर्णांक मानों के लिए?
isinstance(True, int) is True
।
isinstance(x,str)
पायथन 3 में सही है (str एक मूल प्रकार है)।
क्या यह जांचने का एक तरीका है कि अजगर में एक चर का प्रकार एक है string
, जैसे:
isinstance(x,int);
पूर्णांक मानों के लिए?
isinstance(True, int) is True
।
isinstance(x,str)
पायथन 3 में सही है (str एक मूल प्रकार है)।
जवाबों:
पायथन 2.x में, आप करेंगे
isinstance(s, basestring)
basestring
का सार सुपरक्लास है str
और unicode
। यह परीक्षण करने के लिए एक वस्तु का एक उदाहरण है कि क्या किया जा सकता है str
या unicode
।
पायथन 3.x में, सही परीक्षण है
isinstance(s, str)
bytes
वर्ग पायथन 3 में एक स्ट्रिंग प्रकार माना जाता है।
unicode
वस्तुओं को याद करेगा , जिसे स्ट्रिंग्स भी माना जाना चाहिए। दोनों प्रकार str
और प्रकार unicode
में सामान्य आधार वर्ग है basestring
, और यह वह है जिसे आप जांचना चाहते हैं।
basestring = str
।
unicode
है। पायथन 2 और 3 के बीच संगतता के लिए मेरी सिफारिश "छह" लाइब्रेरी का उपयोग करना है। (विशेष रूप isintance(s, six.string_types)
से इस मामले में)
मुझे पता है कि यह एक पुराना विषय है, लेकिन पहला ऐसा है जो Google पर दिखाया गया है और यह देखते हुए कि मुझे कोई भी उत्तर संतोषजनक नहीं मिलता है, मैं इसे भविष्य के संदर्भ के लिए यहां छोड़ दूंगा:
छह एक पायथन 2 और 3 संगतता पुस्तकालय है जो पहले से ही इस मुद्दे को कवर करता है। फिर आप कुछ इस तरह से कर सकते हैं:
import six
if isinstance(value, six.string_types):
pass # It's a string !!
कोड का निरीक्षण, यह वही है जो आप पाते हैं:
import sys
PY3 = sys.version_info[0] == 3
if PY3:
string_types = str,
else:
string_types = basestring,
value_is_string = isinstance(value, str if sys.version_info[0] >= 3 else basestring)
जहां >=
किसी भी अंतिम पायथन को मान लिया जाता है 4+ str
स्ट्रिंग्स के लिए रूट क्लास रखता है ।
पायथन 3.x या पायथन 2.7.6 में
if type(x) == str:
==
PEP8 द्वारा प्रकारों की तुलना करना स्पष्ट रूप से हतोत्साहित करता है, और "यूनिडायमैटिक" माने जाने वाले इसके अलावा कई डाउनसाइड्स हैं, उदाहरण के लिए, यह उपवर्गों के उदाहरणों का पता नहीं लगाता है str
, जिन्हें स्ट्रिंग्स भी माना जाना चाहिए। यदि आप वास्तव में ठीक प्रकार की जांच करना चाहते हैं str
और उपवर्गों को स्पष्ट रूप से बाहर करना चाहते हैं , तो उपयोग करें type(x) is str
।
टाइप मॉड्यूल भी मौजूद है यदि आप अधिक से अधिक इन्टिंग्स और स्ट्रिंग्स की जाँच कर रहे हैं। http://docs.python.org/library/types.html
types.StringTypes
।
नीचे बेहतर उत्तर के आधार पर संपादित करें। 3 उत्तरों के बारे में नीचे जाएं और बेसस्ट्रिंग की ठंडक के बारे में पता करें।
पुराना उत्तर: यूनिकोड स्ट्रिंग्स के लिए देखें, जिसे आप विंडोज में सभी COM कॉल सहित कई स्थानों से प्राप्त कर सकते हैं।
if isinstance(target, str) or isinstance(target, unicode):
isinstance()
दूसरे तर्क के रूप में एक तुक भी लेता है । तो अगर basestring
मौजूद नहीं था, तो भी आप उपयोग कर सकते हैं isinstance(target, (str, unicode))
।
unicode
परिभाषित नहीं दिखाई देता है:NameError: name 'unicode' is not defined
चूंकि basestring
पायथन 3 में परिभाषित नहीं किया गया है, यह छोटी चाल कोड को संगत बनाने में मदद कर सकती है:
try: # check whether python knows about 'basestring'
basestring
except NameError: # no, it doesn't (it's Python3); use 'str' instead
basestring=str
उसके बाद आप Python2 और Python3 दोनों पर निम्न परीक्षण चला सकते हैं
isinstance(myvar, basestring)
basestring = (str, bytes)
यूनिकोड सहित पायथन 2/3
from __future__ import unicode_literals
from builtins import str # pip install future
isinstance('asdf', str) # True
isinstance(u'asdf', str) # True
type('foo')
रही unicode
है, और दूसरी एक str
उदाहरण है unicode
। Th Py Pyon 2 में कोड को वैध बनाता है और 3. फिर से धन्यवाद!
इसके अलावा, मैं नोटिस चाहता हूं कि यदि आप जांचना चाहते हैं कि चर का प्रकार एक विशिष्ट प्रकार है, तो आप चर के प्रकार की तुलना किसी ज्ञात वस्तु के प्रकार से कर सकते हैं।
स्ट्रिंग के लिए आप इसका उपयोग कर सकते हैं
type(s) == type('')
str
? यूनिकोड स्ट्रिंग्स के बारे में क्या, जो str
2.x में से भी वारिस नहीं है ? isinstance(s, basestring)
2.x में, या isinstance(s, str)
3.x में उपयोग करें ।
isinstance()
उपवर्गों के लिए अनुमति देता है (जो कि तार भी हैं, बस विशेष), अतिरिक्त type('')
कॉल निरर्थक है जब आप बस उपयोग कर सकते हैं str
और प्रकार एकल होते हैं, इसलिए type(s) is str
एक अधिक कुशल परीक्षण होने जा रहा है।
यहां दूसरों द्वारा दिए गए अच्छे सुझावों के बहुत सारे, लेकिन मुझे एक अच्छा क्रॉस-प्लेटफ़ॉर्म सारांश नहीं दिखता है। किसी भी पायथन कार्यक्रम के लिए एक अच्छी गिरावट होनी चाहिए:
def isstring(s):
# if we use Python 3
if (sys.version_info[0] >= 3):
return isinstance(s, str)
# we use Python 2
return isinstance(s, basestring)
इस फ़ंक्शन में, हम यह isinstance(object, classinfo)
देखने के लिए उपयोग करते हैं कि हमारा इनपुट str
पायथन 3 में है या basestring
पायथन 2 में।
>=
कम से कम विचार करें ।
a = '1000' # also tested for 'abc100', 'a100bc', '100abc'
isinstance(a, str) or isinstance(a, unicode)
सच लौटाता है
type(a) in [str, unicode]
सच लौटाता है
इन आवश्यकताओं के साथ-साथ अजगर 2 और अजगर 3 दोनों का समर्थन करने का मेरा जवाब यहाँ है:
six
कंप्यूटर मॉड्यूल का उपयोग करने से बचें या जैसा कि वे दूर करना चाहते हैं जो हासिल करने की कोशिश कर रहे हैं।import sys
PY2 = sys.version_info.major == 2
# Check if string (lenient for byte-strings on Py2):
isinstance('abc', basestring if PY2 else str)
# Check if strictly a string (unicode-string):
isinstance('abc', unicode if PY2 else str)
# Check if either string (unicode-string) or byte-string:
isinstance('abc', basestring if PY2 else (str, bytes))
# Check for byte-string (Py3 and Py2.7):
isinstance('abc', bytes)
यदि आप बाहरी देयताओं पर निर्भर नहीं होना चाहते हैं, तो यह पायथन 2.7+ और पायथन 3 ( http://ideone.com/uB4Kdc ) दोनों के लिए काम करता है :
# your code goes here
s = ["test"];
#s = "test";
isString = False;
if(isinstance(s, str)):
isString = True;
try:
if(isinstance(s, basestring)):
isString = True;
except NameError:
pass;
if(isString):
print("String");
else:
print("Not String");
आप केवल यह सुनिश्चित करने के लिए आइंस्टीन फ़ंक्शन का उपयोग कर सकते हैं कि इनपुट डेटा प्रारूप स्ट्रिंग या यूनिकोड का है । नीचे दिए गए उदाहरण आपको आसानी से समझने में मदद करेंगे।
>>> isinstance('my string', str)
True
>>> isinstance(12, str)
False
>>> isinstance('my string', unicode)
False
>>> isinstance(u'my string', unicode)
True
s = '123'
issubclass(s.__class__, str)
यह मेरा इसे करने का तरीका है:
if type(x) == type(str()):
type(str())
कहने का एक बहुत ही गोल चक्कर रास्ता है str
। प्रकार एकल हैं, इसलिए type(x) is str
अधिक कुशल है। isinstance()
इसके बजाय का उपयोग किया जाना चाहिए, जब तक कि आपके पास उपवर्गों की उपेक्षा करने के लिए बहुत अच्छे कारण न हों str
।
>>> thing = 'foo'
>>> type(thing).__name__ == 'str' or type(thing).__name__ == 'unicode'
True
type(thing).__name__ == 'str'
से अधिक type(thing) == str
या isinstance(thing, str)
? unicode
पायथन के आधुनिक संस्करणों में भी मौजूद नहीं है।