2010-06-21 15 views
8

मेरे पास एक विधि है:पायथन: स्थिर पैरामीटर घोषित करने का कोई तरीका?

def foo(bar): 
    # ... 

क्या bar को स्थिर के रूप में चिह्नित करने का कोई तरीका है? जैसे कि "bar में मान नहीं बदला जा सकता" या "bar द्वारा इंगित ऑब्जेक्ट बदल नहीं सकता"।

+0

संदर्भ हमेशा 'const' हैं, लेकिन मान नहीं हैं (आप 'बार' बिंदुओं को नहीं बदल सकते हैं, लेकिन यदि 'बार' म्यूटेबल है तो आप अभी भी अपना' मूल्य बदल सकते हैं)। बेशक, यह वास्तव में * सच नहीं है, क्योंकि आप अपने माता-पिता के ढेर के फ्रेम के साथ डूब सकते हैं और 'बार' अंक बदल सकते हैं, लेकिन मानते हैं कि आप इस तरह की हैकरी का सहारा नहीं लेते हैं, नियम आम तौर पर लागू होता है। –

+1

@ निकबस्टिन: व्हा? 'बार = "बदल गया!" - मैंने अभी बदल दिया है' बार 'अंक' (को सही करने के लिए असाइन किया गया है)। –

+0

@EthanFurman: बिल्कुल नहीं। मेरा मुद्दा यह है कि आप पैरेंट स्टैक फ्रेम में 'बार' संदर्भों को नहीं बदल सकते हैं - आप निश्चित रूप से उस वस्तु को छुपाने के लिए स्थानीय रूप से नाम 'बार' असाइन कर सकते हैं, लेकिन वह ऑब्जेक्ट अभी भी मौजूद है और इसमें अपरिवर्तित बनी हुई है माता-पिता। –

उत्तर

5

यदि बार एक अतुलनीय वस्तु है, तो फ़ंक्शन के दौरान बार नहीं बदलेगा।

आप अपनी खुद की निरंतर वस्तु भी बना सकते हैं। The recipie here.

+0

ध्यान दें कि संशोधनों को रोकना समस्या को हल नहीं करता है। आप कैसे जानते हैं कि क्लाइंट कोड को ConstError का सामना नहीं करना पड़ेगा? केवल पर्याप्त परीक्षण के साथ। –

+0

'बार = 0' - मैंने बस बार बदल दिया (मूल ऑब्जेक्ट जिसे 'बार' को अप्रभावी बना दिया गया था)। –

-2

सं।

क्या बात है? यदि आप फ़ंक्शन लिख रहे हैं, तो यह सुनिश्चित करने के लिए पर तक नहीं है? या यदि आप फ़ंक्शन को कॉल कर रहे हैं, तो कौन परवाह करता है?

+0

यह अक्सर नीति का एक उपयोगी मामला है - आप उपयोगकर्ता को अपने फ़ंक्शन की सीमा के बारे में सूचित कर रहे हैं। बेशक, यह पायथन में ज्यादा समझ में नहीं आता है क्योंकि प्रोटोटाइप नहीं हैं, और बाधा को लागू करने के लिए कोई स्थैतिक कंपाइलर नहीं है। –

+7

बिंदु प्रोग्रामर को गलतियों से बचने में मदद करने के लिए, यथासंभव संभव है। अन्यथा हम सब कुछ असेंबली में लिखेंगे। –

+0

@ जेरेमी फ्राइज़नर: पायथन में, ऐसा करने के लिए "सही" तरीका सिर्फ एक टिप्पणी लिखना है। – carl

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