क्या बहु-पंक्ति आयात के लिए अनुशंसित प्रारूप है?


114

मैंने पढ़ा है कि अजगर में मल्टी-लाइन आयात कोडिंग के तीन तरीके हैं

स्लैश के साथ:

from Tkinter import Tk, Frame, Button, Entry, Canvas, Text, \
    LEFT, DISABLED, NORMAL, RIDGE, END

डुप्लिकेटिंग प्रेषक:

from Tkinter import Tk, Frame, Button, Entry, Canvas, Text
from Tkinter import LEFT, DISABLED, NORMAL, RIDGE, END

कोष्ठक के साथ:

from Tkinter import (Tk, Frame, Button, Entry, Canvas, Text,
    LEFT, DISABLED, NORMAL, RIDGE, END)

क्या इस कथन के लिए एक पुन: संशोधित प्रारूप या अधिक सुरुचिपूर्ण तरीका है?


3
इतने सारे आयातों के साथ, सिर्फ क्यों नहीं from Tkinter import *?
इबर रोज

2
यह एक उदाहरण है। ते असली बयान है, from data.forms import AddressEmbeddedField, PhoneEmbeddedField, MailEmbeddedField, \ WebEmbeddedFieldलेकिन data.forms में सभी एम्बेडेड क्षेत्रों के आयात नहीं करना चाहते हैं
मैनुअल Alvarez

19
बहुत से कारण। उदाहरण के लिए, आप ऐसे कई चर को अधिलेखित कर सकते हैं जिनके बारे में आप नहीं जानते हैं। क्या आप जानते हैं कि सभी आयातित नाम हैं from Tkinter import *? मैं नहीं। और आईडीई को पता नहीं होगा कि क्या ये नाम (शायद), इस प्रकार वे यह बताने में सक्षम नहीं हैं कि क्या आपने एक अवैध नाम दर्ज किया है।
थोरस्टेन क्रान्ज

2
@InbarRose यह एक बुरी आदत है, stackoverflow.com/questions/3615125/… पर देखें
युवल प्रॉस

जवाबों:


161

व्यक्तिगत रूप से मैं कोष्ठक के साथ जाता हूं जब एक से अधिक घटक आयात करते हैं और उन्हें वर्णानुक्रम में सॉर्ट करते हैं। इस तरह:

from Tkinter import (
    Button,
    Canvas,
    DISABLED,
    END,
    Entry,
    Frame,
    LEFT,
    NORMAL,
    RIDGE,
    Text,
    Tk,
)

यह आसानी से देखने का जोड़ा लाभ है कि प्रत्येक कमेटी या पीआर में कौन से घटक जोड़े गए / हटाए गए हैं।

कुल मिलाकर हालांकि यह एक व्यक्तिगत प्राथमिकता है और मैं आपको सलाह दूंगा कि जो भी आपको सबसे अच्छा लगे।


3
मुझे लगता है कि महत्वपूर्ण बात लगातार (कम से कम किसी दिए गए प्रोजेक्ट के भीतर) होना है। इससे कोड को पढ़ने वाले को यह पता लगाना आसान हो जाएगा कि बहुत अधिक कठिनाई के बिना क्या आयात किया जा रहा है।
ब्लैंकनाथ

1
आइसोर्ट का उपयोग विभिन्न शैलियों में बहु-पंक्ति आयातों को स्वचालित रूप से प्रारूपित करने के लिए किया जा सकता है, देखें github.com/timothycrosley/isort#multi-line-output-modes
9


4

मैं पहले और बाद में कोष्ठक के साथ जोड़े गए PEP328 से कोष्ठक संकेतन के साथ जाऊंगा :

from Tkinter import (
    Tk, Frame, Button, Entry, Canvas, Text, 
    LEFT, DISABLED, NORMAL, RIDGE, END
)

यह वह प्रारूप है जिसका उपयोग Django करता है:

