2011-06-17 20 views
21

हो सकता है कि यह प्रश्न थोड़ा बेवकूफ है लेकिन मुझे नहीं पता कि एक चर मूलभूत है या नहीं। जावा में यह इस तरह है:जांचें कि कोई चर का प्रकार आदिम

if var.isPrimitive(): 

धन्यवाद। भी

primitive = (int, str, bool, ...) 

def is_primitive(thing): 
    return isinstance(thing, primitive) 

लेकिन तब आप इस आदिम पर विचार करें:

+8

पायथन में एक "आदिम" प्रकार क्या है? :) (कुछ प्रकार एक्ट * थोड़ा मजाकिया * सीपीथन 2 में।एक्स, क्योंकि वे कैसे [मूल रूप से] लागू किए गए हैं, फिर भी "आदिम" प्रकार की कोई धारणा नहीं है।) –

+2

"आदिम" से आपका क्या मतलब है? मुझे नहीं लगता कि पाइथन के पास जावा की तरह प्राइमेटिव हैं। –

+0

अच्छी तरह से, मुझे लगता है कि यह एक बूल या एक स्ट्र, या एक संख्यात्मक चर है ... – telekinki

उत्तर

0

यदि यह मदद करता है,

In [1]: type(1) 
Out[1]: <type 'int'> 

In [2]: type('a') 
Out[2]: <type 'str'> 

