python - पाइथन असाइनमेंट क्यों मूल्य वापस नहीं करता है?




python-3.x language-design (4)

  1. पायथन का वाक्यविन्यास सी के सिंटैक्स की तुलना में बहुत कम वर्बोज़ है।
  2. सी से अधिक परिष्कृत दायरे के नियम हैं।
  3. प्रत्येक अभिव्यक्ति में कोष्ठक का उपयोग करने के लिए कोड पठनीयता कम हो जाती है और पायथन इससे बचा जाता है।

यदि आकलन अभिव्यक्ति थे, तो इन और कई अन्य सुविधाओं को फिर से काम करना होगा। मेरे लिए यह एक ऐसा सौदा है जो आपको ऐसे पठनीय कोड और उपयोगी सुविधाओं के लिए बनाना है। होने के लिए

if a and (h not in b): ...

बजाय

if (a && !(h in b)) { ... }

[क्लासिक के बारे में बात नहीं कर रहा है (अगर ए = बी :) त्रुटि की तरह।]

पाइथन एक अभिव्यक्ति के बजाय एक बयान क्यों असाइन करता है? यदि यह एक अभिव्यक्ति थी जो असाइनमेंट में दाईं ओर के मूल्य को वापस लौटाती है, तो उसने कुछ मामलों में बहुत कम वर्बोज़ कोड की अनुमति दी होगी। क्या कोई समस्या है जो मैं नहीं देख सकता?

उदाहरण के लिए:

# lst is some sequence
# X is come class
x = X()
lst.append(x)

जैसा कि फिर से लिखा जा सकता था:

lst.append(x = X())

खैर, सटीक होने के लिए, उपर्युक्त काम नहीं करेगा क्योंकि x को कीवर्ड तर्क के रूप में माना जाएगा। लेकिन माता-पिता की एक और जोड़ी (या कीवर्ड तर्कों के लिए एक और प्रतीक) ने इसका समाधान किया होगा।


असली दुनिया का जवाब: इसकी आवश्यकता नहीं है।

सी में आप जिन मामलों को देखते हैं, वे इस तथ्य के कारण हैं कि त्रुटि प्रबंधन मैन्युअल रूप से किया जाता है:

if((fd = open("file", O_RDONLY)) == -1)
{
    // error handling
}

इसी प्रकार कई लूप लिखे गए हैं:

while(i++ < 10)
    ;

पाइथन में इन आम मामलों को अलग-अलग किया जाता है। त्रुटि प्रबंधन आमतौर पर अपवाद हैंडलिंग का उपयोग करता है; लूप आमतौर पर iterators का उपयोग करें।

इसके खिलाफ तर्क जरूरी नहीं है कि वे पृथ्वी-टूटने वाले हों, लेकिन वे इस तथ्य के खिलाफ वजन कम कर रहे हैं कि यह पाइथन में इतना महत्वपूर्ण नहीं है।


ऐसे कई लोग हैं जो महसूस करते हैं कि असाइनमेंट अभिव्यक्तियां हैं, खासतौर पर पाइथन जैसी भाषाओं में जहां किसी भी मूल्य को किसी शर्त में स्वीकार्य है (केवल कुछ बूलियन प्रकार के मूल्य नहीं), त्रुटि-प्रवण है। संभवतः Guido उन लोगों में से एक था जो इस तरह महसूस करते हैं। क्लासिक त्रुटि है:

if x = y: # oops! meant to say ==

पाइथन में स्थिति सी जैसी भाषा में थोड़ी अधिक जटिल है, क्योंकि पाइथन में एक चर के लिए पहला असाइनमेंट भी इसकी घोषणा है। उदाहरण के लिए:

def f():
    print x

def g():
    x = h()
    print x

इन दो कार्यों में " print x " लाइनें अलग-अलग चीजें करती हैं: एक वैश्विक चर x को संदर्भित करता है, और दूसरा स्थानीय चर x को संदर्भित करता है। असाइनमेंट के कारण g में x स्थानीय है। यदि यह कुछ बड़ी अभिव्यक्ति / कथन के अंदर असाइनमेंट को दफनाना संभव था तो यह और भी भ्रमित हो सकता है (यह पहले से ही है)।


मुझे विश्वास है कि कुछ क्लासिक त्रुटियों को रोकने के लिए यह गिडो के हिस्से पर जानबूझकर था। उदाहरण के लिए

if x = 3: print x

जब आप वास्तव में कहना चाहते थे

if x == 3: ...

मैं इस बात से सहमत हूं कि कई बार मैं काम करता हूं कि यह काम करेगा, लेकिन मुझे कोड के ब्लॉक के आसपास { और } भी याद आती है, और यह सुनिश्चित नहीं है कि वह बदलाव नहीं करेगा।







language-design