যদিও বহু লোক ইতিমধ্যে import
বনাম সম্পর্কে ব্যাখ্যা করেছে import from
, আমি হুডের নীচে কী ঘটে এবং যেখানে এটি পরিবর্তিত সমস্ত জায়গাগুলি রয়েছে সে সম্পর্কে কিছুটা আরও ব্যাখ্যা করার চেষ্টা করতে চাই।
import foo
:
আমদানি foo
করে এবং বর্তমান নেমস্পেসে সেই মডিউলটির একটি রেফারেন্স তৈরি করে। তারপরে আপনাকে মডিউলটির ভিতরে থেকে কোনও নির্দিষ্ট বৈশিষ্ট্য বা পদ্ধতি অ্যাক্সেস করতে সম্পূর্ণ মডিউল পথটি নির্ধারণ করতে হবে।
উদাহরণস্বরূপ foo.bar
কিন্তু নাbar
from foo import bar
:
foo
তালিকাভুক্ত সমস্ত সদস্যের জন্য আমদানি করে এবং রেফারেন্স তৈরি করে ( bar
)। ভেরিয়েবল সেট করে না foo
।
যেমন bar
কিন্তু baz
বাfoo.baz
from foo import *
:
আমদানি foo
করে এবং বর্তমান নামস্থানে সেই মডিউল দ্বারা সংজ্ঞায়িত সমস্ত পাবলিক অবজেক্টের রেফারেন্স তৈরি করে ( উপস্থিত __all__
থাকলে তালিকাভুক্ত সমস্ত কিছু __all__
, অন্যথায় যা শুরু হয় না _
)। ভেরিয়েবল সেট করে না foo
।
যেমন bar
এবং baz
না _qux
বা foo._qux
।
এখন দেখা যাক আমরা কখন করব import X.Y
:
>>> import sys
>>> import os.path
পরীক্ষা করে দেখুন sys.modules
নামের সঙ্গে os
এবং os.path
:
>>> sys.modules['os']
<module 'os' from '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/os.pyc'>
>>> sys.modules['os.path']
<module 'posixpath' from '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/posixpath.pyc'>
চেক করুন globals()
এবং locals()
নেমস্পেসের সাথে dicts os
এবং os.path
:
>>> globals()['os']
<module 'os' from '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/os.pyc'>
>>> locals()['os']
<module 'os' from '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/os.pyc'>
>>> globals()['os.path']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'os.path'
>>>
উপরের উদাহরণ থেকে আমরা দেখতে পেলাম যে কেবল os
স্থানীয় এবং বিশ্বব্যাপী নেমস্পেসে sertedোকানো হয়েছে। সুতরাং, আমাদের ব্যবহার করতে সক্ষম হওয়া উচিত:
>>> os
<module 'os' from
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/os.pyc'>
>>> os.path
<module 'posixpath' from
'/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/posixpath.pyc'>
>>>
কিন্তু না path
।
>>> path
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'path' is not defined
>>>
একবার আপনি os
স্থানীয়দের () নেমস্পেস থেকে মুছে ফেললে , আপনি সিস্টেমে উপস্থিত থাকলেও os
পাশাপাশি অ্যাক্সেস করতে সক্ষম হবেন না os.path
: মডিউলগুলি:
>>> del locals()['os']
>>> os
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'os' is not defined
>>> os.path
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'os' is not defined
>>>
এখন এর সম্পর্কে কথা বলা যাক import from
:
from
:
>>> import sys
>>> from os import path
এবং sys.modules
সাথে পরীক্ষা করুন :os
os.path
>>> sys.modules['os']
<module 'os' from '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/os.pyc'>
>>> sys.modules['os.path']
<module 'posixpath' from '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/posixpath.pyc'>
আমরা এটি দেখতে পেয়েছি যে sys.modules
ব্যবহার করে আমরা আগের মতো করেছিলামimport name
ঠিক আছে, আসুন দেখে নেওয়া যাক কীভাবে এটি দেখতে locals()
এবং globals()
নেমস্পেসের ডিক্টস:
>>> globals()['path']
<module 'posixpath' from '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/posixpath.pyc'>
>>> locals()['path']
<module 'posixpath' from '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/posixpath.pyc'>
>>> globals()['os']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'os'
>>>
নাম ব্যবহার করে আপনি অ্যাক্সেস করতে পারবেন path
না os.path
:
>>> path
<module 'posixpath' from '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/posixpath.pyc'>
>>> os.path
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'os' is not defined
>>>
এর থেকে 'পথ' মুছুন locals()
:
>>> del locals()['path']
>>> path
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'path' is not defined
>>>
একটি উপনাম ব্যবহার করে একটি চূড়ান্ত উদাহরণ:
>>> from os import path as HELL_BOY
>>> locals()['HELL_BOY']
<module 'posixpath' from '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/posixpath.pyc'>
>>> globals()['HELL_BOY']
<module 'posixpath' from /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/posixpath.pyc'>
>>>
এবং কোনও পথ নির্ধারণ করা হয়নি:
>>> globals()['path']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'path'
>>>