2016-03-18 6 views
34

मैं क्यों Django 1.9 सूचियों [] सेटिंग, यूआरएल और अन्य विन्यास फाइलDjango 1.9 सेटिंग्स और यूआरएल में सूचियों [] के साथ tuples() को क्यों बदलता है?

में मैं सिर्फ Django 1.9 करने के लिए उन्नत के साथ बदल दिया tuples() और इन परिवर्तनों को देखा बिट जानने के लिए उत्सुक हूँ। उनके पीछे तर्क क्या है?

INSTALLED_APPS = [ 
    'django.contrib.admin', 
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.messages', 
    'django.contrib.staticfiles' 
    ] 

AUTH_PASSWORD_VALIDATORS = [ 
    { 
     'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', 
    }, 
    { 
     'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', 
    }, 
    { 
     'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', 
    }, 
    { 
     'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', 
    }, 
] 


STATICFILES_DIRS = [ 
    os.path.join(BASE_DIR, 'static'), 
] 

urls.py

urlpatterns = [ 
    url(r'^', admin.site.urls), 
] 

कुछ भी इन परिवर्तनों के कारण अलग अलग है?

उत्तर

53

यह मुद्दा #8846 (जोर मेरा) में समझाया गया है:

अपनी खुद की सेटिंग बनाने के लिए प्रलेखन में एक सिफारिश जो पढ़ता है "सेटिंग्स कि दृश्यों के लिए, सूचियों के बजाय tuples का उपयोग करें। यह पूरी तरह से प्रदर्शन के लिए है। "

यह बंक है। प्रोफाइलिंग से पता चलता है कि अधिकांश परिचालनों (निश्चित रूप से लूपिंग, जो हम सबसे अधिक अक्सर करने की संभावना रखते हैं) के लिए सूचियों की तुलना में तेज़ नहीं होते हैं। दूसरी तरफ, सूची-शाब्दिक वाक्यविन्यास का लाभ यह है कि जब आपके पास एक ही आइटम होता है और ट्रिपिंग कॉमा जैसे टुपल सिंटैक्स को छोड़ देता है तो यह एक ही मान पर नहीं गिरता है। सूची वाक्यविन्यास का उपयोग धीमा, अधिक सुगम और कम त्रुटि प्रवण है। में अक्सर व्यक्त किए गए दृश्य में व्यापक पायथन समुदाय लगता है कि ट्यूपल्स को को अपरिवर्तनीय सूचियों के रूप में नहीं माना जाना चाहिए। वे निश्चित लंबाई के रिकॉर्ड के रूप में लक्षित हैं - वास्तव में एक ट्यूपल की गणितीय अवधारणा अनुक्रम से काफी अलग है।

अधिक अद्यतित चर्चा के लिए this answer भी देखें।

एक और answer (सीधे इस समस्या से संबंधित नहीं) यह दर्शाता है कि तक पहुँचने तत्वों वास्तव में तेजी से एक list के साथ है।

अद्यतन और आगे की जानकारी: यह सही है कि उपर्युक्त मुद्दा साल पहले बंद कर दिया गया था, लेकिन मैंने इसे शामिल किया क्योंकि इसने निर्णय के पीछे तर्क को समझाया और कई समान चर्चाएं उसी टिकट का संदर्भ देती हैं। वास्तविक क्रियान्वयन निर्णय following discussion on django-developers कोर Django डेवलपर Aymeric Augustin द्वारा शुरू के बाद शुरू हो गया था:

1) इन सभी सेटिंग्स इसी तरह की बातों के दृश्यों हैं:

मैं उन्हें [सूचियों] दो कारणों के लिए पसंद करते हैं। इस तरह के मान सूचियों के साथ सबसे अच्छी तरह से प्रतिनिधित्व किए जाते हैं, जब तक कि उन्हें में अपरिवर्तनीय नहीं होना चाहिए, जो कि एक टुपल का उपयोग किया जा सकता है। (tuples दोनों पायथन में नाम "और" अपरिवर्तनीय सूचियों "के बिना नामित हैं।)

2) सूचियां "सिंगल-आइटम टुपल में लापता कॉमा" समस्या से ग्रस्त नहीं हैं जो शुरुआती और अनुभवी पायथनिस्टों को समान रूप से काटती है। Django भी सेटिंग्स के मुट्ठी भर के लिए इस गलती के खिलाफ बचाव करने के लिए कोड है। स्रोत में "tuple_settings" के लिए खोजें।

और सूचियों पर स्विच वास्तव में issue #24149 में हुआ जो उपर्युक्त चर्चा को भी संदर्भित करता है।

10

the release notes of 1.9 में, वहाँ है:

डिफ़ॉल्ट सेटिंग्स थे कि tuples हैं अब सूचीबद्ध करता

डिफ़ॉल्ट सेटिंग्स django.conf.global_settings में सूचियों और tuples का एक संयोजन थे। सभी सेटिंग्स जो पहले tuples थे अब सूचियां हैं।

तो ऐसा लगता है कि यह स्थिरता के लिए किया गया था। दोनों tuples और सूचियों को ठीक काम करना चाहिए। यदि आप 1 तत्व के साथ टुपल का उपयोग करते हैं, तो कॉमा (1,) याद रखें क्योंकि अन्यथा यह एक ट्यूपल नहीं है बल्कि माता-पिता में अभिव्यक्ति है।

urlpatterns के लिए, जिन्हें patterns() फ़ंक्शन का उपयोग करके परिभाषित किया जाता था, लेकिन इसे डीजेगो 1.8 में बहिष्कृत किया गया था, क्योंकि यूआरएल इंस्टेंस की सूची ठीक काम करती है। चूंकि भविष्य में फ़ंक्शन हटा दिया जाएगा, इसका उपयोग नए ऐप्स और प्रोजेक्ट में नहीं किया जाना चाहिए।

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