In [3]: (type(5.4) 
Out[3]: <type 'float'> 

In [5]: type(object) 
Out[5]: <type 'type'> 

In [8]: type(int) 
Out[8]: <type 'type'> 
31

के बाद से वहाँ पायथन में कोई आदिम प्रकार के होते हैं, आप अपने आप को परिभाषित करना होगा कि तुम क्या आदिम पर विचार :

class MyStr(str): 
    ... 

?

यदि नहीं, तो आप ऐसा कर सकते हैं:

def is_primitive(thing): 
    return type(thing) in primitive 
2

यह निश्चित रूप से क्या विचार करने के लिए अजगर में 'आदिम' कहने के लिए आसान नहीं है। लेकिन अगर आप एक सूची बना सकते हैं और सभी की जांच आप चाहते हैं:

is_primitive = isinstance(myvar, (int, float, bool)) # extend the list to taste 
6

आप types मॉड्यूल, बस इतना ही अजगर में निर्मित प्रकार सूचीबद्ध करता है पर एक नज़र लेने के लिए कर सकते हैं।

http://docs.python.org/library/types.html

21

अजगर में, सब कुछ एक वस्तु है; यहां तक ​​कि स्याही और बूल भी। तो यदि 'आदिम' से आपका मतलब है "ऑब्जेक्ट नहीं" (जैसा कि मुझे लगता है कि शब्द जावा में प्रयोग किया जाता है), तो पाइथन में ऐसे कोई प्रकार नहीं हैं।

यदि आप जानना चाहते हैं कि किसी दिए गए मान (याद रखें, पाइथन चर में टाइप नहीं है, केवल मान हैं) एक int, float, bool या जो भी प्रकार आप 'आदिम' के रूप में सोचते हैं, तो आप कर सकते हैं :

if type(myval) in (int, float, bool, str ...): 
     # Sneaky stuff 

(की आवश्यकता है मैं उल्लेख प्रकार भी वस्तुओं रहे हैं कि उनकी खुद की एक प्रकार के साथ,?)

आप भी प्रकार है कि उपवर्ग में निर्मित प्रकार, बाहर की जाँच बनाया के लिए खाते में करने की जरूरत है -इनइंस्टेंस() फ़ंक्शन।

पायथन गुरु कोड लिखने का प्रयास करते हैं जो कि किस प्रकार के प्रकार भेजे जाएंगे, इसकी न्यूनतम धारणाएं होती हैं। यह अनुमति भाषा की ताकत में से एक है: यह अक्सर कोड को अप्रत्याशित तरीकों से काम करने की अनुमति देता है। तो आप लेखन कोड से बचना चाह सकते हैं जो प्रकारों के बीच मनमाना अंतर बनाता है।

+1

ठीक है, तो अगर सबकुछ एक वस्तु है, तो मैं "1" क्यों कर सकता हूं .__ eq __ ("2") => गलत, लेकिन 1 नहीं .__ eq __ (2) => सिंटेक्स त्रुटि: अमान्य वाक्यविन्यास? आश्चर्यजनक ... –

+4

ऐसा इसलिए है क्योंकि एक संख्या में एक बिंदु शामिल हो सकता है (उदा। 1.23 केवल एक संख्या है, जैसा कि 0.e2 है)। यह पार्सर को भ्रमित करता है। यदि आप संख्या कोष्ठक में लपेटते हैं, तो यह काम करेगा। (1) .__ ईक्यू __ (2) => झूठी। हालांकि, आपको शायद ही कभी पायथन में ऐसा करने की ज़रूरत है। – jforberg

17

जैसा कि हर कोई कहता है, पाइथन में कोई आदिम प्रकार नहीं है। लेकिन मुझे विश्वास है, यह वही है जो आप चाहते हैं।

def isPrimitive(obj): 
    return not hasattr(obj, '__dict__') 

isPrimitive(1) => True 
isPrimitive("sample") => True 
isPrimitive(213.1311) => True 
isPrimitive({}) => True 
isPrimitive([]) => True 
isPrimitive(()) => True 


class P: 
    pass 

isPrimitive(P) => False 
isPrimitive(P()) => False 

def func(): 
    pass 

isPrimitive(func) => False 
+0

+1 क्या आप एक स्पष्टीकरण जोड़ सकते हैं? – mr2ert

+0

तो इस नियम से, * प्रकार * और * फ़ंक्शन * आदिम नहीं हैं? मुझे यकीन है कि ओपी के अपने कोड को फिर से भरने का एक तरीका है ताकि इसे 'आदिम' और 'कुल' प्रकारों के बीच मनमाने ढंग से भेद की आवश्यकता न हो। – jforberg

+1

मुझे लगता है कि एक आदिम क्या है और मानक वर्ग या अंतर्निर्मित फ़ंक्शन क्या है इसके साथ कुछ भ्रम है। Primitives आदिम हैं, वे सरल हैं और डेटा के एक टुकड़े का प्रतिनिधित्व करते हैं। __dict__ एक विशेष विशेषता है जिसका उपयोग ऑब्जेक्ट (लिखने योग्य) विशेषताओं को संग्रहीत करने के लिए किया जाता है। यदि वस्तु में गुण नहीं हैं, तो यह एक आदिम है। यदि आप उदाहरण के लिए उपर्युक्त फ़ंक्शन int पास करते हैं या str: isprrimitive (int) यह गलत कहेंगे क्योंकि इसमें __dict__ विशेषता है। इसलिए कक्षाओं और कार्यों को आदिम के रूप में नहीं माना जाता है, भले ही एक int या str या float, आदि .. डेटा का टुकड़ा एक आदिम है – radtek

0

यह काम करता है:

try: 
    import builtins 
except ImportError: 
    import __builtin__ as builtins 

def get_primitives(): 
    return list(filter(lambda x: not x.startswith('_'), dir(builtins))) 

अजगर 3.6:

In [241]: get_primitives() 
Out[241]: 
['ArithmeticError', 
'AssertionError', 
'AttributeError', 
'BaseException', 
'BlockingIOError', 
'BrokenPipeError', 
'BufferError', 
'BytesWarning', 
'ChildProcessError', 
'ConnectionAbortedError', 
'ConnectionError', 
'ConnectionRefusedError', 
'ConnectionResetError', 
'DeprecationWarning', 
'EOFError', 
'Ellipsis', 
'EnvironmentError', 
'Exception', 
'False', 
'FileExistsError', 
'FileNotFoundError', 
'FloatingPointError', 
'FutureWarning', 
'GeneratorExit', 
'IOError', 
'ImportError', 
'ImportWarning', 
'IndentationError', 
'IndexError', 
'InterruptedError', 
'IsADirectoryError', 
'KeyError', 
'KeyboardInterrupt', 
'LookupError', 
'MemoryError', 
'ModuleNotFoundError', 
'NameError', 
'None', 
'NotADirectoryError', 
'NotImplemented', 
'NotImplementedError', 
'OSError', 
'OverflowError', 
'PendingDeprecationWarning', 
'PermissionError', 
'ProcessLookupError', 
'RecursionError', 
'ReferenceError', 
'ResourceWarning', 
'RuntimeError', 
'RuntimeWarning', 
'StopAsyncIteration', 
'StopIteration', 
'SyntaxError', 
'SyntaxWarning', 
'SystemError', 
'SystemExit', 
'TabError', 
'TimeoutError', 
'True', 
'TypeError', 
'UnboundLocalError', 
'UnicodeDecodeError', 
'UnicodeEncodeError', 
'UnicodeError', 
'UnicodeTranslateError', 
'UnicodeWarning', 
'UserWarning', 
'ValueError', 
'Warning', 
'ZeroDivisionError', 
'abs', 
'all', 
'any', 
'ascii', 
'bin', 
'bool', 
'bytearray', 
'bytes', 
'callable', 
'chr', 
'classmethod', 
'compile', 
'complex', 
'copyright', 
'credits', 
'delattr', 
'dict', 
'dir', 
'display', 
'divmod', 
'enumerate', 
'eval', 
'exec', 
'filter', 
'float', 
'format', 
'frozenset', 
'get_ipython', 
'getattr', 
'globals', 
'hasattr', 
'hash', 
'help', 
'hex', 
'id', 
'input', 
'int', 
'isinstance', 
'issubclass', 
'iter', 
'len', 
'license', 
'list', 
'locals', 
'map', 
'max', 
'memoryview', 
'min', 
'next', 
'object', 
'oct', 
'open', 
'ord', 
'pow', 
'print', 
'property', 
'range', 
'repr', 
'reversed', 
'round', 
'set', 
'setattr', 
'slice', 
'sorted', 
'staticmethod', 
'str', 
'sum', 
'super', 
'tuple', 
'type', 
'vars', 
'zip'] 

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