প্রায় সকল পাইথন ২ প্রোগ্রামেরই পাইথন ৩ এর পরিবেশে সঠিকভাবে চলার জন্য কিছু পরিবর্তন প্রয়োজন হয়। এই রূপান্তর প্রক্রিয়াটি সহজ করার জন্য, পাইথন ৩ এর সাথে একটি ইউটিলিটি স্ক্রিপ্ট (Utility Script) আসে যা আপনার পাইথন ২ প্রোগ্রামের সোর্স ফাইলটিকে ইনপুট হিসাবে নেয় এবং এটিকে স্বয়ংক্রিয়ভাবে পাইথন ৩ এর ফর্ম্যাটে রূপান্তর করে। কেস স্টাডিঃ চার্ডটকে পাইথন ৩ এ পোর্টিং করা।
পাইথন ২-এ, প্রিন্ট একটি স্ট্রাকশন। আপনি যা কিছু আউটপুট করতে চান তা আপনি কেবল প্রিন্ট কীওয়ার্ডের পরে রাখতে পারেন। পাইথন ৩-এ, প্রিন্ট ()) একটি ফাংশন। অন্যান্য ফাংশনের মতো, প্রিন্ট ()) এর জন্য আপনি যা আউটপুট করতে চান তা একটি পরামিতি হিসাবে এটির কাছে পাস করতে হবে।
নোট | পাইথন ২ | পাইথন ৩ |
---|---|---|
① | মুদ্রণ | মুদ্রণ ((() |
② | মুদ্রণ 1 | মুদ্রণ ((1) |
③ | ১.২ মুদ্রণ | মুদ্রণ ((1,2) |
④ | ১,২ মুদ্রণ করুন। | print ((1,2,end= |
⑤ | মুদ্রণ >>sys.stderr,1,2,3 | print ((1,2,3, file=sys.stderr) |
১, একটি ফাঁকা লাইন আউটপুট করার জন্য, প্রিন্ট () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () ()
২, একটি পৃথক মান আউটপুট করার জন্য, এই মানটি print () এর একটি পরামিতি হিসাবে ব্যবহার করা যেতে পারে।
৩, দুইটি মানকে একটি শূন্যস্থান দ্বারা পৃথক করে আউটপুট করার জন্য, দুইটি পরামিতি দিয়ে print ((() কল করতে পারেন।
৪. এই উদাহরণের কিছু কৌশল আছে. পাইথন ২-তে, যদি আপনি একটি কমা (,) প্রিন্ট স্ট্রিংয়ের শেষে ব্যবহার করেন, তাহলে এটি ফলাফলকে স্পেস দ্বারা পৃথক করে এবং তারপর একটি ট্রেইলিং স্পেস (trailing space) প্রিন্ট করে, তবে ক্যারিয়ার রিটার্ন (carriage return) প্রিন্ট না করে। পাইথন ৩-এ, একই প্রভাবটি প্রিন্টকে একটি কীওয়ার্ড প্যারামিটার হিসাবে প্রেরণ করে অর্জন করা যেতে পারে। প্যারামিট এন্ডের ডিফল্ট মান হল
পাইথন ২ এর দুটি স্ট্রিং টাইপ রয়েছেঃইউনিকোড স্ট্রিংএবংঅ-ইউনিকোড স্ট্রিং⇒ পাইথন ৩ এর একটাই টাইপ আছেঃইউনিকোড স্ট্রিং。
নোট | পাইথন ২ | পাইথন ৩ |
---|---|---|
① | ||
② | র |
পাইথন ২ এর ইউনিকোড স্ট্রিংগুলি পাইথন ৩ এর সাধারণ স্ট্রিং, কারণ পাইথন ৩ এর স্ট্রিংগুলি সর্বদা ইউনিকোড ফর্ম্যাটে থাকে। ইউনিকোড প্রাইভেট স্ট্রিং ((raw string) ((এই স্ট্রিংটি ব্যবহার করে, পাইথন স্বয়ংক্রিয়ভাবে বিপরীত সিলিন্ডারটি রূপান্তরিত করবে না") এছাড়াও সাধারণ স্ট্রিংয়ের পরিবর্তে পরিবর্তিত হয়, কারণ পাইথন 3 এ সমস্ত প্রাইভেট স্ট্রিংগুলি ইউনিকোডে এনকোড করা হয়।
পাইথন ২-তে দুটি গ্লোবাল ফাংশন রয়েছে যা বস্তুকে স্ট্রিংতে রূপান্তর করতে বাধ্য করেঃ ইউনিকোড ((() বস্তুকে ইউনিকোড স্ট্রিংয়ে রূপান্তর করে এবং str ((() বস্তুকে নন-ইউনিকোড স্ট্রিংয়ে রূপান্তর করে। পাইথন ৩-এ কেবল একটি স্ট্রিং টাইপ রয়েছে, ইউনিকোড স্ট্রিং, তাই str ((() ফাংশনটি সমস্ত ফাংশন সম্পন্ন করে।ইউনিকোড (() ফাংশনটি পাইথন ৩-এ আর নেই।)
নোট | পাইথন ২ | পাইথন ৩ |
---|---|---|
① | ইউনিকোড (কিছু) | str ((কিছুই না) |
পাইথন ২-তে int এবং long টাইপ রয়েছে যা নন-ফ্লোটেন্টের জন্য প্রস্তুত করা হয়। int টাইপের সর্বোচ্চ মান sys.maxint এর চেয়ে বেশি হতে পারে না, এবং এই সর্বোচ্চ মানটি প্ল্যাটফর্মের সাথে সম্পর্কিত। দীর্ঘ পূর্ণসংখ্যাটি সংজ্ঞায়িত করা যেতে পারে সংখ্যাটির শেষে একটি L যুক্ত করে, যা স্পষ্টতই int টাইপের চেয়ে বড় সংখ্যা পরিসীমা। পাইথন ৩-এ কেবলমাত্র একটি পূর্ণসংখ্যা টাইপ int রয়েছে, যা বেশিরভাগ ক্ষেত্রে পাইথন ২-এর পূর্ণসংখ্যানের মতো। যেহেতু দুটি ধরণের পূর্ণসংখ্যা বিদ্যমান নেই, তাই তাদের আলাদা করার জন্য বিশেষ সিনট্যাক্স ব্যবহার করার দরকার নেই।
আরও পড়ুনঃ পিইপি ২৩৭ঃ একক দীর্ঘ এবং সম্পূর্ণ টাইপ।
নোট | পাইথন ২ | পাইথন ৩ |
---|---|---|
① | x = 1000000000000L | x = 1000000000000 |
② | x = 0xFFFFFFFFFFFF | x = 0xFFFFFFFFFF |
③ | দীর্ঘ ((x) | int ((x) |
④ | টাইপ ((x) দীর্ঘ | type ((x) হল int |
⑤ | isinstance ((x,long) | isinstance ((x,int) |
পাইথন ২-এ দশমিক পূর্ণসংখ্যাকে দশমিক সাধারণ পূর্ণসংখ্যা দিয়ে প্রতিস্থাপন করা হয়। পাইথন ২-এ ষোল ডিগ্রি পূর্ণসংখ্যাকে পাইথন ৩-এ ষোল ডিগ্রি সাধারণ পূর্ণসংখ্যা দিয়ে প্রতিস্থাপন করা হয়েছে। পাইথন ৩-এ, লম্বা পূর্ণরূপের অস্তিত্ব নেই।প্রাকৃতিক long ((() ফাংশনটিও নেই। একটি ভেরিয়েবলকে সম্পূর্ণরূপে রূপান্তর করতে int ((( ফাংশনটি ব্যবহার করা যেতে পারে।❖ একটি ভেরিয়েবলের পূর্ণতা যাচাই করে তার ডেটা টাইপ পাওয়া যায় এবং এটি একটি int টাইপের সাথে তুলনা করা হয় ((long নয়) । আপনি ইনস্ট্যান্স () ফাংশনটি ব্যবহার করে ডেটা টাইপ পরীক্ষা করতে পারেন; আবারও জোর দেওয়া হচ্ছে, integer টাইপ পরীক্ষা করতে int ব্যবহার করুন, long এর পরিবর্তে।
পাইথন ২ এ <> এর সমার্থক!= হিসাবে সমর্থন করা হয়। পাইথন ৩ এ কেবল!= সমর্থন করা হয়।
নোট | পাইথন ২ | পাইথন ৩ |
---|---|---|
① | যদি x <> y: | যদি x!= y: |
② | যদি x <> y <> z: | যদি x!= y!= z: |
১, সহজভাবে তুলনা করা। ২, তুলনামূলকভাবে জটিল তিনটি মানের মধ্যে তুলনা।
পাইথন ২-এ, has_key পদ্ধতিটি ব্যবহার করা হয় যা পরীক্ষার জন্য ব্যবহৃত হয় যে একটি নির্দিষ্ট কী রয়েছে কিনা। পাইথন ৩-এ এই পদ্ধতিটি আর সমর্থিত নয়। আপনাকে এটি ব্যবহার করতে হবে।মধ্যেঅপারেটর ।
নোট | পাইথন ২ | পাইথন ৩ |
---|---|---|
① | a_dictionary.has_key (( |
|
② | a_dictionary.has_key ((x) অথবা a_dictionary.has_key ((y) | x a_dictionary অথবা y a_dictionary |
③ | a_dictionary.has_key ((x অথবা y) | (x বা y) a_dictionary |
④ | a_dictionary.has_key ((x + y) | (x + y) a_dictionary-এ |
⑤ | x + a_dictionary.has_key ((y) | x + (a_dictionary-এ y) |
১, সবচেয়ে সহজ ফর্ম।
২, অপারেটর or এর অগ্রাধিকার অপারেটর in এর চেয়ে কম, তাই এখানে কার্টেজ যোগ করার প্রয়োজন নেই.
৩। অন্যদিকে, একই কারণে
পাইথন ২-এ, অনেকগুলি অভিধান পদ্ধতির রিটার্ন মান তালিকা; যার মধ্যে সবচেয়ে বেশি ব্যবহৃত পদ্ধতিতে কী, আইটেম এবং মান রয়েছে; পাইথন ৩-এ, এই সমস্ত পদ্ধতির রিটার্ন মানগুলি গতিশীল ভিউতে পরিবর্তিত হয়; কিছু প্রাসঙ্গিক পরিবেশে, এই পরিবর্তনগুলি কোনও প্রভাব ফেলে না। যদি এই পদ্ধতিগুলির রিটার্ন মানগুলি অন্য ফাংশনে অবিলম্বে পাস করা হয় এবং ফাংশনটি পুরো সারি জুড়ে চলে, তবে উপরের পদ্ধতিগুলির রিটার্ন মানগুলি তালিকা বা ভিউ হয় এবং কিছুই পরিবর্তন হয় না; অন্য কিছু ক্ষেত্রে, পাইথন ৩ এর সম্পর্কগুলি; গুরুত্বপূর্ণ প্রত্যাশা যদি আপনি একটি স্বতন্ত্রভাবে অ্যাড্রেসযোগ্য উপাদানগুলির তালিকা দেখেন তবে পাইথন ৩-এর এই পরিবর্তনগুলি আপনার কোডকে আটকে রাখবে, কারণ গ্রাফ ভিউ ইন্ডেক্সিং সমর্থন করে না।
নোট | পাইথন ২ | পাইথন ৩ |
---|---|---|
① | a_dictionary.keys (() | list ((a_dictionary.keys()) |
② | a_dictionary.items (() | list ((a_dictionary.items()) |
③ | a_dictionary.iterkeys (() | iter ((a_dictionary.keys()) |
④ | [i for iin a_dictionary.iterkeys() ] | [i for iin a_dictionary.keys() ] |
⑤ | min ((a_dictionary.keys()) | কোন পরিবর্তন নেই |
1, list () ফাংশনটি keys () এর রিটার্ন ভ্যালুকে একটি স্ট্যাটিক তালিকায় রূপান্তর করে, যা নিরাপত্তার কারণে 2to3 এর ত্রুটির কারণ হতে পারে। এই ধরনের কোডটি কার্যকর, কিন্তু ভিউ ব্যবহারের জন্য এটি কিছুটা কম কার্যকর। আপনি রূপান্তরিত কোডটি পরীক্ষা করে দেখতে পারেন যে এটি অবশ্যই তালিকা প্রয়োজন কিনা, সম্ভবত ভিউও একই কাজ করতে পারে। ২, এটি আরেকটি দৃষ্টিভঙ্গি ((আইটেম সম্পর্কে)) পদ্ধতির) তালিকায় রূপান্তর। ৩, পাইথন ৩-এ iterkeys (() সমর্থন করা হয় না। যদি প্রয়োজন হয়, তবে keys (() এর রিটার্ন ভ্যালুকে iterator-এ রূপান্তর করতে iter (() ব্যবহার করুন। ৪, ২-২-৩ পদ্ধতিটি তালিকার বিশ্লেষণে ব্যবহৃত আইটারকিওগুলি সনাক্ত করতে পারে এবং এটিকে পাইথন ৩ এর কীগুলিতে রূপান্তর করতে পারে। এটি কার্যকর কারণ ভিউটি পুনরাবৃত্তিযোগ্য। 5, 2to3 পদ্ধতি থেকে keys (() পদ্ধতির রিটার্ন ভ্যালু অবিলম্বে অন্য ফাংশনে পাস করা হয় যা পুরো সারিটি অতিক্রম করে, তাই keys (() এর রিটার্ন ভ্যালুকে একটি তালিকায় রূপান্তর করার প্রয়োজন নেই। পরিবর্তে, min (() ফাংশনটি বিনীতভাবে ভিউটি অতিক্রম করবে। এই প্রক্রিয়াটি মিনি ((), ম্যাক্স ((), যোগফল ((), টোপল ((), সেটলিস্ট (), সাজানো (), যে কোনও ()) এবং সমস্ত ()) এর জন্য একইভাবে কার্যকর।
পাইথন ২ থেকে পাইথন ৩ পর্যন্ত, স্ট্যান্ডার্ড লাইব্রেরির কিছু মডিউল পুনরায় নামকরণ করা হয়েছে। কিছু আন্তঃসম্পর্কিত মডিউলগুলিও একত্রিত বা পুনরায় সংগঠিত করা হয়েছে যাতে এই সম্পর্কটি আরও যুক্তিসঙ্গত হয়।
নোট | পাইথন ২ | পাইথন ৩ |
---|---|---|
① | httplib আমদানি করুন | http.client আমদানি করুন |
② | আমদানি কুকি | http.cookies আমদানি করুন |
③ | cookielib আমদানি করুন | http.cookiejar আমদানি করুন |
④ | BaseHTTPServer আমদানি করুন SimpleHTTPServer আমদানি করুন CGIHttpServer |
http.server আমদানি করুন |
http.client মডিউল একটি অন্তর্নিহিত সংগ্রহশালা বাস্তবায়ন করে যা HTTP রিসোর্সের জন্য অনুরোধ করতে এবং HTTP প্রতিক্রিয়া বিশ্লেষণ করতে ব্যবহার করা যেতে পারে। HTTP.cookies মডিউলটি HTTP হেডারের মাধ্যমে সেট-কুকি পাঠানো কুকিজ সংগ্রহের জন্য একটি পাইথনিক ইন্টারফেস সরবরাহ করে সাধারণ ব্রাউজারে কুকিজ ফাইলের আকারে ডিস্কে সংরক্ষণ করা হয়, যা http.cookiejar মডিউল দ্বারা পরিচালিত হয়। http.server মডিউল একটি মৌলিক HTTP সার্ভার বাস্তবায়ন
নোট | পাইথন ২ | পাইথন ৩ |
---|---|---|
① | আমদানি করুন urllib | import urllib.request urllib.parse,urllib.error |
② | ইউআরএলআইবি2 আমদানি | urllib.request urllib.error আমদানি করুন |
③ | ইউআরএল পার্স আমদানি করুন | urllib.parse আমদানি করুন |
④ | রবট পার্সার আমদানি করুন | urllib.robotparser আমদানি করুন |
⑤ | থেকে urllib আমদানি FancyURLopener থেকে urllib আমদানি urlencode |
urllib.request থেকে আমদানি করুন FancyURLopener urllib.parse থেকে আমদানি করুন urlencode |
⑥ | urllib2 থেকে আমদানি অনুরোধ urllib2 থেকে আমদানি HTTPError |
urllib.request আমদানি থেকে অনুরোধ urllib.error আমদানি থেকে HTTPError |
পূর্বে, পাইথন ২-এ urllib মডিউলটিতে বিভিন্ন ফাংশন ছিল, যার মধ্যে urlopen () যা ডেটা সংগ্রহের জন্য ব্যবহৃত হয় এবং এটি URL কে এর উপাদানগুলির মধ্যে বিভক্ত করার জন্য দরকারী splittype ()), splithost () এবং splituser () ফাংশন। নতুন urllib প্যাকেজে, এই ফাংশনগুলি আরও যুক্তিসঙ্গতভাবে সংগঠিত করা হয়েছে। 2to3 এই ফাংশনগুলির কলগুলিকে নতুন নামকরণের স্কিমের সাথে মানিয়ে নিতে সংশোধন করবে। পাইথন ৩-এ, পূর্ববর্তী urllib2 মডিউলগুলি urllib প্যাকেজে অন্তর্ভুক্ত করা হয়েছে; একই সাথে, urllib2-এ আপনার পছন্দসই জিনিসগুলি পাইথন ৩-এর urllib মডিউলগুলির মধ্যে একত্রে উপস্থিত হবে, যেমন build_opener () পদ্ধতি, Request অবজেক্ট, HTTPBasicAuthHandler এবং friends । পাইথন ৩ এর urllib.parse মডিউলটিতে মূল পাইথন ২ এর urlparse মডিউলের সমস্ত পার্সাল ফাংশন রয়েছে। urllib.robotparse মডিউল robots.txt ফাইল বিশ্লেষণ করে। এইচটিটিপি পুনর্নির্দেশ এবং অন্যান্য অবস্থা কোডগুলি পরিচালনা করার জন্য ফ্যানসিআরএলওপেনার শ্রেণিটি পাইথন 3 এর urllib.request মডিউলে এখনও কার্যকর। ⇒ urllib.parse-এ স্থানান্তরিত হয়েছে। Request অবজেক্টটি urllib.request-এ এখনও কার্যকর, কিন্তু HTTPError-এর মত ধ্রুবকগুলি urllib.error-এ স্থানান্তরিত হয়েছে। আমি কি উল্লেখ করেছি যে 2to3 আপনার ফাংশন কলগুলিও পুনর্লিখন করবে? উদাহরণস্বরূপ, যদি আপনি আপনার পাইথন 2 কোডে urllib মডিউল আমদানি করেন এবং urllib.urlopen () ফাংশনটি ডাটা পাওয়ার জন্য কল করেন, 2to3 একই সময়ে আমদানি বিবৃতি এবং ফাংশন কলগুলি সংশোধন করবে।
নোট | পাইথন ২ | পাইথন ৩ |
---|---|---|
① | import urllib print urllib.urlopen (("http://diveintopython3.org/’) পড়ুন)) | import urllib.request, urllib.parse, urllib.error print ((urllib.request.urlopen)) "http://diveintopython3.org/’) পড়ুন)) |
নোট | পাইথন ২ | পাইথন ৩ |
---|---|---|
① | আমদানি ডিবিএম | আমদানি dbm.ndbm |
② | আমদানি gdbm | আমদানিdbm.gnu |
③ | dbhash আমদানি করুন | আমদানি dbm.bsd |
④ | আমদানি dumbdbm | dbm.dumb আমদানি করুন |
⑤ | import anyydbm আমদানি whichdb |
আমদানি ডিবিএম |
নোট | পাইথন ২ | পাইথন ৩ |
---|---|---|
① | xmlrpclib আমদানি করুন | xmlrpc.client আমদানি করুন |
② | DocXMLRPCServer আমদানি করুন |
xmlrpc.server আমদানি করুন |
নোট | পাইথন ২ | পাইথন ৩ |
---|---|---|
① | try: import cStringIO as StringIO except ImportError: import StringIO ইম্পোর্ট করুন স্ট্রিংআইও |
আমদানি |
② | try: import cPickle as pickle except ImportError: আমদানি করুন |
আমদানি করা গাজর |
③ | আমদানি করুননির্মিত_ | আমদানি ভবন |
④ | আমদানি কপি_রেগ | আমদানি কপি রেগ |
⑤ | আমদানি সারি | আমদানি সারি |
⑥ | SocketServer আমদানি করুন | আমদানি সকেটসার্ভার |
⑦ | ConfigParser আমদানি করুন | কনফিগ পার্সার আমদানি করুন |
⑧ | আমদানি | আমদানি reprlib |
⑨ | আমদানি আদেশ | আমদানি উপ-প্রক্রিয়া |
১, পাইথন ২-এ আপনি সাধারণত যা করেন তা হল প্রথমে cStringIO কে StringIO এর বিকল্প হিসেবে আমদানি করার চেষ্টা করুন, যদি এটি ব্যর্থ হয়, তাহলে StringIO-কে আমদানি করুন। পাইথন ৩-এ এমনটি করবেন না; io মডিউলটি আপনাকে এই বিষয়ে সাহায্য করবে। এটি উপলব্ধ দ্রুততম বাস্তবায়ন খুঁজে বের করবে এবং এটি স্বয়ংক্রিয়ভাবে ব্যবহার করবে। ২. পাইথন ২-এ, দ্রুততম পিকল বাস্তবায়নটি আমদানি করাও উপরের মতোই একটি কার্যকর পদ্ধতি। পাইথন ৩-এ, পিকল মডিউলটি আপনার জন্য স্বয়ংক্রিয়ভাবে কাজ করবে, তাই এটি আর করবেন না। ৩. বিল্টিনস মডিউলটিতে গ্লোবাল ফাংশন, ক্লাস এবং ধ্রুবক রয়েছে যা পুরো পাইথন ভাষায় ব্যবহৃত হবে। বিল্টিনস মডিউলের একটি ফাংশন পুনরায় সংজ্ঞায়িত করার অর্থ এই গ্লোবাল ফাংশনটি সর্বত্র পুনরায় সংজ্ঞায়িত করা। এটি শোনাচ্ছে শক্তিশালী, কিন্তু একই সাথে ভয়ঙ্কর। ৪. কপিরেগ মডিউল সি ভাষায় সংজ্ঞায়িত ব্যবহারকারীর কাস্টমাইজড টাইপের জন্য পিকল মডিউল সমর্থন যোগ করেছে। ৫. Queue Module একটি প্রযোজক-ভোক্তা Queue বাস্তবায়ন করে। 6. Socketserver মডিউল বিভিন্ন সকেট সার্ভার বাস্তবায়নের জন্য একটি সাধারণ মৌলিক শ্রেণী প্রদান করে। ৭। কনফিগ পার্সার মডিউলটি আইএনআই-স্টাইল প্রোফাইলগুলি বিশ্লেষণ করতে ব্যবহৃত হয়। 8. reprlib মডিউল reimplemented built-in function repr (), এবং added controls for string representation to be cut before length. 9. সাবপ্রসেস মডিউল আপনাকে সাবপ্রসেস তৈরি করতে, তাদের পাইপগুলিতে সংযোগ করতে এবং তাদের রিটার্ন মানগুলি পেতে দেয়।
প্যাকেজ হল একটি একক সত্তা যা একটি গ্রুপের সাথে সম্পর্কিত মডিউলগুলির সমন্বয়ে গঠিত। পাইথন ২-তে, একই প্যাকেজের ভিতরে মডিউলগুলির মধ্যে পারস্পরিক রেফারেন্স করার জন্য আপনি আমদানি foo বা থেকে foo আমদানি বার ব্যবহার করবেন।2解释器会先在当前目录里搜索foo.pyPython 3 এ এই প্রক্রিয়াটি একটু ভিন্ন। Python 3 প্রথমে বর্তমান পথ অনুসন্ধান করে না, এটি সরাসরি Python এর অনুসন্ধান পথের মধ্যে অনুসন্ধান করে। আপনি যদি প্যাকেজের একটি মডিউলকে প্যাকেজের অন্য মডিউলটি আমদানি করতে চান তবে আপনাকে দুটি মডিউলের তুলনামূলক পথটি স্পষ্টভাবে সরবরাহ করতে হবে।
ধরুন, আপনার একটি প্যাকেজ আছে, এবং একই ডিরেক্টরিতে একাধিক ফাইল রয়েছেঃ
চার্ডেট/ ∙∙ ±-সূচনা.py ∙∙+--constants.py | +--mbcharsetprober.py | +--ইউনিভার্সাল ডিটেক্টর.পি
এখন ধরুন, universaldector.py এর পুরো constants.py আমদানি করতে হবে।,另外还需要导入mbcharsetprober.py的一个类。你会怎样做?
নোট | পাইথন ২ | পাইথন ৩ |
---|---|---|
① | আমদানি ধ্রুবক | .import ধ্রুবক থেকে |
② | mbcharsetprober থেকে আমদানি MultiByteCharSetProber | .mbcharsetprober থেকে আমদানি MultiByteCharsetProber |
১, যখন আপনি প্যাকেজের অন্য কোথাও থেকে পুরো মডিউলটি আমদানি করতে চান, তখন নতুন from.import সিনট্যাক্সটি ব্যবহার করুন.universaldetector.py) এবং আপনি ফাইল আমদানি করতে চান ((constants.py) এর মধ্যে আপেক্ষিক পথ। এই উদাহরণে, দুটি ফাইল একই ডিরেক্টরিতে রয়েছে, তাই একটি একক বিন্দু ব্যবহার করা হয়েছে। আপনি পিতা ডিরেক্টরি ((from... import anothermodule) থেকে বা একটি সাবডিরেক্টরি থেকেও আমদানি করতে পারেন। ২. অন্য মডিউল থেকে সরাসরি আপনার মডিউলের নামস্থানে একটি নির্দিষ্ট ক্লাস বা ফাংশন আমদানি করার জন্য, আমদানি করা মডিউলটির শিরোনামে আপেক্ষিক পথ যুক্ত করুন এবং শেষ স্ল্যাশটি সরিয়ে ফেলুন। এই উদাহরণে, mbcharsetprober.py এবং universaldetector.py একই ডিরেক্টরিতে রয়েছে, তাই আপেক্ষিক পথের নামটি একটি বাক্যাংশ। আপনি পিতা ডিরেক্টরি থেকেও আমদানি করতে পারেন ((from... import anothermodule) বা একটি সাবডিরেক্টরি থেকেও আমদানি করতে পারেন।
পাইথন ২-এ, আইডেরারটির একটি next ((() পদ্ধতি রয়েছে যা সারিটির পরবর্তীটি ফেরত দেয়। পাইথন ৩-এ এটি একইভাবে কাজ করে, তবে এখন একটি নতুন গ্লোবাল ফাংশন next ((() রয়েছে যা একটি আইডেরারকে প্যারামিটার হিসাবে ব্যবহার করে।
নোট | পাইথন ২ | পাইথন ৩ |
---|---|---|
① | anIterator.next ((() | next ((aniterator) |
② | a_function_that_returns_an_iterator().next() | next ((a_function_that_returns_an_iterator()) |
③ | ক্লাস A: def next ((self): পাস |
ক্লাস A: def _পরবর্তী_(self): পাস করুন |
④ | ক্লাস A: def next ((self, x, y): পাস |
কোন পরিবর্তন নেই |
⑤ | next = 42 a_iterator in a_sequence_of_iterators: an_iterator.next (() |
next = 42 a_sequence_of_iterators_in an_iterator এর জন্যঃ an_iterator._পরবর্তী_() |
১, সবচেয়ে সহজ উদাহরণ, আপনি এখন একটি আইডেরারের next (() পদ্ধতি কল করছেন না, আপনি এখন আইডেরার নিজেই একটি গ্লোবাল ফাংশন next (() ফাংশনে একটি পরামিতি হিসাবে পাস করছেন। ২, যদি আপনার কাছে একটি রিটার্ন ভ্যালু থাকে যা একটি আইডেরারের ফাংশন, তাহলে এই ফাংশনটি কল করুন এবং ফলাফলটি একটি পরামিতি হিসাবে পরবর্তী ফাংশনে পাস করুন। ৩। যদি আপনি আপনার ক্লাসকে অনুমান করেন এবং এটিকে একটি আইডেরার হিসেবে ব্যবহার করেন, পাইথন ৩-এ আপনি বিশেষ পদ্ধতির সংজ্ঞা দিয়ে এটি করতে পারেন।পরবর্তী_(এটি বাস্তবায়ন করা হবে। ৪, যদি আপনার সংজ্ঞায়িত শ্রেণীতে একটি next ((() থাকে, তবে এটি এক বা একাধিক পরামিতি ব্যবহার করে, 2to3 এটি কার্যকর করার সময় এটি সক্রিয় করবে না। এই শ্রেণীটি আইডেরার হিসাবে ব্যবহার করা যাবে না, কারণ এর next ((() পদ্ধতিতে পরামিতি রয়েছে। ৫। এইটা একটু জটিল। যদি আপনার স্থানীয় ভেরিয়েবলের নাম next থাকে, তাহলে Python 3-এ এর অগ্রাধিকার হবে next-এর চেয়ে বেশি। এই ক্ষেত্রে আপনাকে iterator এর বিশেষ পদ্ধতি কল করতে হবে।পরবর্তী_() এর মাধ্যমে আপনি পরবর্তী উপাদানটি পেতে পারেন। অথবা, আপনি কোডটি পুনর্গঠন করতে পারেন যাতে স্থানীয় ভেরিয়েবলটির নাম next না হয়, কিন্তু 2to3 আপনার জন্য এটি করবে না।
পাইথন ২-এ, filter ((() পদ্ধতি একটি তালিকা ফেরত দেয়, যা একটি ফাংশন যা True বা False হিসাবে একটি মান ফেরত দেয় তার মাধ্যমে ধারাবাহিকতার প্রতিটি আইটেম পরীক্ষা করে।
নোট | পাইথন ২ | পাইথন ৩ |
---|---|---|
① | filter ((a_function, a_sequence) | list ((filter ((a_function, a_sequence)) |
② | list ((filter ((a_function, a_sequence)) | কোন পরিবর্তন নেই |
③ | ফিল্টার ((None, a_sequence) | [i for iin a_sequence যদি i] |
④ | ফিল্টারে i এর জন্য ((None, a_sequence): | কোন পরিবর্তন নেই |
⑤ | [i for iin filter ((a_function, a_sequence) ] | কোন পরিবর্তন নেই |
1, সবচেয়ে সহজ ক্ষেত্রে, 2to3 একটি list () ফাংশন দিয়ে ফিল্টার () প্যাকেজ করে, এবং list () ফাংশনটি এর পরামিতিগুলি অতিক্রম করে এবং একটি তালিকা ফেরত দেয়। ২, তবে, যদি ফিল্টার ()) কলটি list ()) দ্বারা আবৃত থাকে, তাহলে ২-৩ আর কাজ করবে না, কারণ এই ক্ষেত্রে ফিল্টার ()) এর রিটার্ন ভ্যালু একটি আইডেরার কিনা তা গুরুত্বপূর্ণ নয়। ৩, ফিল্টার (None,...) এর মতো বিশেষ সিনট্যাক্স পরিচালনা করার জন্য, ২-৩ এই কলটিকে সিনট্যাক্স সমতুল্যভাবে তালিকা বিশ্লেষণে রূপান্তরিত করে। ৪। যেহেতু ফর লুপটি পুরো সিকোয়েন্স জুড়ে চলে, তাই আর কোনও পরিবর্তন করার প্রয়োজন নেই। ৫। উপরের মতই, কোন পরিবর্তন করার প্রয়োজন নেই, কারণ তালিকার বিশ্লেষণ পুরো সিকোয়েন্স জুড়ে হবে, এমনকি যদি ফিল্টার ()) একটি পুনরাবৃত্তিকারীকে ফেরত দেয়, তবে এটি আগের ফিল্টার ()) এর মতো তালিকায় ফিরে আসে।
ফিল্টার ()) এর পরিবর্তনের মতো, map ()) ফাংশনটি এখন একটি পুনরাবৃত্তিকারীকে ফিরিয়ে দেয়।
নোট | পাইথন ২ | পাইথন ৩ |
---|---|---|
① | map ((a_function, |
list ((map ((a_function, |
② | মানচিত্র ((None, |
তালিকা (( |
③ | মানচিত্র ((ল্যাম্বডা এক্সঃ এক্স+১,রেঞ্জ ((৪২)) | [x+1 x এর জন্য পরিসীমা ((42) ] |
④ | মানচিত্রে i এর জন্য ((a_function, a_sequence): | কোন পরিবর্তন নেই |
⑤ | [i for iin map ((a_function,a_sequence) ] | কোন পরিবর্তন নেই |
1, ফিল্টার ()) এর সাথে অনুরূপ, সবচেয়ে সহজ ক্ষেত্রে, 2to3 একটি list () ফাংশন ব্যবহার করে map () কল প্যাকেজ করে। 2、 বিশেষ ম্যাপ ((None,...) এর জন্য, ফিল্টার ((None,...) এর অনুরূপ, 2to3 এটিকে একটি list (() এর সমতুল্য কল হিসাবে রূপান্তর করবে। ৩, যদি map এর প্রথম প্যারামিটারটি একটি ল্যাম্বডা ফাংশন হয়, তাহলে ২-২-৩ এটিকে সমতুল্যভাবে তালিকার বিশ্লেষণে রূপান্তরিত করে। ৪, পুরো সারি জুড়ে চলা ফর লুপের জন্য পরিবর্তন করার প্রয়োজন নেই। ৫. আবারও, এখানে কোনও পরিবর্তন করার দরকার নেই, কারণ তালিকাটি পুরো সিকোয়েন্স জুড়ে বিশ্লেষণ করবে, এমনকি যদি ম্যাপ ()) এর রিটার্ন মানটি আইডেরার হয় এবং তালিকা নয় তবে এটি ঠিকঠাক কাজ করবে।
পাইথন ৩-এ, reduce () ফাংশনটি গ্লোবাল নামস্থান থেকে সরানো হয়েছে এবং এটি এখন fucntools মডিউলে স্থাপন করা হয়েছে।
নোট | পাইথন ২ | পাইথন ৩ |
---|---|---|
① | হ্রাস ((a, b, c) | থেকে ফাংশন সরঞ্জাম আমদানি হ্রাস হ্রাস ((a, b, c) |
পাইথন ২-এ একটি গ্লোবাল ফাংশন আছে, যার নাম apply ((), যা একটি ফাংশন f এবং একটি তালিকা [a, b, c] ব্যবহার করে, যা f ((a, b, c) । আপনি এই ফাংশনটিকে সরাসরি কল করে একই কাজ করতে পারেন এবং তালিকার আগে একটি নক্ষত্র (*) যুক্ত করে এটির কাছে একটি পরামিতি হিসাবে পাস করতে পারেন। পাইথন 3-এ, apply (() ফাংশনটি আর নেই; নক্ষত্র চিহ্নিতকরণ পদ্ধতি ব্যবহার করতে হবে।
নোট | পাইথন ২ | পাইথন ৩ |
---|---|---|
① | apply ((a_function, a_list_of_args) | a_function ((*a_list_of_args) |
② | apply ((a_function, a_list_of_args, a_dictionary_of_named_args) | a_function ((*a_list_of_args,**a_dictionary_of_named_args) |
③ | apply ((a_function, a_list_of_args+z) | a_function ((*a_list_of_args+z) |
④ | apply ((aModule.a_function, a_list_of_args) | aModule.a_function ((*a_list_of_args) |
১, সহজতম রূপ, একটি ফাংশন কল করার জন্য একটি নক্ষত্র যোগ করা হয় (যেমন [a, b, c]) একটি পরামিতি তালিকার আগে। এটি পাইথন ২ এর apply ()) ফাংশনের সমতুল্য। ২, পাইথন ২-এ, apply ((() ফাংশনটি আসলে ৩টি পরামিতি বহন করতে পারেঃ একটি ফাংশন, একটি পরামিতি তালিকা, একটি অভিধান নামকরণ পরামিতি ((dictionary of named arguments) । পাইথন ৩-এ আপনি পরামিতি তালিকার আগে একটি নক্ষত্র যুক্ত করে একটি সূচক যুক্ত করতে পারেন।), একই প্রভাব অর্জনের জন্য অভিধান নামকরণের পরামিতির আগে দুটি নক্ষত্র ((**) যোগ করা হয়। ৩, অপারেটর + এখানে লিঙ্ক তালিকার ফাংশন হিসেবে ব্যবহৃত হয়, যার অগ্রাধিকার অপারেটরের চেয়ে বেশি, তাই a_list_of_args + z এর চারপাশে অতিরিক্ত বন্ধনী যোগ করার প্রয়োজন নেই। ৪,২-৩ স্ক্রিপ্টগুলি জটিল apply () কলগুলি রূপান্তর করতে যথেষ্ট বুদ্ধিমান, যার মধ্যে আমদানি মডিউলের ফাংশনগুলি কল করা অন্তর্ভুক্ত।
পাইথন ২-এ, আপনি একটি স্ট্রিং-এর উপর ইন্টারন ফাংশন (intern) এর ভূমিকা ব্যবহার করতে পারেন যা কর্মক্ষমতা অপ্টিমাইজেশান অর্জনের জন্য সীমাবদ্ধ। পাইথন ৩-এ, ইন্টারন ফাংশন (intern) সিএস মডিউলে স্থানান্তরিত হয়।
নোট | পাইথন ২ | পাইথন ৩ |
---|---|---|
① | intern ((aString) | sys.intern ((aString) |
যেমন প্রিন্ট স্টেটমেন্ট পাইথন ৩ তে ফাংশন হয়ে যায়, তেমনি exec স্টেটমেন্টও হয় ।exec ()) ফাংশনটি একটি স্ট্রিং ব্যবহার করে যা যেকোনো ধরনের পাইথন কোড ধারণ করে, যা পরামিতি হিসেবে ব্যবহার করা হয়, এবং তারপর এটিকে এক্সিকিউশন স্টেটমেন্ট বা এক্সপ্রেশন হিসেবে এক্সিকিউট করা হয় ।exec ()) এর সাথেeval ()) এর অনুরূপ, কিন্তু exec ()) আরও শক্তিশালী এবং আরো দক্ষ ।eval ()) ফাংশনটি শুধুমাত্র একটি পৃথক এক্সপ্রেশন এক্সিকিউট করতে পারে, কিন্তু exec ()) একাধিক স্টেটমেন্ট এক্সিকিউট করতে পারে, ()) আমদানি ()) আমদানি ()) ফাংশন ঘোষণা ()) এবং আসলে পুরো পাইথন প্রোগ্রামের স্ট্রিং প্রতিনিধিত্বও করতে পারে ।
নোট | পাইথন ২ | পাইথন ৩ |
---|---|---|
① | exec কোডString | exec ((codeString) |
② | exec codea_global_namespace-এ স্ট্রিং | exec ((codeString, a_global_namespace) |
③ | exec codea_global_namespace,a_local_namespace-এ স্ট্রিং | exec ((codeString, a_global_namespace,a_local_namespace) |
১, এর সহজতম রূপ, যেহেতু exec ((() এখন একটি ফাংশন, না একটি বাক্য, ২-২-৩ এই স্ট্রিং ফর্মের কোডটি বন্ধনী দিয়ে ঘিরে দেয়। ২. পাইথন ২ এর exec স্ট্রিং নামস্থান নির্দিষ্ট করতে পারে, কোডটি বিশ্বব্যাপী বস্তুর তৈরি এই ব্যক্তিগত স্পেসে কার্যকর হবে। পাইথন ৩ এও এই বৈশিষ্ট্য রয়েছে; আপনি কেবল এই নামস্থানটি দ্বিতীয় পরামিতি হিসাবে exec ()) ফাংশনে পাস করতে হবে। ৩, আরো অদ্ভুতভাবে, পাইথন ২-এ exec স্ট্রিং একটি স্থানীয় নামস্থান (যেমন একটি ফাংশনে ঘোষিত ভেরিয়েবল) নির্দিষ্ট করতে পারে। পাইথন ৩-এ, exec () ফাংশনটিও এটি করে।
পূর্ববর্তী exec বিবৃতির মতো, পাইথন ২-এর execfile বিবৃতিটিও পাইথন কোড চালানোর মতো স্ট্রিং ব্যবহার করতে পারে; এর বিপরীতে exec স্ট্রিং ব্যবহার করে এবং execfile ফাইল ব্যবহার করে। পাইথন ৩-এ, execfile বিবৃতিটি মুছে ফেলা হয়েছে। আপনি যদি সত্যিই একটি ফাইলের পাইথন কোডটি চালাতে চান তবে আপনি এটি আমদানি করতে চান না তবে আপনি ফাইলটি খুলতে পারেন, এর বিষয়বস্তু পড়তে পারেন এবং তারপরে কমপাইল) গ্লোবাল ফাংশনটি কল করতে পারেন।
নোট | পাইথন ২ | পাইথন ৩ |
---|---|---|
① | execfile (( |
exec ((compile ((open (( |
পাইথন ২-এ, একটি নির্বাচিত বস্তুর স্ট্রিং উপস্থাপন করার জন্য, একটি পদ্ধতি আছে যা বস্তুটিকে বিপরীত ক্যোটেটে পরিবেশন করে।x
) এর বিশেষ সিনট্যাক্স । পাইথন ৩-এ, এই ক্ষমতাটি এখনও বিদ্যমান, কিন্তু আপনি এই স্ট্রিংটি উপস্থাপন করার জন্য আর বিপরীত কুইজ ব্যবহার করতে পারবেন না । আপনাকে গ্লোবাল ফাংশন repr ((() ব্যবহার করতে হবে ।
নোট | পাইথন ২ | পাইথন ৩ |
---|---|---|
① | `x` | repr ((x) |
② | ` |
রেপ (( |
১, মনে রাখবেন, x যেকোনো কিছু হতে পারে
পাইথন ২ থেকে পাইথন ৩ এর মধ্যে ব্যতিক্রমী ক্যাপচারের সিনট্যাক্স কিছুটা পরিবর্তিত হতে পারে।
নোট | পাইথন ২ | পাইথন ৩ |
---|---|---|
① | try: import mymodule except ImportError, e pass |
try: import mymodule except ImportError as e: pass |
② | try: import mymodule except (RuntimeError, ImportError), e pass |
try: import mymodule except (RuntimeError, ImportError) as e: pass |
③ | try: import mymodule except ImportError: pass |
কোন পরিবর্তন নেই |
④ | try: import mymodule except: pass |
কোন পরিবর্তন নেই |
১, পাইথন ২-এ ব্যতিক্রমী প্রকারের পরে কমা যুক্ত করার তুলনায়, পাইথন ৩-এ একটি নতুন কীওয়ার্ড ব্যবহার করা হয়েছে, as. ২, as কীওয়ার্ডটি একই সময়ে একাধিক ধরণের ব্যতিক্রম ধরার ক্ষেত্রেও ব্যবহার করা যেতে পারে। ৩। যদি আপনি একটি ব্যতিক্রম ধরতে চান কিন্তু ব্যতিক্রমের বস্তুটি অ্যাক্সেস করতে আগ্রহী না হন, তবে পাইথন ২ এবং পাইথন ৩ এর সিনট্যাক্স একই। ৪। একইভাবে, যদি আপনি একটি ফ্যালব্যাক পদ্ধতি ব্যবহার করেন যা সমস্ত ব্যতিক্রমকে ধরতে পারে, তবে পাইথন ২ এবং পাইথন ৩ এর সিনট্যাক্স একই। ৫। মডিউল (অথবা অন্য অধিকাংশ ক্ষেত্রে) আমদানি করার সময় আপনার অবশ্যই এই পদ্ধতিটি ব্যবহার করা উচিত নয় (উপরের ফ্যালব্যাকটি উল্লেখ করুন) । অন্যথায়, প্রোগ্রামটি কীবোর্ড ইন্টারপুট (যদি ব্যবহারকারী Ctrl-C চাপে প্রোগ্রামটি বিরতি দেয়) এর মতো একটি ব্যতিক্রম ধরতে পারে, যা ডিবাগিংকে আরও কঠিন করে তোলে।
পাইথন ৩-এ, স্বনির্ধারিত ব্যতিক্রমের জন্য সিনট্যাক্সের সামান্য পরিবর্তন করা হয়েছে।
নোট | পাইথন ২ | পাইথন ৩ |
---|---|---|
① | আমার ব্যতিক্রম বাড়ান | অপরিবর্তিত |
② | MyException, |
MyException (MyException) আপলোড করুন (( |
③ | MyException, |
raise MyException (( |
④ | সমর্থিত নয় |
১, ব্যবহারকারীর কাস্টমাইজড ভুল বার্তা ছাড়াই ব্যতিক্রমগুলি ফেলে দেওয়া, যার সহজতম রূপটিতে, সিনট্যাক্স পরিবর্তন হয় না। ২। যখন আপনি ব্যবহারকারীর কাস্টমাইজড ভুল বার্তা সহ একটি ব্যতিক্রম ছুঁড়ে ফেলতে চান, তখন পরিবর্তনটি সুস্পষ্ট। Python ২ ব্যতিক্রম এবং ভুল বার্তা পৃথক করার জন্য একটি কমা ব্যবহার করে; Python ৩ ব্যতিক্রমকে একটি পরামিতি হিসাবে ভুল বার্তা দেয়। ৩. পাইথন ২-এ ব্যবহারকারীর কাস্টম ট্রেসের সাথে একটি ব্যতিক্রম ছুঁড়ে ফেলার জন্য আরও জটিল সিনট্যাক্স সমর্থন করে। পাইথন ৩-এ আপনি এটিও করতে পারেন, তবে সিনট্যাক্সটি সম্পূর্ণ ভিন্ন। ৪. পাইথন ২-এ, আপনি একটি ব্যতিক্রমহীন ব্যতিক্রমকে কেবলমাত্র একটি ব্যতিক্রম বার্তা দিয়ে ফেলে দিতে পারেন। পাইথন ৩-এ, এই ফর্মটি আর সমর্থিত নয়। ২-৩ আপনাকে সতর্ক করবে যে এটি স্বয়ংক্রিয়ভাবে এই সিনট্যাক্সটি সংশোধন করতে পারে না।
পাইথন ২-এ, জেনারেটরের একটি throw ()) পদ্ধতি আছে। a_generator.throw ()) কল করা হয় যা জেনারেটরকে থামিয়ে দেওয়ার সময় একটি ব্যতিক্রম ফেলে দেয় এবং তারপরে জেনারেটর ফাংশন দ্বারা প্রাপ্ত পরবর্তী মানটি ফিরিয়ে দেয়। পাইথন ৩-এ, এই বৈশিষ্ট্যটি এখনও উপলব্ধ, তবে এটি সিনট্যাক্সের ক্ষেত্রে কিছুটা আলাদা।
নোট | পাইথন ২ | পাইথন ৩ |
---|---|---|
① | a_generator.throw(MyException) | কোন পরিবর্তন নেই |
② | a_generator.throw ((MyException, |
a_generator.throw(MyException( |
③ | a_generator.throw (( |
সমর্থিত নয় |
১। সরলতম রূপে, জেনারেটরটি ব্যবহারকারীর কাস্টমাইজড ভুল বার্তা ছাড়াই ব্যতিক্রমগুলি ফেলে দেয়। এই ক্ষেত্রে, পাইথন ২ থেকে পাইথন ৩ এর মধ্যে কোনও সংশোধন নেই। ২। যদি জেনারেটর একটি ব্যতিক্রম ফেলে দেয় যা ব্যবহারকারীর কাস্টমাইজড ত্রুটি বার্তা নিয়ে আসে, তাহলে আপনাকে এই ত্রুটি বার্তার স্ট্রিংটি (Error string) ব্যতিক্রম শ্রেণীর কাছে পাঠাতে হবে যাতে এটিকে উদাহরণস্বরূপ করা যায়। ৩. পাইথন ২ শুধুমাত্র ব্যতিক্রমী বার্তাগুলির ব্যতিক্রমকে সমর্থন করে। পাইথন ৩ এই সিনট্যাক্স সমর্থন করে না এবং ২-৩ আপনাকে একটি সতর্কবার্তা বার্তা দেখায় যে আপনাকে এই কোডটি ম্যানুয়ালি মেরামত করতে হবে।
পাইথন ২-এ, একটি নির্দিষ্ট পরিসরের সংখ্যা পাওয়ার দুটি উপায় রয়েছেঃ range ((), যা একটি তালিকা ফেরত দেয়, এবং range ((), যা একটি পুনরাবৃত্তি প্রদান করে।
নোট | পাইথন ২ | পাইথন ৩ |
---|---|---|
① | xrange ((10) | পরিসীমা ((10) |
② | a_list = পরিসীমা ((10) | a_list = list ((range ((১০)) |
③ | [i ইন xrange ((10) এর জন্য] | [i ইন রেঞ্জের জন্য ((10) ] |
④ | i এর জন্য পরিসীমা ((১০): | কোন পরিবর্তন নেই |
⑤ | যোগফল (বিভিন্ন) (১০) | কোন পরিবর্তন নেই |
১, সবচেয়ে সহজ ক্ষেত্রে, ২-৩ xrange ()) কে কেবল range ()) এ রূপান্তর করে। ২, যদি আপনার পাইথন ২ কোড range ব্যবহার করে, 2to3 জানে না যে আপনার একটি তালিকা প্রয়োজন কিনা, অথবা একটি আইডেরারও কাজ করে কিনা। সাবধানতা অবলম্বন করার জন্য, 2to3 একটি ত্রুটি রিপোর্ট করতে পারে, এবং তারপর list () ব্যবহার করে range () এর রিটার্ন মানটিকে তালিকা টাইপে রূপান্তর করতে বাধ্য করে। ৩। যদি তালিকার বিশ্লেষণে xrange () ফাংশন থাকে, তাহলে এটির রিটার্ন ভ্যালুকে একটি তালিকায় রূপান্তর করার প্রয়োজন নেই, কারণ তালিকার বিশ্লেষণ আইডারেটরের ক্ষেত্রেও কার্যকর। ৪, অনুরূপভাবে, for loop আইডেরারগুলিতেও কাজ করে, তাই এখানেও কিছুই পরিবর্তন করা হয়নি। ৫, sum () ফাংশনটি আইডারেটরগুলিতে কাজ করতে পারে, তাই 2to3 এখানেও কোনও পরিবর্তন করে না। যেমনটি একটি দস্তাবেজ পদ্ধতিতে যা একটি তালিকা নয় বরং একটি দর্শন () হিসাবে ফিরে আসে, এটি একইভাবে min (), max (), sum (), list (), tuple (), set (), sorted (), any (), all (), all (), all (), all (), all (), all (), all (), all (), all (), all (), all (), all (), all (), all (), all (), all (), all (), all (), all (), all (), all (), all (), all (), all (), all (), all (), all (), all (), all (), all ().
পাইথন ২ এর দুটি গ্লোবাল ফাংশন রয়েছে যা ব্যবহারকারীর ইনপুটের জন্য কমান্ড লাইনে অনুরোধ করা হয়; প্রথমটি ইনপুট বলা হয়, যা ব্যবহারকারীর একটি পাইথন এক্সপ্রেশন ইনপুট করার জন্য অপেক্ষা করে এবং ফলাফল ফিরে আসে; দ্বিতীয়টিraw_input বলা হয়, যা ব্যবহারকারী প্রবেশ করে তা ফিরে আসে। এটি নতুনদের জন্য খুব বিভ্রান্তিকর এবং এটি ব্যাপকভাবে পাইথন ভাষার একটি চিংড়ি পাত্র হিসাবে দেখা হয়।
নোট | পাইথন ২ | পাইথন ৩ |
---|---|---|
① | raw_input (() | ইনপুট (() |
② | raw_input (( |
ইনপুট (( |
③ | ইনপুট (() | মূল্যায়ন ((ইনপুট)) |
১, সরলতম রূপ, raw_input (()) এর পরিবর্তে ইনপুট (()) । ২. পাইথন ২-এ, raw_input ()) ফাংশনটি একটি টুলটিপকে একটি প্যারামিটার হিসেবে উল্লেখ করতে পারে। পাইথন ৩-এ এই ফাংশনটি সংরক্ষিত রয়েছে। ৩। যদি আপনি সত্যিই ব্যবহারকারীকে একটি পাইথন এক্সপ্রেশন ইনপুট করার অনুরোধ করতে চান, তাহলে আপনি ইনপুট ()) ফাংশনটি কল করে ফলাফল গণনা করতে পারেন এবং এর রিটার্ন ভ্যালুটি eval ()) এ পাস করতে পারেন।
পাইথন ২-এ, ফাংশনের কোডগুলি ফাংশনের নিজস্ব বিশেষ বৈশিষ্ট্যগুলি অ্যাক্সেস করতে পারে। পাইথন ৩-এ, এই বিশেষ বৈশিষ্ট্যগুলিকে পুনরায় নামকরণ করা হয়েছে।
নোট | পাইথন ২ | পাইথন ৩ |
---|---|---|
① | a_function.func_name | a_function._নাম_ |
② | a_function.func_doc | a_function._ডক্টর |
③ | a_function.func_defaults | a_function._ডিফল্ট |
④ | a_function.func_dict | a_function._dict_ |
⑤ | a_function.func_closure | a_function._বন্ধ_ |
⑥ | a_function.func_globals | a_function._গ্লোবাল_ |
⑦ | a_function.func_code | a_function._কোড_ |
১,__name__ বৈশিষ্ট্য ((প্রাথমিক func_name) ফাংশনের নাম ধারণ করে। ২,__doc__ বৈশিষ্ট্য (অবশ্যই funcdoc) আপনি ফাংশন সোর্স কোডে সংজ্ঞায়িত ডকুমেন্ট স্ট্রিং (docstring) ধারণ করে ৩, __defaults__ বৈশিষ্ট্যটি (প্রাথমিকভাবে func_defaults) হল একটি উপাদান যা একটি প্যারামিটারের ডিফল্ট মান সংরক্ষণ করে। ৪, __dict__ বৈশিষ্ট্য (প্রাথমিকভাবে func_dict) হল একটি নামস্থান যা যেকোনো ফাংশনের বৈশিষ্ট্যকে সমর্থন করে। ৫,__closure__ বৈশিষ্ট্য (প্রাথমিকভাবে func_closure) হল একটি সেল বস্তুর একটি উপাদান যা ফাংশনের ফ্রি ভেরিয়েবলের সাথে আবদ্ধতা ধারণ করে। ৬,__globals__ বৈশিষ্ট্যটি (প্রাথমিকভাবে func_globals) হল একটি মডিউল গ্লোবাল নামস্থানের একটি রেফারেন্স, যেখানে ফাংশন নিজেই এই নামস্থানের মধ্যে সংজ্ঞায়িত করা হয়। ৭,__code__ বৈশিষ্ট্যটি একটি কোড অবজেক্ট যা একটি কম্পাইল করা ফাংশনকে নির্দেশ করে।
পাইথন ২-তে ফাইল অবজেক্টের একটি xreadlines ()) পদ্ধতি রয়েছে যা একটি আইডেরারকে এক লাইন ফাইল একবারে পাঠ করে দেয়। এটি বিশেষ করে ফর লুপে কার্যকর। প্রকৃতপক্ষে, পিথন ২-এর পরবর্তী সংস্করণগুলি ফাইল অবজেক্টের জন্য এই বৈশিষ্ট্যটি যুক্ত করেছে।
পাইথন ৩-এ, xreadlines (() পদ্ধতিটি আর ব্যবহারযোগ্য নয়। 2to3 সহজ পরিস্থিতি সমাধান করতে পারে, তবে কিছু প্রান্তিক ক্ষেত্রে হস্তক্ষেপ প্রয়োজন।
নোট | পাইথন ২ | পাইথন ৩ |
---|---|---|
① | a_file.xreadlines-এ লাইনটির জন্যঃ | a_file-এ লাইনটির জন্যঃ |
② | a_file.xreadlines ((5) এর লাইনের জন্যঃ | কোন পরিবর্তন নেই (বিচ্ছিন্ন) |
১। যদি আপনি আগে প্যারামিটারবিহীন xreadlines () কল করেন, ২-৩ এটিকে ফাইলের বস্তুতে রূপান্তরিত করে। পাইথন ৩-এ, এই রূপান্তরিত কোডটি আগের মতোই কাজ করতে পারেঃ ফাইলের একটি লাইন একবার পড়বে, এবং তারপরে for লুপের লুপটি সম্পাদন করবে।
২। যদি আপনি আগে একটি প্যারামিটার ((প্রতিটি পঠিত লাইন সংখ্যা) xreadlines () কল করার জন্য ব্যবহার করে থাকেন, 2to3 আপনার জন্য Python 2 থেকে Python 3 তে রূপান্তর করতে পারে না, তাহলে আপনার কোডটি এইভাবে ব্যর্থ হবেঃ AttributeError:
পাইথন ২-এ, আপনি একটি নামহীন ল্যাম্বদা ফাংশন (অননুমোদিত ল্যাম্বদা ফাংশন) সংজ্ঞায়িত করতে পারেন, যা এই ফাংশনটিকে আসলে একাধিক প্যারামিটার গ্রহণ করতে সক্ষম করে, যেমন একটি প্যারামিটার হিসাবে উপাদানগুলির সংখ্যা নির্ধারণ করে। আসলে, পাইথন ২-এর ব্যাখ্যাকারী এই উপাদানটিকে নামযুক্ত প্যারামিটারগুলিতে আনপ্যাক করে, এবং তারপরে আপনি ল্যাম্বদা ফাংশনে তাদের নাম দিয়ে উল্লেখ করতে পারেন। পাইথন ৩-এ, আপনি এখনও একটি ল্যাম্বদা ফাংশনের প্যারামিটার হিসাবে একটি প্যারামিটার পাস করতে পারেন, তবে পাইথন ব্যাখ্যাকারী এটিকে নামযুক্ত প্যারামিটার হিসাবে বিশ্লেষণ করবে না। আপনাকে অবস্থান সূচক (positional index) এর মাধ্যমে প্রতিটি প্যারামিটারকে উল্লেখ করতে হবে।
নোট | পাইথন ২ | পাইথন ৩ |
---|---|---|
① | ল্যাম্বডা (x,): x+ f ((x) | ল্যাম্বডা x1: x1[0]+f(x1[0]) |
② | ল্যাম্বডা (x, y): x+f(y) | ল্যাম্বদা x_y: x_y[0]+f(x_y[1]) |
③ | ল্যাম্বডা (x,(y,z)): x+ y+ z | ল্যাম্বদা x_y_z: x_y_z[0]+x_y_z[1][0]+ x_y_z[1][1] |
④ | ল্যাম্বডা x, y, z: x+y + z | অপরিবর্তিত |
১, যদি আপনি একটি ল্যাম্বডা ফাংশন সংজ্ঞায়িত করেন, এটি একটি উপাদান ধারণকারী উপাদানকে একটি প্যারামিটার হিসাবে ব্যবহার করে, পাইথন ৩-এ এটি একটি x1[০] রেফারেন্স ধারণকারী ল্যাম্বডা ফাংশনে রূপান্তরিত হয়। x1 হল 2to3 স্ক্রিপ্ট যা স্বয়ংক্রিয়ভাবে মূল উপাদানগুলির মধ্যে নামকরণ পরামিতির উপর ভিত্তি করে উত্পন্ন হয়। ২, দুটি উপাদান সমন্বিত একটি উপাদান ((x, y) ব্যবহার করে একটি ল্যাম্বডা ফাংশনকে x_y তে রূপান্তরিত করা হয়, যার দুটি অবস্থানের পরামিতি রয়েছে, যা x_y[0] এবং x_y[1]। ৩, ২-টু-৩ স্ক্রিপ্ট এমনকি নেস্ট নামকরণ পরামিতি ব্যবহার করে উপাদানগুলিকে ল্যাম্বডা ফাংশন হিসাবে ব্যবহার করতে পারে। ফলস্বরূপ কোডটি কিছুটা কঠিন, তবে এটি পাইথন ৩-তে একই কাজ করে যা পাইথন ২-তে মূল কোডটি করেছিল। ৪। আপনি একাধিক প্যারামিটার ব্যবহার করে একটি ল্যাম্বডা ফাংশন সংজ্ঞায়িত করতে পারেন। যদি প্যারামিটারটির চারপাশে কোন বন্ধনী না থাকে, তাহলে Python 2 এটিকে একাধিক প্যারামিটার সহ একটি ল্যাম্বডা ফাংশন হিসাবে বিবেচনা করবে; এই ল্যাম্বডা ফাংশনটির শরীরে, আপনি নামের মাধ্যমে এই প্যারামিটারগুলিকে উল্লেখ করেন, যেমনটি আপনি অন্যান্য ধরণের ফাংশনগুলিতে করেন। এই সিনট্যাক্সটি Python 3-এ এখনও কার্যকর।
পাইথন ২-এ, ক্লাস পদ্ধতিগুলি তাদের ক্লাস অবজেক্টগুলি সংজ্ঞায়িত করতে অ্যাক্সেসযোগ্য এবং পদ্ধতি অবজেক্টগুলি নিজেই অ্যাক্সেসযোগ্য। im_self হল ক্লাসের উদাহরণ বস্তু; im_func হল ফাংশন অবজেক্ট এবং im_class হল ক্লাস নিজেই। পাইথন ৩-এ, এই বৈশিষ্ট্যগুলি নামকরণ চুক্তি অনুসরণ করার জন্য পুনরায় নামকরণ করা হয়।
নোট | পাইথন ২ | পাইথন ৩ |
---|---|---|
① | aClassInstance.aClassMethod.im_func | ক্লাস ইনস্ট্যান্স.ক্লাস পদ্ধতি._ফাংশন_ |
② | aClassInstance.aClassMethod.im_self | ক্লাস ইনস্ট্যান্স.ক্লাস পদ্ধতি._স্ব_ |
③ | aClassInstance.aClassMethod.im_class | ক্লাস ইনস্ট্যান্স.ক্লাস পদ্ধতি._স্ব_._ক্লাস_ |
পাইথন ২-এ, আপনি নিজের ক্লাস তৈরি করতে পারেন এবং সেগুলিকে একটি বুলিয়ান প্রেক্ষাপটে ব্যবহার করতে পারেন। উদাহরণস্বরূপ, আপনি এই ক্লাসটি ইনস্টিমুলেট করতে পারেন এবং এই ইনস্টিমুলেটেড অবজেক্টটি একটি আইএফ স্ট্রেইটে ব্যবহার করতে পারেন। এই উদ্দেশ্যে, আপনি একটি বিশেষ_শূন্য_() মেথড, যার রিটার্ন ভ্যালু True বা False, যখন উদাহরণগত অবজেক্টটি বুলের প্রেক্ষাপটে থাকে তখন এই পদ্ধতিটি কল করা হয়। পাইথন 3 এ, আপনি এখনও একই ফাংশনটি সম্পাদন করতে পারেন, তবে এই বিশেষ পদ্ধতির নাম পরিবর্তন করা হয়েছে।বুল_()。
নোট | পাইথন ২ | পাইথন ৩ |
---|---|---|
① | ক্লাস A: def _শূন্য_(self): পাস |
ক্লাস A: def _বুল_(self): পাস |
② | ক্লাস A: def _শূন্য_(self, x, y): পাস |
কোন পরিবর্তন নেই |
১, যখন আপনি একটি ক্লাস অবজেক্টকে বুলের প্রেক্ষাপটে ব্যবহার করেন তখন পাইথন ৩_বুল_(), কিন্তু না _শূন্য_() ◄ ২, কিন্তু যদি আপনি একটি সংজ্ঞায়িত আছে যে দুটি পরামিতি ব্যবহার করে।শূন্য_() পদ্ধতি, 2to3 স্ক্রিপ্টটি অনুমান করে যে আপনি যে পদ্ধতিটি সংজ্ঞায়িত করেছেন তা অন্য কোনও কাজে ব্যবহার করা হয়, তাই কোডটিতে কোনও পরিবর্তন করা হয় না।
পাইথন ২ এবং পাইথন ৩ এর মধ্যে, অষ্টমিক (অক্টায়াল) সংখ্যার সংজ্ঞা দেওয়ার সিনট্যাক্স সামান্য পরিবর্তিত হয়েছে।
নোট | পাইথন ২ | পাইথন ৩ |
---|---|---|
① | এক্স = ০৭৫৫ | x = 0o755 |
দীর্ঘস্থায়ী এবং সম্পূর্ণরূপে একত্রিত হওয়ার কারণে, sys.maxint ধ্রুবকটি আর সঠিক নয়; তবে এই মানটি নির্দিষ্ট প্ল্যাটফর্মের জন্য সনাক্তকরণের দক্ষতার জন্য দরকারী, তাই এটি পাইথন 3 দ্বারা সংরক্ষণ করা হয়েছে এবং sys.maxsize নামে পুনরায় নামকরণ করা হয়েছে।
নোট | পাইথন ২ | পাইথন ৩ |
---|---|---|
① | sys importmaxint থেকে | sys importmaxsize থেকে |
② | a_function ((sys.maxint) | a_function ((sys.maxsize) |
১, maxint maxsize-এ পরিবর্তিত হয়েছে। ২। সমস্ত sys.maxint sys.maxsize হয়ে গেছে।
পাইথন ২-এ, আপনি একটি বস্তুকে কল করা যায় কিনা তা পরীক্ষা করতে গ্লোবাল ফাংশন callable (যেমন ফাংশন) ব্যবহার করতে পারেন। পাইথন ৩-এ, এই গ্লোবাল ফাংশনটি বাতিল করা হয়েছে। একটি বস্তুকে কল করা যায় কিনা তা পরীক্ষা করার জন্য বিশেষ পদ্ধতি পরীক্ষা করা যেতে পারে।কল_()) এর অস্তিত্ব।
নোট | পাইথন ২ | পাইথন ৩ |
---|---|---|
① | কলযোগ্য ((কিছুই) | কিছু না, |
পাইথন ২-এ, গ্লোবাল ফাংশন zip ((() একটি প্যারামিটার হিসেবে যে কোনো একাধিক সারি ব্যবহার করতে পারে, যা একটি উপাদান দ্বারা গঠিত একটি তালিকা ফেরত দেয়। প্রথম উপাদানটি প্রতিটি সারি থেকে প্রথম উপাদান ধারণ করে; দ্বিতীয় উপাদানটি প্রতিটি সারি থেকে দ্বিতীয় উপাদান ধারণ করে; তারপর এটিকে এগিয়ে নিয়ে যায়। পাইথন ৩-এ, zip ((() একটি আইডারেটর ফেরত দেয়, তালিকা নয়।
নোট | পাইথন ২ | পাইথন ৩ |
---|---|---|
① | zip ((a, b, c) | list ((zip ((a, b, c)) |
② | d.join ((zip ((a, b, c)) | কোন পরিবর্তন নেই |
সবচেয়ে সহজ পদ্ধতিতে, আপনি zip () ফাংশনের পূর্ববর্তী ফাংশনটি পুনরুদ্ধার করতে list () ফাংশনটি zip () ফাংশনটি পুনরুদ্ধার করতে পারেন। যেসব প্রেক্ষাপটে (যেমন join () পদ্ধতির কল) সিরিজের সকল উপাদানকে অতিক্রম করা হয় সেখানে zip () রিটার্ন করা আইডেরারগুলি সঠিকভাবে কাজ করতে পারে। 2to3 স্ক্রিপ্টগুলি এগুলি সনাক্ত করে এবং আপনার কোডে কোনও পরিবর্তন করে না।
পাইথন ২-এ, স্ট্যান্ডার্ডError হ'ল স্টপআইটারেশন, জেনারেটরএক্সাইট, কীবোর্ডবিরতি, সিস্টেমএক্সাইট ব্যতীত অন্যান্য সমস্ত অন্তর্নির্মিত ব্যতিক্রমী বেসক্লাস।
নোট | পাইথন ২ | পাইথন ৩ |
---|---|---|
① | x = স্ট্যান্ডার্ডError() | x = ব্যতিক্রম ((() |
② | x =StandardError ((a, b, c) | x = ব্যতিক্রম ((a, b, c) |
types মডিউলে বিভিন্ন ধ্রুবক রয়েছে যা আপনাকে একটি বস্তুর ধরন নির্ধারণ করতে সাহায্য করে। Python 2-এ এটিতে সমস্ত মৌলিক ডেটা ধরনের প্রতিনিধিত্বকারী ধ্রুবক রয়েছে, যেমন dict এবং int। Python 3-এ এই ধ্রুবকগুলি বাতিল করা হয়েছে। কেবলমাত্র মৌলিক ধরনের নাম ব্যবহার করে তাদের প্রতিস্থাপন করা প্রয়োজন।
নোট | পাইথন ২ | পাইথন ৩ |
---|---|---|
types.UnicodeType | str | |
types.StringType | বাইট | |
types.DictType | ডিক্ট | |
types.IntType | int | |
types.LongType | int | |
types.ListType | তালিকা | |
types.NoneType | প্রকার ((কোনও নয়) | |
types.BooleanType | বুল | |
types.BufferType | মেমরিভিউ | |
types.ClassType | প্রকার | |
types.ComplexType | জটিল | |
types.EllipsisType | প্রকার ((Ellipsis) | |
types.FloatType | ভাসমান | |
types.ObjectType | বস্তু | |
types.NotImplementedType | প্রকার ((প্রয়োগ করা হয়নি) | |
types.SliceType | টুকরা | |
types.TupleType | টুপল | |
types.TypeType | প্রকার | |
types.XRangeType | পরিসীমা |
types.StringType বাইট হিসাবে ম্যাপ করা হয়, str নয়, কারণ পাইথন ২-এর স্ট্রিং স্ট্রিংগুলি (অ-ইউনিকোড এনকোড করা স্ট্রিং, যেমন সাধারণ স্ট্রিং) আসলে কিছু বাইটের ক্রম যা কিছু অক্ষর দিয়ে এনকোড করা হয়।
isinstance () ফাংশনটি একটি বস্তুর একটি নির্দিষ্ট শ্রেণী বা টাইপ (type) এর উদাহরণ কিনা তা পরীক্ষা করে। পাইথন ২-এ আপনি টাইপ (types) দ্বারা গঠিত একটি উপাদানকে একটি ইনস্ট্যান্স (instance) -এ পাস করতে পারেন, এবং যদি বস্তুটি সেটির যেকোনো একটি প্রকার হয় তবে ফাংশনটি True ফেরত দেয়। পাইথন ৩-এ আপনি এখনও এটি করতে পারেন, তবে এটি একটি প্রকারকে একটি পরামিতি হিসাবে দুইবার পাস করার পরামর্শ দেওয়া হয় না।
নোট | পাইথন ২ | পাইথন ৩ |
---|---|---|
isinstance ((x, ((int,float,int)) | isinstance ((x, ((int,float)) |
পাইথন ২-এ দুটি স্ট্রিং টাইপ রয়েছেঃ ইউনিকোড এনকোডড স্ট্রিং এবং নন-ইউনিকোড এনকোডড স্ট্রিং; কিন্তু আসলে আরেকটি টাইপ আছে, যা বেসেস্ট্রিং। এটি একটি বিমূর্ত ডেটা টাইপ, এটি str এবং ইউনিকোড টাইপের সুপারক্লাস। এটি সরাসরি কল বা ইনস্টিমেটেড হতে পারে না, তবে আপনি এটিকে একটি অবজেক্টকে ইউনিকোড স্ট্রিং বা নন-ইউনিকোড স্ট্রিং কিনা তা পরীক্ষা করার জন্য একটি ইনস্ট্যান্সের পরামিতি হিসাবে ব্যবহার করতে পারেন। পাইথন ৩-এ, কেবলমাত্র একটি স্ট্রিং টাইপ রয়েছে, তাই বেসেস্ট্রিংয়ের আর প্রয়োজন নেই।
নোট | পাইথন ২ | পাইথন ৩ |
---|---|---|
isinstance ((x, বেসস্ট্রিং) | isinstance ((x, str) |
পাইথন ২.৩ এ ইটারটুলস মডিউল চালু করা হয়েছে, যা গ্লোবাল ফাংশন জিপ, ম্যাপ, ফিল্টার (variant) এর জন্য ভেরিয়েন্ট (variant) সংজ্ঞায়িত করে, যার রিটার্ন টাইপটি তালিকা নয়, বরং আইডেরার। পাইথন ৩ এ, এই গ্লোবাল ফাংশনগুলির রিটার্ন টাইপটি আইডেরার হওয়ার কারণে, এই ইটারটুলসগুলির মধ্যে এই ভেরিয়েন্ট ফাংশনগুলি বাতিল করা হয়েছে।
নোট | পাইথন ২ | পাইথন ৩ |
---|---|---|
① | itertools.izip ((a, b) | zip ((a, b) |
② | itertools.imap ((a, b) | মানচিত্র (a, b) |
③ | itertools.ifilter ((a, b) | ফিল্টার ((a, b) |
④ | itertools থেকে আমদানি imap, izip, foo | itertools থেকে আমদানি foo |
১, বিশ্বব্যাপী জিপ ফাংশনটি ব্যবহার করুন, আইটারটুলস.আইজিপ ফাংশন নয়। ২, itertools.imap এর পরিবর্তে map ব্যবহার করুন। ৩,itertools.ifilter ((() ফিল্টার হয়ে গেছে (((() । ৪. itertools মডিউলটি পাইথন ৩-এ এখনও বিদ্যমান, এটি কেবলমাত্র বিশ্বব্যাপী নামস্থলে স্থানান্তরিত ফাংশনগুলিকে আর অন্তর্ভুক্ত করে না। ২-৩ স্ক্রিপ্টগুলি যথেষ্ট বুদ্ধিমান হতে পারে যেগুলি আর দরকারী নয় এমন আমদানি বিবৃতিগুলি সরিয়ে ফেলতে পারে, তবে অন্যান্য আমদানি বিবৃতিগুলির অখণ্ডতা বজায় রাখে।
আপনি sys মডিউলে তিনটি ভেরিয়েবল অ্যাক্সেস করতে পারেনঃ sys.exc_type, sys.exc_value, এবং sys.exc_traceback। (এগুলি আসলে পাইথন 1 এর যুগে ছিল) পাইথন 1.5 থেকে, নতুন sys.exc_info এর কারণে, এই তিনটি ভেরিয়েবল ব্যবহার করার পরামর্শ দেওয়া হয় না, যা উপরের তিনটি উপাদান সহ একটি সেট। পাইথন 3 এ, এই তিনটি ভেরিয়েবল অবশেষে বিদ্যমান নেই; এর অর্থ আপনি sys.exc_info ব্যবহার করতে হবে।
নোট | পাইথন ২ | পাইথন ৩ |
---|---|---|
sys.exc_type | sys.exc_info (() [০] | |
sys.exc_value | sys.exc_info (() [1] | |
sys.exc_traceback | sys.exc_info (() [2] |
পাইথন ২-এ, যদি আপনি একটি প্যাটার্ন-পরিভ্রমণকারী তালিকার বিশ্লেষণ লিখতে চান, তাহলে আপনাকে প্যাটার্ন-মানের চারপাশে বন্ধনী যুক্ত করতে হবে না। পাইথন ৩-এ, এই বন্ধনীগুলি প্রয়োজনীয়।
নোট | পাইথন ২ | পাইথন ৩ |
---|---|---|
[i ইন 1,2] | [i for iin(1,2)] |
পাইথন ২ এর একটি ফাংশন আছে os.getcwd (), যা বর্তমান ওয়ার্কিং ডিরেক্টরিকে একটি (অ-ইউনিকোড কোডেড) স্ট্রিং হিসাবে ফেরত দেয়। যেহেতু আধুনিক ফাইল সিস্টেমগুলি ক্যারেক্টার-কোডেড ডিরেক্টরি নামগুলি পরিচালনা করতে পারে, তাই পাইথন ২.৩ এ os.getcwdu () ফাংশনটি চালু করা হয়েছে। os.getcwdu () ফাংশনটি বর্তমান ওয়ার্কিং ডিরেক্টরিকে ইউনিকোডে কোডেড স্ট্রিং দিয়ে ফেরত দেয়। পাইথন ৩-এ, আপনি কেবল os.getcwd () ফাংশনটি ব্যবহার করতে পারেন, কারণ কেবলমাত্র একটি স্ট্রিং রয়েছে।
নোট | পাইথন ২ | পাইথন ৩ |
---|---|---|
os.getcwdu (() | os.getcwd (() |
পাইথন ২-এ, আপনি ক্লাসের বিবৃতিতে মেটাক্লাস পরামিতি সংজ্ঞায়িত করে, অথবা একটি বিশেষ শ্রেণীর স্তরের (class-level) __metaclass__ বৈশিষ্ট্য সংজ্ঞায়িত করে, উপ-ক্লাস তৈরি করতে পারেন। পাইথন ৩-এ, __metaclass__ বৈশিষ্ট্যটি বাতিল করা হয়েছে।
নোট | পাইথন ২ | পাইথন ৩ |
---|---|---|
① | ক্লাস C ((মেটাক্লাস=PapayaMeta): পাস |
অপরিবর্তিত |
② | class Whip: _metaclass_= পাপা মেটা |
class Whip ((metaclass=PapayaMeta): পাস |
③ | ক্লাস সি ((বিচপার, বিটার): _metaclass_= পাপা মেটা |
ক্লাস সি ((উইপার,বিটার,মেটাক্লাস=পাপায়া মেটা): পাস |
১, ক্লাস ঘোষণার সময় মেটাক্লাস পরামিতি ঘোষণা করা হয়, যা পাইথন ২ এবং পাইথন ৩-এ কার্যকর, তারা একই। ২। ক্লাসের সংজ্ঞায় __metaclass__ বৈশিষ্ট্যটি Python 2-এ বৈধ বলে ঘোষণা করা হয়েছে, কিন্তু Python 3-এ বৈধ নয়। ৩, ২-২-৩ একটি কার্যকর ক্লাস বিবৃতি তৈরি করতে পারে, এমনকি যদি ক্লাসটি একাধিক পিতা ক্লাস থেকে উত্তরাধিকার সূত্রে প্রাপ্ত হয়।
নীচে তালিকাভুক্ত ফিক্সগুলি মূলত সত্যিকারের ফিক্স নয়; অর্থাৎ, এগুলি কেবল কোডের শৈলীর বিষয় এবং কোডের সাথে সম্পর্কিত নয়। তবে পাইথনের বিকাশকারীদের কোডের শৈলীগুলি যতটা সম্ভব সামঞ্জস্যপূর্ণ করতে খুব আগ্রহ রয়েছে। এর জন্য একটি বিশেষ অফিসিয়াল গাইড রয়েছে যা পাইথন কোডের শৈলীগুলি বর্ণনা করে।
পাইথন ২-এ, একটি আক্ষরিক সেট সংজ্ঞায়িত করার একমাত্র উপায় হল সেট (a_sequence) কল করা। পাইথন ৩-এ এটি এখনও কার্যকর, কিন্তু নতুন আক্ষরিক চিহ্নিতকরণ (literal notation): বড় বন্ধনী ({}) ব্যবহার করা আরও স্পষ্ট পদ্ধতি। এই পদ্ধতিটি খালি সেট ছাড়াও কার্যকর, কারণ অভিধানগুলিও বড় বন্ধনী দিয়ে চিহ্নিত করা হয়, তাই {} একটি খালি অভিধানকে নির্দেশ করে, একটি খালি সেট নয়।
2to3 স্ক্রিপ্টটি ডিফল্টরূপে set() literal মানগুলি মেরামত করে না। এই বৈশিষ্ট্যটি চালু করতে, কমান্ড লাইন থেকে 2to3 কল করার সময় -f set_literal পরামিতিটি নির্দিষ্ট করুন।
নোট | আগে | পরে |
---|---|---|
সেট (([1,2,3]) | {1,2,3} | |
সেট (((1,2,3)) | {1,2,3} | |
set (([i for iin a_sequence]) | {i for iin a_sequence} {i for iin a_sequence} {i for iin a_sequence} {i for iin a_sequence} {i for iin a_sequence} {i for iin a_sequence} {i for iin a_sequence} {i for iin a_sequence} {i for iin a_sequence} {i for iin a_sequence} {i for iin a_sequence} |
C বাস্তবায়িত পাইথন অবজেক্টগুলি একটি বুফার ইন্টারফেস প্রেরণ করতে পারে যা অন্যান্য পাইথন কোডকে সরাসরি একটি মেমরিতে পড়তে এবং লিখতে দেয়। (এটি শোনাচ্ছে শক্তিশালী, তবে এটিও একইরকম ভয়ঙ্কর) পাইথন 3 এ, বুফারকে মেমরিভিউ নামে নামকরণ করা হয়েছে। (প্রকৃত পরিবর্তনগুলি আরও জটিল, তবে আপনি এই পার্থক্যগুলি প্রায় উপেক্ষা করতে পারেন))
2to3 স্ক্রিপ্টটি ডিফল্টরূপে buffer (() ফাংশনটি মেরামত করে না। এই ফাংশনটি চালু করতে, কমান্ড লাইন থেকে 2to3 কল করার সময় -f buffer পরামিতিটি নির্দিষ্ট করুন।
নোট | আগে | পরে |
---|---|---|
x = বাফার ((y) | x = মেমরিভিউ ((y) |
যদিও পাইথন ইনডেন্টিং এবং আউটডেন্টিং এর জন্য স্পেসগুলির জন্য কঠোর প্রয়োজনীয়তা রাখে, তবে পাইথন অন্যান্য ক্ষেত্রে স্পেস ব্যবহারের জন্য মুক্ত। তালিকা, উপাদান, সেট এবং অভিধানগুলিতে, স্পেসগুলি কম্টের আগে বা পরে উপস্থিত হতে পারে, এটি কোনও খারাপ প্রভাব ফেলবে না। তবে, পাইথন কোড স্টাইল গাইডলাইনগুলি উল্লেখ করে যে কম্টের আগে কোনও স্পেস থাকতে পারে না এবং একটি স্পেস থাকা উচিত। যদিও এটি কেবলমাত্র একটি নান্দনিক বিবেচনা কোড যা এখনও ঠিকভাবে কাজ করতে পারে, পাইথন 2 এবং পাইথন 3 এ এটি করা যেতে পারে), তবে 2to3 স্ক্রিপ্টগুলি আপনার জন্য ম্যানুয়ালের মান অনুযায়ী এই মেরামতটি করতে পারে।
2to3 স্ক্রিপ্টটি ডিফল্টরূপে কমার চারপাশে স্পেস মেরামত করে না। এই বৈশিষ্ট্যটি চালু করতে, কমান্ড লাইন থেকে 2to3 কল করার সময় -f wscomma পরামিতিটি নির্দিষ্ট করুন।
নোট | আগে | পরে |
---|---|---|
a, b | a, b | |
{a:b} | {a: b} |
পাইথন কমিউনিটিতে অনেকগুলি প্রথা প্রতিষ্ঠিত হয়েছে। কিছু উদাহরণ রয়েছে যেমনঃ while 1: loop, যা পাইথন 1 থেকে শুরু হয়। ((পাইথন 2.3 পর্যন্ত সত্যিকারের অর্থপূর্ণ বুল টাইপ ছিল না, তাই বিকাশকারীরা পূর্বে 1 এবং 0 এর বিকল্প ব্যবহার করেছিল।) সমসাময়িক পাইথন প্রোগ্রামাররা তাদের মস্তিষ্ককে এই প্রথাগুলি ব্যবহার করার জন্য আধুনিক সংস্করণের জন্য অনুশীলন করা উচিত।
2to3 স্ক্রিপ্ট ডিফল্টরূপে এই প্রথাগুলির জন্য কোনও সমাধান করে না। এই বৈশিষ্ট্যটি চালু করতে, কমান্ড লাইন থেকে 2to3 কল করার সময় -f idioms পরামিতিটি নির্দিষ্ট করুন।
নোট | আগে | পরে |
---|---|---|
while 1: do_stuff (() |
while True: do_stuff (() |
|
টাইপ ((x) == টি | isinstance ((x, T) | |
টাইপ ((x) হল T | isinstance ((x, T) | |
a_list = list ((a_sequence) | a_list = sorted ((a_sequence) | |
a_list.sort (() | do_stuff ((a_list) | |
do_stuff ((a_list) |
পুনর্নির্দেশিতসিএসডিএন ব্লগ
কিভাবে পাইথন ২.এক্স কোডকে পাইথন ৩.এক্স কোডে রূপান্তর করা যায় সে সম্পর্কে। পাইথন 2.x কোডকে পাইথন 3.x কোডে রূপান্তর করার উপায়
এটি খুব বেশি বলার দরকার নেই, যদি এটি কেবলমাত্র কয়েকটি ফাংশনকে জড়িত করে, যেমন প্রিন্ট ইত্যাদি।
আপনি যদি আপনার নিজের কোড পরিবর্তন করতে চান তবে আপনি এটি করতে পারেন।
পাইথন ২.এক্স সংস্করণ, যেমন পাইথন ২.৭.২, যা আমি ইনস্টল করেছি, উইন্ডোজ ডাউনলোড এবং ইনস্টল করার পরে কিছু দরকারী সরঞ্জাম নিয়ে আসে।
其中一个叫做2to3.pyPython 2.x এর কোডকে Python 3.x এর কোডে রূপান্তরিত করার জন্য,
এটির অবস্থানঃ পাইথন ইনস্টলেশনের মূল ডিরেক্টরি \Python27\Tools\Scripts\2to3.py
【如何利用2to3.py, পাইথন 2.x এর কোডকে পাইথন 3.x এর কোডবিন্যাসে রূপান্তরিত করার বাস্তবায়ন উদাহরণস্বরূপ, আমার হাতে একটি পাইথন স্ক্রিপ্ট আছে যা পাইথন ২.এক্সঃ
D:\tmp\tmp_dev_root\python\python2_to_python3\34563264_data_from_site.py
এখন, আপনি এটিকে পাইথন 3.x কোডে রূপান্তর করতে চান।
আপনি উইন্ডোজের cmd খুলতে পারেন, যে স্ক্রিপ্টটি রূপান্তর করতে চান তার নিচে অবস্থান করতে পারেন, এবং তারপর এটি চালান
D:\tmp\WordPress\DevRoot\Python27\Tools\Scripts\2to3.py -w 34563264_data_from_site.py
আপনি যদি সফলভাবে রূপান্তরিত হন তবে এর ফলস্বরূপঃ
D:\tmp\tmp_dev_root\python\python2_to_python3>D:\tmp\WordPress\DevRoot\Python27\Tools\Scripts\2to3.py -w 34563264_data_from_site.py
RefactoringTool: Skipping implicit fixer: buffer
RefactoringTool: Skipping implicit fixer: idioms
RefactoringTool: Skipping implicit fixer: set_literal
RefactoringTool: Skipping implicit fixer: ws_comma
RefactoringTool: Refactored 34563264_data_from_site.py
--- 34563264_data_from_site.py (original)
+++ 34563264_data_from_site.py (refactored)
@@ -18,7 +18,7 @@
import time;
import codecs;
import logging;
-import urllib;
+import urllib.request, urllib.parse, urllib.error;
from datetime import datetime,timedelta;
from optparse import OptionParser;
from string import Template,replace;
@@ -90,7 +90,7 @@
foundPhone = eachItemSoup.find(attrs={"class":"phone"});
logging.debug("foundPhone=%s", foundPhone);
if(foundPhone):
- foundPhoneUni = unicode(foundPhone);
+ foundPhoneUni = str(foundPhone);
logging.debug("foundPhoneUni=%s", foundPhoneUni);
# case 1:
#<p class="phone"><strong>phone:</strong> 800.206.7886<br />
@@ -122,7 +122,7 @@
foundWeb = eachItemSoup.find(attrs={"class":"web"});
logging.debug("foundWeb=%s", foundWeb);
if(foundWeb):
- foundWebUni = unicode(foundWeb);
+ foundWebUni = str(foundWeb);
logging.debug("foundWebUni=%s", foundWebUni);
# <p class="web"><strong>e-mail:</strong> <a href="#">sales@cinesysinc.com</a><br />
@@ -151,7 +151,7 @@
foundAddr = eachItemSoup.find(attrs={"class":"addr"});
logging.debug("foundAddr=%s", foundAddr);
if(foundAddr):
- foundAddrUni = unicode(foundAddr);
+ foundAddrUni = str(foundAddr);
# <p class="addr">
# <strong>address:</strong> 740 SW 21st Ave, Suite #310<br />
RefactoringTool: Files that were modified:
RefactoringTool: 34563264_data_from_site.py
এই সময়ে, আপনি দেখতে পারেন যে 345636264_data_from_site.py, যা পাইথন 3.x সংস্করণে পরিণত হয়েছে।
ফ্যাংবিbotvs ব্যবহার করে পাইথন 2?
উদ্ভাবকগণ - ক্যোটিফিকেশন - ছোট্ট স্বপ্নবটভিএস এর রিটার্নিং সার্ভারটি পাইথন ২.৭ সংস্করণ ব্যবহার করে। বটভিএস প্ল্যাটফর্মের জন্য পাইথন ২ এবং পাইথন ৩ উভয়ই সমর্থিত।