2017-07-05 6 views
7

मैं अजगर के लिए बहुत नया हूं, मेरे पास एक साधारण सवाल है।मॉड्यूल उपसर्ग को कैसे छोड़ें?

उदाहरण के लिए

अगर मैं

import A 

करते तो मैं A.b() उपयोग कर सकते हैं। मुझे आश्चर्य है, A.b() में A को कैसे छोड़ना है?

+0

मांगने के पहले [प्रलेखन] (http://docs.python.org) पढ़ने की कोशिश किया? – cat

उत्तर

17

आप मॉड्यूल A से b उपयोग करना चाहते हैं:

from A import b 

आप इसका नाम बदलना चाहते हैं:

from A import b as my_b 

यदि आपको कई ऑब्जेक्ट्स की आवश्यकता है:

from A import b, c, d 

तुम सब कुछ की जरूरत है:

from A import * 

import * विकल्प के बारे में, this post पढ़ा करें। यह छोटा है, लेकिन टीएल; डॉ: मॉड्यूल से सब कुछ from A import * पर आयात न करें। तुम सच में मॉड्यूल, या उसकी सामग्री का एक बहुत ही बड़ा हिस्सा से सब कुछ की जरूरत है, संभवतः नाम के साथ, सामान्य आयात पसंद करते हैं:

import numpy as np 
import tkinter as tk 
+1

मैं यह नहीं कहूंगा कि आपको बिल्कुल 'आयात से * 'का उपयोग नहीं करना चाहिए।यह सिर्फ इतना है कि जब आप ऐसा करते हैं तो आपको सावधान रहना चाहिए। उदाहरण के लिए, मुझे एक ट्यूटोरियल में अनुशंसा की गई थी कि मैं 'tkinter import * से उपयोग करता हूं; थीम्ड विगेट्स के लिए tkinter आयात ttk' से, 'tk' और 'ttk' को भ्रमित करना इतना आसान है। 'Tkinter' का उपयोग करते समय मैं लगभग हमेशा ऐसा करता हूं। (मैंने केवल दो आयातों को अलग-अलग लाइनों पर नहीं रखा क्योंकि मुझे नहीं पता कि टिप्पणी में ऐसा कैसे करना है)। –

+1

@IsaacSaffold यह सच है, लेकिन देखभाल की जरूरत काफी दर्दनाक है। वैसे भी, जो पोस्ट मैंने लिंक किया है, उससे बेहतर तरीके से इस तरह से कवर किया जा सकता है। –

+7

एक बार जब आप 'ओएस आयात * से करते हैं और घंटों के डिबगिंग खर्च करते हैं क्योंकि आपकी कॉल' ओपन 'पर काम नहीं करती है तो आप फिर से वाइल्डकार्ड आयात का उपयोग नहीं करेंगे। – Matthias

7

A के बाद से एक मॉड्यूल है, तो आप कर सकते हैं:

from A import b 

b() 
2

यह सवाल पहले से ही उत्तर दिया गया है, लेकिन जब आयात का उपयोग कर एक बात नोट करने के लिए कि

from module import foo 

और

import module 

बिल्कुल एक ही कर रहे हैं, स्मृति और प्रदर्शन का सवाल है जहाँ तक है। किसी भी मामले में, module संकलित और sys.modules में लोड किया गया है। केवल अंतर ही आपके नामस्थान में लाया जाता है। पहले मामले में, यह foo है। दूसरे मामले में, यह module है।

के बाद से अन्य उत्तर की व्याख्या नहीं करते क्यों from module import * का उपयोग कर बुरा है, इस कारण है: * प्रत्यक्ष उपयोग के लिए अपने नाम स्थान में सब कुछ आयात करेगा। यह एक अच्छा विचार नहीं है जब तक कि आप जानते हैं कि आप क्या कर रहे हैं। नाम संघर्ष निश्चित रूप से संभव हैं, खासकर जब कई बड़े मॉड्यूल आयात करते हैं।

यह राय की बात हो सकती है, लेकिन मेरा मानना ​​है कि import modulemodule.foo() के बाद सुरक्षित है और पाठक है कि विधि/विशेषता, कहाँ से आया, और क्या यह क्या कर रहा है के बारे में एक बेहतर विचार देता है। पठनीयता मायने रखती है!

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