from django.test.client import Client, RequestFactory
from django.test.testcases import (
    LiveServerTestCase, SimpleTestCase, TestCase, TransactionTestCase,
    skipIfDBFeature, skipUnlessAnyDBFeature, skipUnlessDBFeature,
)
from django.test.utils import (
    ignore_warnings, modify_settings, override_settings,
    override_system_checks, tag,
)

PEP 328 में कोष्ठक के बाद / पहले कोई नई सूची नहीं जोड़ी गई है?
गैंडाल्फ सक्से

@GandalfSaxe PEP 328 शब्दार्थ (भाषा में एक नई सुविधा जोड़ने) के बारे में था, प्रारूपण के बारे में नहीं।
मैक्स मालिष

मुझे तब समझ में नहीं आया। आप PEP 328 को बहु-पंक्ति आयात के लिए कोष्ठक के रूप में उद्धृत करते हैं, लेकिन उनके पास कोई नहीं है? "मैं कोष्ठक से पहले और बाद में जोड़े गए नए समाचारों के साथ PEP328 से कोष्ठक संकेतन के साथ जाऊंगा:"
गैंडाल्फ सक्से

PEP 328 ने भाषा में कोष्ठक संकेतन को जोड़ा। कोष्ठक संकेतन इस तरह से कई मॉड्यूल आयात करने की क्षमता है from foo import (bar, baz):। PEP 328 स्वरूपण के बारे में कुछ नहीं कहता है।
अधिकतम मालिष

आह ठीक है, मैं देख रहा हूं कि अब आपका क्या मतलब है :)
गंडालफ सक्से

-4

आमतौर पर टिंकर के साथ, यह ठीक है from Tkinter import *कि केवल मॉड्यूल का उपयोग करें क्योंकि स्पष्ट रूप से विगेट्स केवल नाम निर्यात करेंगे।

PEP 8 ऐसे मामले के लिए किसी भी सम्मेलन को सूचीबद्ध नहीं करता है, इसलिए मुझे लगता है कि यह तय करना आपके लिए सबसे अच्छा विकल्प है। यह सब पठनीयता के बारे में है, इसलिए जो कुछ भी यह स्पष्ट करता है उसे चुनें कि आप एक मॉड्यूल से सामान आयात कर रहे हैं।

जैसा कि उन सभी नामों को आपके दायरे में उपलब्ध कराया गया है, मुझे व्यक्तिगत रूप से लगता है कि विकल्प 2 सबसे स्पष्ट है क्योंकि आप आयातित नामों को सर्वश्रेष्ठ देख सकते हैं। आप तब इसे और भी विभाजित कर सकते हैं, शायद उन नामों को एक साथ समूहित करें जो एक दूसरे के साथ हैं। आपके उदाहरण में, मैं अलग-अलग और अलग-अलग हो सकता हूँ Tk, क्योंकि वे एक साथ समूह विजेट्स हैं, जबकि एक दृश्य में छोटे घटक हैं और अलग-अलग हैं।FrameCanvasButtonText


11
एक्स आयात * से उपयोग करने के लिए कभी भी ठीक नहीं है
टोलो पामर

1
@ टोलप्लेमर आमतौर पर यह सच है, लेकिन टिंकर के लिए यह आम तौर पर ठीक है, क्योंकि आप केवल विजेट आयात करते हैं; यह पुस्तकालय के संदर्भ में भी इस तरह सूचीबद्ध है । और यदि आप आयात को पहले एक के रूप में सूचीबद्ध करते हैं, तो आपको किसी भी संघर्ष से विशेष रूप से सुरक्षित होना चाहिए।
पोक

1
संदर्भ के लिए, ठीक से from X import *उपयोग __all__करने वाले पैकेजों के लिए समस्या यह है कि स्थिर कोड एनालाइज़र जैसे pyflakesअपरिभाषित नामों का पता नहीं लगा सकते हैं यदि कोई है import *क्योंकि यह मान लेना है कि किसी भी अपरिभाषित नामों को शायद आयात किया गया था *
रुबेनलागुना
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.