পাইথনে ইনলাইন, একক ব্যবহার আমদানি করা কখন সুবিধাজনক?
উদাহরণ স্বরূপ:
__import__("x").doSomething()
উপরেরটি কি নীচের চেয়ে কখনও সংক্ষিপ্ত?
import x
x.doSomething()
অথবা
from x import*
doSomething()
পাইথনে ইনলাইন, একক ব্যবহার আমদানি করা কখন সুবিধাজনক?
উদাহরণ স্বরূপ:
__import__("x").doSomething()
উপরেরটি কি নীচের চেয়ে কখনও সংক্ষিপ্ত?
import x
x.doSomething()
অথবা
from x import*
doSomething()
উত্তর:
আপনি যদি কোনও বেনাম ল্যাম্বদা ফাংশনে মাত্র একবার মডিউল ব্যবহার করতে চান তবে এটি কার্যকর হতে পারে, কারণ এটি আপনাকে একটি পৃথক বিবৃতি লেখা এড়াতে দেয়:
lambda x:__import__('SomeModule').foo(x,123)
এর চেয়ে এক বাইট ছোট
from SomeModule import*;f=lambda x:foo(x,123)
কোডটি যদি একটি নামযুক্ত ফাংশন বা প্রোগ্রাম __import__
হয় তবে সর্বাধিক চরম বা স্বীকৃত পরিস্থিতিতে বাদে সাহায্য করার সম্ভাবনা কম।
import
আসবে যখন ইনডেন্টড ব্লকের ভিতরে ডাকা হবে? সম্ভবত না.
f=
কারণ বেনামি ফাংশনগুলি অনুমোদিত এবং ফাংশনের বাইরে সামগ্রী থাকতে পারে ।
পর্যাপ্ত দীর্ঘ নাম সহ একাধিক মডিউল আমদানি করার সময়, এটি নির্ধারণ করা সহায়ক হতে পারে __import__
ফাংশনটি একটি সংক্ষিপ্ত ভেরিয়েবলের এবং এটি আমদানির জন্য ব্যবহার
নিয়মিত আমদানির বিবৃতি - 97 বাইট
ইটারটুলগুলি আমদানি থেকে * তারিখের সময় আমদানি থেকে মুদ্রণ তালিকা (ক্রমানুসারে ("abc")) মুদ্রণ ডেটটাইম.নো ()
বরাদ্দ করা __import__
থেকে i
- 94 বাইট:
আমি = __ import__ মুদ্রণ তালিকা (i ("itertools")। অনুমান ("abc")) আই ("ডেটটাইম") মুদ্রণ করুন
__import__("x").doSomething()
দৈর্ঘ্যের x নামের একটি মডিউল উল্লেখ করতে 15+ x অক্ষরের প্রয়োজন ।
import x\nx.doSomething()
9 + 2 * x অক্ষর প্রয়োজন। এই ফাংশনগুলি x = 6 এ ওভারল্যাপ হয় , সুতরাং এর চেয়ে লম্বা নামযুক্ত যে কোনও মডিউল ব্যবহার করা ভাল __import__
,
তবে, from x import*\ndoSomething()
কেবল 14+ x অক্ষর প্রয়োজন, তাই সাধারণ আমদানির তুলনায় এটি মুল্যযোগ্য নয় যদি না মডিউলটির নাম 5 টি অক্ষরের বেশি হয়:
এটি সমস্তই ধরে নেয় যে আপনি কোনও ফাংশন / শ্রেণি / যা একবারে কেবল উল্লেখ করছেন। আপনি যদি একাধিকবার এটি উল্লেখ করেন তবে সূত্রগুলি পরিবর্তন হয় এবং পরবর্তী সংস্করণটি বিজয়ী হতে পারে। আপনি যদি আমদানি করা মডিউল থেকে বেশ কয়েকবার দীর্ঘ কিছু ব্যবহার করেন তবে অন্য সংস্করণটি জিততে পারে:
from x import y as z
জাল আপনাকে 18+ এক্স + + Y + + z- র * ( এন + 1) অক্ষরের জন্য এন ব্যবহার z- র , যা একটি বৃহৎ উন্নতি হলে Y বড়, কারণ z- র 1 করা যেতে পারে।
__import__("x").doSomething()
চেয়ে এক চর খাটো বলে মনে করি from x import*;doSomething()
। আপনি নতুন চরিত্রটিকে দুটি চর হিসাবে গণনা করছেন? এবং আমি বিরতি-এমনকি বিন্দু হচ্ছে 5, মধ্যে পতনশীল প্রত্যাহার time
এবং random
।
z=__import__("x").y
এর চেয়ে বাইট ছোট orter from x import y as z
from x import*;z=y
।
__import__
একটি নামযুক্ত ফাংশনটির ভিতরে সহায়তা করবে কারণ এটি ইনডেন্টড ব্লকের ভিতরে থাকবে। একটি আমদানিতে অতিরিক্ত ব্যয় হবে যেহেতু এটি দুটি লাইনে এবং ইন্টেন্টেড। (এটি ধরে নেওয়া হচ্ছে যে ফাংশনের বাইরে আমদানির অনুমতি দেওয়া হচ্ছে না))