मैं नीचे मॉड्यूल myinit.py लिखता हूं:

import os
import numpy as np
import pandas as pd
import datetime

और इसे सर्च पाथ में कॉपी करें।

sudo cp init.py  /usr/local/lib/python3.5/dist-packages/myinit.py

अब cmd में अजगर के साथ मेरे अजगर के संवादात्मक वातावरण में प्रवेश करें।

import myinit
dir(pd)
NameError: name 'pd' is not defined
dir(pandas)
NameError: name 'pandas' is not defined
dir(myinit.pd)
<module 'pandas' from '/usr/local/lib/python3.5/dist-packages/pandas/__init__.py'>

मेरे वर्तमान अजगर cmd वातावरण में, मेरे पास पांडा को कॉल करने के दो तरीके हैं।

  1. इसे myinit.pd से कॉल करें

  2. इनपुट import pandas as pd वर्तमान अजगर cmd वातावरण में, फिर इसे pd से कॉल करें।

वे दोनों मुझे असहज करते हैं, वर्तमान पायथन नेमस्पेस में कोई os, np ,pd ,datetime नहीं है। मेरे अनुकूलित मॉड्यूल द्वारा आयात किए गए मॉड्यूल को स्वयं के नाम से कैसे कॉल करें?

0
scrapy 19 जिंदा 2020, 07:36

1 उत्तर

सबसे बढ़िया उत्तर

import myinit पूरे myinit मॉड्यूल को आयात करता है, लेकिन यह स्थानीय नाम स्थान में केवल एक नाम जोड़ता है: myinit

अब, myinit में स्वयं pd, np, os, और datetime जैसे नाम शामिल हो सकते हैं (साथ ही आपके द्वारा इसमें परिभाषित कोई भी चर/कार्य) ), लेकिन वे अंदर myinit हैं। तो, उन तक पहुँचने के लिए, हमें करने की आवश्यकता है

import myinit
dir(myinit.pd)
# <module 'pandas' from '/usr/local/lib/python3.5/dist-packages/pandas/__init__.py'>

अनिवार्य रूप से, नामस्थान इस तरह नेस्टेड हैं। हम नेमस्पेस से नेमस्पेस तक उतरने के लिए डॉट नोटेशन का उपयोग करते हैं (उदाहरण के लिए pandas का अपना नेमस्पेस है, pandas.DataFrame का अपना नेमस्पेस है, और इसी तरह नीचे लाइन)।

आप from का उपयोग करके किसी भिन्न मॉड्यूल से एक विशिष्ट नाम आयात कर सकते हैं:

from myinit import pd
dir(pd)
<module 'pandas' from '/usr/local/lib/python3.5/dist-packages/pandas/__init__.py'>
dir(os)
# error - we didn't import os, only pd

और स्थानीय नेमस्पेस में एक अलग मॉड्यूल के भीतर हर नाम को आयात करने का तरीका, जैसा कि आप ऐसा करने की कोशिश कर रहे हैं, एक तारांकन के साथ है:

from myinit import *
dir(pd)
dir(os)
...

यद्यपि आप ऐसा कर सकते हैं, आपको नहीं करना चाहिए - प्रति पीईपी 22, "स्पष्ट से बेहतर है", और आपको यह स्पष्ट होना चाहिए कि आप किसी दिए गए आयात से किन नामों का उपयोग कर रहे हैं।


वैसे, एक ही मॉड्यूल को दो बार (जैसे pandas) दो अलग-अलग फाइलों में आयात करने के बारे में चिंता न करें। यह केवल एक बार मेमोरी में लोड हो जाता है - sys मॉड्यूल में पूरे प्रोग्राम में पहले से लोड किए गए मॉड्यूल का कैश होता है, और यदि आप अपने प्रोग्राम में कहीं भी एक मॉड्यूल लोड करने का प्रयास करते हैं जो पहले लोड हो चुका है, तो यह सिर्फ चुनता है एक नया उदाहरण लोड करने के बजाय उस कैश से एक ही संदर्भ।

आपके प्रोग्राम में एकाधिक फ़ाइलों में pandas, या os, या किसी अन्य मॉड्यूल को आयात करना, बेहतर कोड शैली है, क्योंकि इससे यह स्पष्ट हो जाता है कि आप कौन से टूल का उपयोग कर रहे हैं और वे कहां से आते हैं। .

2
Green Cloak Guy 19 जिंदा 2020, 14:27