2016-07-06 5 views
8

मैं PEP 484 -- Type Hintsपायथन में टाइप संकेतों के लाभ क्या होंगे?

के माध्यम से पढ़ रहा था, तो फ़ंक्शन इसे स्वीकार किए जाने वाले तर्कों के प्रकार को निर्दिष्ट करता है और वापस लौटाता है।

def greeting(name: str) -> str: 
    return 'Hello ' + name 

मेरा सवाल यह है कि लागू होने पर पायथन के साथ संकेत देने के लाभ क्या हैं?

मैंने टाइपस्क्रिप्ट का उपयोग किया है, जहां प्रकार उपयोगी हैं (जैसे कि जावास्क्रिप्ट टाइप पहचान के मामले में थोड़े मूर्ख हैं), जबकि पाइथन प्रकार के साथ बुद्धिमान हो रहा है, तो लागू होने पर संकेतों को पाइथन में लाया जा सकता है? क्या यह अजगर प्रदर्शन में सुधार करता है?

+3

ही स्फूर्ति आप जुड़ा हुआ प्रदर्शित होने वाली "इसके बजाय, प्रस्ताव एक अलग बंद लाइन प्रकार चेकर जो उपयोगकर्ताओं को स्वेच्छा से अपने स्रोत कोड के ऊपर चला सकते हैं के अस्तित्व एक बहुत शक्तिशाली लिंटर के रूप में मान लिया गया है। मूलतः, इस तरह के एक प्रकार चेकर में कार्य करता है " मैं कहूंगा कि इसका मूल्य उस समय की रनटाइम त्रुटियों से बचने के लिए एक बिल्ड टाइम सिंटैक्स चेक होना है। – salparadise

+0

मुझे कहीं याद है कि इरादे में से एक टूलिंग और ढांचे था। उदाहरण के लिए, एक जीयूआई ढांचा यह जांचने में सक्षम हो सकता है कि एक * int * एंट्री फ़ील्ड केवल वैध/अनुमति देने के लिए सेट की गई थी। –

उत्तर

6

प्रकार हिंट करने में मदद कर सकते हैं:

  1. डेटा सत्यापन और कोड की गुणवत्ता (आप भी ज़ोर से यह कर सकते हैं)।
  2. कोड की गति अगर कुछ धारणा के बाद संकलित किया गया कोड लिया जा सकता है और बेहतर मेमोरी प्रबंधन किया जा सकता है।
  3. दस्तावेज़ीकरण कोड और पठनीयता।

मैं प्रकार हिंट करने की सामान्य कमी को भी लाभ होता है:

  1. अधिक तेज प्रोटोटाइप।
  2. अधिकांश मामलों में संकेत प्रकार की कमी की कमी - बतख हमेशा बतख - क्या यह परिवर्तनीय व्यवहार करेगा, बतख की तरह व्यवहार नहीं करेगा बिना संकेत के त्रुटियों।
  3. पठनीयता - वास्तव में हमें ज्यादातर मामलों में किसी भी प्रकार की संकेत की आवश्यकता नहीं है।

मुझे लगता है कि अच्छा है कि प्रकार हिंट वैकल्पिक जावा, सी की तरह ++ की आवश्यकता नहीं है - अनुकूलन से अधिक रचनात्मकता को मारता है - हम वास्तव में किस प्रकार पर ध्यान केंद्रित करने की जरूरत नहीं चर के लिए, लेकिन पहले एल्गोरिदम पर होगा - मैं व्यक्तिगत रूप से बेहतर है कि लगता है जावा :) में

def f(x): 
    return x * x 

इसके बजाय

int f(int x) 
{ 
    return x * x 
} 

long f(long x) 
{ 
    return x * x 
} 

long long f(int long) 
{ 
    return x * x 
} 

... या उपयोग टेम्पलेट्स/जेनरिक की तरह साधारण समारोह को परिभाषित करने के कोड के बजाय 4 में से एक लाइन लिखने

+०१२३५१६४१०६१
6

def add1(x: int, y: int) -> int: 
    return x + y 

और एक सामान्य समारोह टाइप किया समारोह का एक उदाहरण ही लें।

def add2(x,y): 
    return x + y 

प्रकार add1

add1("foo", "bar") 

पर mypy साथ जाँच

error: Argument 1 to "add1" has incompatible type "str"; expected "int" 
error: Argument 2 to "add2" has incompatible type "str"; expected "int" 

add2 पर विभिन्न इनपुट प्रकार के लिए आउटपुट में परिणाम होगा,

>>> add2(1,2) 
3 

>>> add2("foo" ,"bar") 
'foobar' 

>>> add2(["foo"] ,['a', 'b']) 
['foo', 'a', 'b'] 

>>> add2(("foo",) ,('a', 'b')) 
('foo', 'a', 'b') 

>>> add2(1.2, 2) 
3.2 

>>> add2(1.2, 2.3) 
3.5 

>>> add2("foo" ,['a', 'b']) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "<stdin>", line 2, in add 
TypeError: cannot concatenate 'str' and 'list' objects 

ध्यान दें कि add2 सामान्य है। एक TypeError लाइन निष्पादित होने के बाद ही उठाया जाता है, आप टाइपिंग जांच के साथ इससे बच सकते हैं। टाइपिंग जांच आपको बहुत शुरुआत में टाइप मिस्चैच की पहचान करने देती है।

सकारात्मक:

  • आसान डिबगिंग == समय बचाया
  • कम मैनुअल प्रकार की जाँच
  • आसान प्रलेखन

विपक्ष:

  • पायथन कोड की ट्रेडिंग सुंदरता।
संबंधित मुद्दे