ের কোডকে বন্ধনী দিয়ে ঘিরে রাখবে। ২, Python 2 এর exec স্টেটমেন্ট নামস্থান নির্দিষ্ট করতে পারে, কোডটি এই গ্লোবাল অবজেক্টের তৈরি ব্যক্তিগত স্পেসে কার্যকর হবে। Python 3 তেও এই বৈশিষ্ট্য রয়েছে; আপনাকে কেবল এই নামস্থানটি দ্বিতীয় প্যারামিটার হিসাবে exec () ফাংশনে পাস করতে হবে। ৩. আরো আশ্চর্যজনকভাবে, Python 2 এর exec স্টেটমেন্ট একটি স্থানীয় নামস্থান নির্ধারণ করতে পারে (যেমন একটি ফাংশনের মধ্যে ঘোষিত পরিবর্তনশীল) । Python 3 এ, exec () ফাংশনটিও এই ধরনের একটি ফাংশন রয়েছে।
পূর্ববর্তী exec স্টেটমেন্টের মত, Python 2 এর execfile স্টেটমেন্টটিও Python কোড চালানোর মত স্ট্রিং ব্যবহার করতে পারে। তবে exec স্ট্রিং ব্যবহার করে এবং execfile ফাইল ব্যবহার করে। Python 3 এ, execfile স্টেটমেন্টটি সরিয়ে ফেলা হয়েছে। আপনি যদি সত্যিই একটি ফাইলের Python কোডটি চালাতে চান তবে আপনি এটি আমদানি করতে চান না, আপনি ফাইলটি খুলতে, এর বিষয়বস্তু পড়তে এবং তারপরে compile () ফাংশনটি কল করতে পারেন।
Notes | Python 2 | Python 3 |
---|---|---|
① | execfile(‘a_filename’) | exec(compile(open(‘a_filename’).read(),‘a_filename’,‘exec’)) |
পাইথন ২-এ, একটি স্ট্রিং-এর মাধ্যমে একটি ইচ্ছাকৃত অবজেক্টকে প্রদর্শিত করার জন্য, একটি অবজেক্টকে একটি বিপরীত-উদ্ধৃতিতে আবৃত করা হয়, যেমন ((x
) এর বিশেষ ব্যাকরণ. পাইথন ৩ এ, এই ক্ষমতা এখনও বিদ্যমান, কিন্তু আপনি আর এই স্ট্রিংটি প্রাপ্ত করতে ব্যাককোড ব্যবহার করতে পারবেন না। আপনাকে একটি গ্লোবাল ফাংশন ব্যবহার করতে হবে repr ((() ।
Notes | Python 2 | Python 3 |
---|---|---|
① | `x` | repr(x) |
② | `‘PapayaWhip’ + `2`` | repr(‘PapayaWhip’+ repr(2)) |
১। মনে রাখবেন, x যেকোনো কিছু হতে পারে একটি ক্লাস, ফাংশন, মডিউল, মৌলিক ডেটা টাইপ, ইত্যাদি । repr () ফাংশন যেকোনো ধরনের প্যারামিটার ব্যবহার করতে পারে ২, পাইথন ২ তে, বিপরীত কয়েনগুলিকে প্যাচ করা যায়, যার ফলে এই বিভ্রান্তিকর (কিন্তু কার্যকর) অভিব্যক্তিটি তৈরি হয়। ২ থেকে ৩ যথেষ্ট স্মার্ট যে এই প্যাচড কলটিকে rep () ফাংশনে রূপান্তর করতে পারে।
পাইথন ২ থেকে পাইথন ৩-এ, ব্যতিক্রম ক্যাপচার করার ব্যাকরণ কিছুটা পরিবর্তিত হয়েছে।
Notes | Python 2 | Python 3 |
---|---|---|
① | 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 |
no change |
④ | try: import mymodule except: pass |
no change |
১। পাইথন ২ এর ব্যতিক্রম প্রকারের পরে কমা যোগ করার তুলনায়, পাইথন ৩ একটি নতুন কীওয়ার্ড ব্যবহার করে, as。 ২। as কীওয়ার্ডটি একই সময়ে একাধিক ধরণের অস্বাভাবিকতা ধরার ক্ষেত্রেও ব্যবহার করা যেতে পারে। ৩. আপনি যদি একটি ব্যতিক্রম ধরেন, কিন্তু ব্যতিক্রমের বস্তুর কাছে যেতে আগ্রহী না হন, তবে পাইথন ২ এবং পাইথন ৩ এর সিনট্যাক্স একই রকম। ৪. একইভাবে, আপনি যদি একটি বীমা পদ্ধতি ব্যবহার করেন (ফ্যালব্যাক) সব ব্যতিক্রম ধরতে, পাইথন ২ এবং পাইথন ৩ এর বানান একই রকম ৷ ৫। মডিউল আমদানি করার সময় (বা অন্যান্য বেশিরভাগ ক্ষেত্রে) আপনি অবশ্যই এই পদ্ধতিটি ব্যবহার করবেন না (উপরে উল্লিখিত ফলব্যাকটি উল্লেখ করুন) । অন্যথায়, প্রোগ্রামটি কীবোর্ড ইন্টারপুট (যদি ব্যবহারকারী Ctrl-C চাপলে প্রোগ্রামটি বিরতি দেয়) এর মতো ব্যতিক্রমগুলি ধরতে পারে, যার ফলে ডিবাগিং আরও কঠিন হয়ে যায়।
পাইথন ৩-এ, কাস্টম ব্যতিক্রমের ব্যাকরণে সামান্য পরিবর্তন করা হয়েছে।
Notes | Python 2 | Python 3 |
---|---|---|
① | raise MyException | unchanged |
② | raise MyException,‘error message’ | raise MyException(‘error message’) |
③ | raise MyException,‘error message’, a_traceback | raise MyException(‘errormessage’).with_traceback(a_traceback) |
④ | raise ‘error message’ | unsupported |
১। ব্যতিক্রমটি ব্যবহারকারীর দ্বারা কাস্টমাইজ করা ত্রুটি বার্তা ছাড়াই সরানো হয়েছে, এই সরলীকৃত ফর্মটিতে, ব্যাকরণটি পরিবর্তন হয়নি। ২, যখন আপনি একটি ব্যতিক্রমকে ব্যবহারকারীর কাস্টমাইজড ত্রুটি বার্তা দিয়ে ফেলে দিতে চান, তখন পরিবর্তনটি স্পষ্ট হয়। পাইথন ২ ব্যতিক্রম এবং ত্রুটি বার্তা আলাদা করতে একটি কমা ব্যবহার করে; পাইথন ৩ ত্রুটি বার্তাটিকে ব্যতিক্রম হিসাবে প্যারামিটার হিসাবে পাস করে। ৩। পাইথন ২ একটি জটিল ব্যতিক্রমকে স্ট্যাক ট্রেস করার জন্য একটি জটিল ব্যাকরণ সমর্থন করে। পাইথন ৩ তে আপনি এটি করতে পারেন, কিন্তু ব্যাকরণটি সম্পূর্ণ ভিন্ন। ৪. পাইথন ২ এ, আপনি একটি ব্যতিক্রম ছাড়া একটি ব্যতিক্রম বর্ষণ করতে পারেন, কেবলমাত্র একটি ব্যতিক্রম বার্তা। পাইথন ৩ এ, এই ফর্মটি আর সমর্থিত নয়। ২-টু-৩ আপনাকে সতর্ক করবে যে এটি স্বয়ংক্রিয়ভাবে এই সিনট্যাক্সটি ঠিক করতে পারে না।
পাইথন ২-এ, জেনারেটরের একটি থ্রো () পদ্ধতি রয়েছে। a_generator.throw () কলটি জেনারেটরটি স্থগিত হওয়ার সময় একটি ব্যতিক্রম ফেলে দেয় এবং তারপরে জেনারেটর ফাংশন দ্বারা নেওয়া পরবর্তী মানটি ফেরত দেয়। পাইথন ৩-এ, এই বৈশিষ্ট্যটি এখনও উপলব্ধ, তবে ব্যাকরণগতভাবে কিছুটা আলাদা।
Notes | Python 2 | Python 3 |
---|---|---|
① | a_generator.throw(MyException) | no change |
② | a_generator.throw(MyException,‘error message’) | a_generator.throw(MyException(‘error message’)) |
③ | a_generator.throw(‘error message’) | unsupported |
১. সহজ ভাষায়, জেনারেটরটি ব্যতিক্রমগুলি ফেলে দেয় যা ব্যবহারকারীর দ্বারা কাস্টমাইজ করা ত্রুটি বার্তা বহন করে না। এই ক্ষেত্রে, পাইথন ২ থেকে পাইথন ৩ এর ব্যাকরণগতভাবে কোনও পরিবর্তন নেই। ২। যদি জেনারেটর একটি ব্যতিক্রম ফেলে দেয় যা ব্যবহারকারীর নিজস্ব ত্রুটি বার্তা নিয়ে আসে, তাহলে আপনাকে এই ত্রুটি বার্তার স্ট্রিংটি () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () ৩, পাইথন ২ শুধুমাত্র ব্যতিক্রমী তথ্যের ব্যতিক্রমগুলিকে সমর্থন করে। পাইথন ৩ এই ব্যতিক্রমী ব্যতিক্রমগুলিকে সমর্থন করে না এবং ২-টু-৩ একটি সতর্কতা বার্তা প্রদর্শন করে যা আপনাকে এই কোডটি ম্যানুয়ালি ঠিক করতে বলে।
পাইথন ২ এ, একটি নির্দিষ্ট পরিসরের মধ্যে সংখ্যা পেতে দুটি উপায় রয়েছেঃ range (), যা একটি তালিকা ফেরত দেয়, এবং range (), যা একটি iterator ফেরত দেয়। পাইথন ৩ এ, range (), যা একটি iterator ফেরত দেয়, xrange (), আর নেই।
Notes | Python 2 | Python 3 |
---|---|---|
① | xrange(10) | range(10) |
② | a_list = range(10) | a_list = list(range(10)) |
③ | [i for iin xrange(10)] | [i for iin range(10)] |
④ | for i in range(10): | no change |
⑤ | sum(range(10)) | no change |
১। সবচেয়ে সহজ ক্ষেত্রে, ২-টু-৩ কেবল xrange ((() কে range ((() তে রূপান্তর করে। ২, আপনার Python 2 কোড যদি range () ব্যবহার করে, তাহলে 2to3 জানে না যে আপনার একটি তালিকা প্রয়োজন, অথবা একটি ইথারও কাজ করে কিনা। সাবধানতার জন্য, 2to3 সম্ভবত একটি ত্রুটি রিপোর্ট করবে, এবং তারপর list () ব্যবহার করে range () এর রিটার্ন মানকে বাধ্যতামূলকভাবে তালিকা টাইপ রূপান্তর করবে। ৩. যদি xrange () ফাংশনটি একটি তালিকার মধ্যে থাকে, তবে এটিকে একটি তালিকায় রূপান্তর করার দরকার নেই, কারণ তালিকা পার্সারটি একটি ইন্ডেক্সারের জন্যও কার্যকর। ৪। একইভাবে, for loop একটি iterator এর উপর কাজ করে, তাই এখানেও কিছু পরিবর্তন হয় না। ৫, sum ((() ফাংশনটি ইনডেক্টর হিসাবে কাজ করে, তাই 2to3 এখানে কোন পরিবর্তন করেনি। এটি min (((), max (((), sum (((), list (((), tuple (((), set (((), sorted (((), any (((), all ((() এর জন্যও প্রযোজ্য, ঠিক যেমন একটি অভিধান শ্রেণীর পদ্ধতি যা মানগুলিকে ভিউ (((view) হিসাবে ফেরত দেয় এবং তালিকা নয়।
পাইথন ২-এ দুটি গ্লোবাল ফাংশন রয়েছে যা কমান্ড লাইনে ব্যবহারকারীর ইনপুটের জন্য অনুরোধ করে। প্রথমটি বলা হয় ইনপুট (), যা ব্যবহারকারীর জন্য একটি পাইথন এক্সপ্রেশন টাইপ করার জন্য অপেক্ষা করে (), এবং তারপরে ফলাফলটি ফেরত দেয়। দ্বিতীয়টি বলা হয় কাঁচা_ইনপুট (), যা ব্যবহারকারী কী প্রবেশ করে তা ফেরত দেয়। এটি নতুনদের জন্য খুব বিভ্রান্তিকর, এবং এটি পাইথন ভাষার একটি চিংড়ি চিংড়ি হিসাবে ব্যাপকভাবে দেখা হয়।
Notes | Python 2 | Python 3 |
---|---|---|
① | raw_input() | input() |
② | raw_input(‘prompt’) | input(‘prompt’) |
③ | input() | eval(input()) |
১। সরল রূপ, raw_input ((() কে ইনপুট ((() তে প্রতিস্থাপন করা হয়েছে। ২, পাইথন ২ তে, raw_input (()) ফাংশনটি একটি পয়েন্টারকে একটি পয়েন্টার হিসাবে নির্দিষ্ট করতে পারে। পাইথন ৩ এ এই বৈশিষ্ট্যটি সংরক্ষিত রয়েছে। ৩. আপনি যদি সত্যিই ব্যবহারকারীকে একটি পাইথন এক্সপ্রেশন টাইপ করার জন্য অনুরোধ করতে চান, তাহলে আপনি ইনপুট () ফাংশনটি কল করে এবং ফেরত মানটি ইভাল () () তে পাঠিয়ে ফলাফলটি গণনা করতে পারেন।
পাইথন ২ এ, ফাংশনটির কোডটি ফাংশনটির নিজস্ব বিশেষ বৈশিষ্ট্যগুলি অ্যাক্সেস করতে পারে। পাইথন ৩ এ, সামঞ্জস্যের জন্য, এই বিশেষ বৈশিষ্ট্যগুলির নামকরণ করা হয়েছে।
Notes | Python 2 | Python 3 |
---|---|---|
① | a_function.func_name | a_function._name_ |
② | a_function.func_doc | a_function._doc_ |
③ | a_function.func_defaults | a_function._defaults_ |
④ | a_function.func_dict | a_function._dict_ |
⑤ | a_function.func_closure | a_function._closure_ |
⑥ | a_function.func_globals | a_function._globals_ |
⑦ | a_function.func_code | a_function._code_ |
1、name প্রোপার্টি ((মূল function_name) ফাংশনের নাম ধারণ করে। 2、doc প্রোপার্টিটি ((originalfuncdoc) আপনার ফাংশন সোর্স কোডে সংজ্ঞায়িত ডকুমেন্ট স্ট্রিং ((docstring) ধারণ করে 3、defaultsproperty ((মূল function_defaults) হল একটি ট্যাগলাইট যা প্যারামিটারের ডিফল্ট মান সংরক্ষণ করে। 4、dictattribute ((মূল function_dict) একটি নামস্থান যা কোনো ফাংশনের নামের সাথে যুক্ত। 5、closureproperty ([[:en:originalfunc_closure]]) হলো একটি cell অবজেক্টের একটি ট্যাগোমেট যা একটি ফাংশনকে [[:en:free variable]] এর সাথে আবদ্ধ করে। 6、globalsproperty ((মূল function_globals) হল একটি মডিউল গ্লোবাল নামস্থানের একটি রেফারেন্স, ফাংশন নিজেই এই নামস্থানে সংজ্ঞায়িত করা হয়েছে। 7、codeproperty ((originalfunc_code) একটি কোড অবজেক্ট, যা কম্পাইল করা ফাংশনলিটিকে নির্দেশ করে।
পাইথন ২-এ, ফাইল অবজেক্টের একটি xreadlines () পদ্ধতি রয়েছে যা একটি ইরেক্টর ফেরত দেয় যা ফাইলের একটি লাইন একবার পড়ে। এটি বিশেষত ফর লুপের ক্ষেত্রে কার্যকর। আসলে, পাইথন ২-এর পরবর্তী সংস্করণগুলি ফাইল অবজেক্টের মধ্যে এই বৈশিষ্ট্যটি যুক্ত করেছে।
পাইথন ৩ এ, xreadlines ((() পদ্ধতি আর ব্যবহার করা যায় না। 2to3 সহজ পরিস্থিতি সমাধান করতে পারে, তবে কিছু প্রান্তের ক্ষেত্রে ম্যানুয়াল হস্তক্ষেপ প্রয়োজন।
Notes | Python 2 | Python 3 |
---|---|---|
① | for line in a_file.xreadlines(): | for line in a_file: |
② | for line in a_file.xreadlines(5): | no change (broken) |
১, যদি আপনি পূর্বে xreadlines () নামে কোন প্যারামিটার না দিয়ে থাকেন, 2to3 এটিকে ফাইল অবজেক্ট হিসেবে রূপান্তর করে। পাইথন ৩ এ, এই রূপান্তরের পরে কোডটি একই কাজ করতে পারেঃ ফাইলের একটি লাইন একবার পড়ে, তারপর for loop এর loop body চালায়। ২, আপনি যদি পূর্বে একটি আর্গুমেন্ট ব্যবহার করে থাকেন ((প্রতিবার পড়া লাইনের সংখ্যা) xreadlines () কল করার জন্য, 2to3 আপনার জন্য Python 2 থেকে Python 3 তে রূপান্তর করতে পারে না, আপনার কোডটি এইভাবে ব্যর্থ হবেঃ AttributeError: ‘_io.TextIOWrapper’ object has no attribute ‘xreadlines’。 আপনি নিজে xreadlines-কে readlines-এ পরিবর্তন করতে পারেন যাতে আপনার কোড Python 3-এ কাজ করতে পারে。 readline-এর পদ্ধতি Python 3-এ ইরেক্টর রিটার্ন করে, তাই এটি Python 2-এর xreadlines-এর তুলনায় অনেক বেশি কার্যকরী।
পাইথন ২-এ আপনি একটি অ্যানোনিম ল্যাম্বদা ফাংশন (anonymous lambda function) সংজ্ঞায়িত করতে পারেন, যা একটি প্যারামিটার হিসাবে একটি মট্রোর উপাদান সংখ্যা নির্দিষ্ট করে ফাংশনটিকে কার্যত একাধিক প্যারামিটার গ্রহণ করতে সক্ষম করে। প্রকৃতপক্ষে, পাইথন ২ এর ব্যাখ্যাকারী এই মট্রোটিকে নামযুক্ত আর্গুমেন্টগুলিতে আনপ্যাক করে, এবং তারপরে আপনি ল্যাম্বদা ফাংশনে তাদের নাম দিয়ে উল্লেখ করতে পারেন। পাইথন ৩-এ আপনি এখনও একটি মট্রোটি ল্যাম্বদা ফাংশনের প্যারামিটার হিসাবে পাস করতে পারেন, তবে পাইথন ব্যাখ্যাকারী এটিকে নামযুক্ত প্যারামিটারে বিশ্লেষণ করবে না। আপনাকে পজিশনাল ইনডেক্স (positional index) দিয়ে প্রতিটি প্যারামিটার উল্লেখ করতে হবে।
Notes | Python 2 | Python 3 |
---|---|---|
① | lambda (x,): x+ f(x) | lambda x1: x1[0]+f(x1[0]) |
② | lambda (x, y): x+f(y) | lambda x_y: x_y[0]+f(x_y[1]) |
③ | lambda (x,(y,z)): x+ y+ z | lambda x_y_z: x_y_z[0]+x_y_z[1][0]+ x_y_z[1][1] |
④ | lambda x, y, z: x+y + z | unchanged |
1, আপনি যদি একটি lambda ফাংশন সংজ্ঞায়িত করে থাকেন, যা একটি উপাদান ধারণকারী একটি অ্যাট্রোমেটকে একটি প্যারামিটার হিসাবে ব্যবহার করে, পাইথন 3 এ, এটি x1 ধারণকারী একটিতে রূপান্তরিত হবে[0]-এ উদ্ধৃত lambda ফাংশনটি হল ২-টু-৩ স্ক্রিপ্টের অটো-জেনারেটেড ২-টু-৩ স্ক্রিপ্ট, যা মূল মটরুমে নামকরণ প্যারামিটারের উপর ভিত্তি করে তৈরি করা হয়েছে। ২। lambda ফাংশনটি x_y তে রূপান্তরিত করা হয়েছে, যার দুটি অবস্থানের প্যারামিটার রয়েছে, x_y[0] এবং x_y[1]。 ৩, ২-টু-৩ স্ক্রিপ্ট এমনকি প্যানেট নামকরণ প্যারামিটার ব্যবহার করে প্যানেট নামকরণ প্যারামিটার হিসাবে lambda ফাংশন পরিচালনা করতে পারে। উত্পন্ন ফলাফল কোডটি পড়তে কিছুটা কঠিন, তবে এটি পাইথন 3 এর অধীনে একই কাজ করে যা পাইথন 2 এর অধীনে মূল কোডটি করে। ৪. আপনি lambda ফাংশন সংজ্ঞায়িত করতে পারেন যা একাধিক প্যারামিটার ব্যবহার করে। যদি প্যারামিটারের চারপাশে কোন বন্ধনী না থাকে তবে পাইথন ২ এটিকে একটি lambda ফাংশন হিসাবে বিবেচনা করবে যা একাধিক প্যারামিটার ধারণ করে; এই lambda ফাংশনটিতে আপনি নামের মাধ্যমে এই প্যারামিটারগুলিকে উল্লেখ করেন, যেমনটি অন্যান্য ধরণের ফাংশনগুলিতে করা হয়। এই ব্যাকরণটি পাইথন 3-এও কার্যকর রয়েছে।
পাইথন ২ এ, ক্লাসের পদ্ধতিগুলি তাদের ক্লাস অবজেক্ট (class object) এবং পদ্ধতি অবজেক্ট (method object) নিজেই অ্যাক্সেস করতে পারে। im_self হল ক্লাসের ইনস্ট্যান্স অবজেক্ট; im_func হল ফাংশন অবজেক্ট এবং im_class হল ক্লাস নিজেই। পাইথন ৩ এ, এই বৈশিষ্ট্যগুলি নামকরণের কনভেনশন অনুসারে নামকরণ করা হয়েছে।
Notes | Python 2 | Python 3 |
---|---|---|
① | aClassInstance.aClassMethod.im_func | aClassInstance.aClassMethod._func_ |
② | aClassInstance.aClassMethod.im_self | aClassInstance.aClassMethod._self_ |
③ | aClassInstance.aClassMethod.im_class | aClassInstance.aClassMethod._self_._class_ |
পাইথন ২ এ, আপনি আপনার নিজস্ব ক্লাস তৈরি করতে পারেন এবং তাদের বুল-উপরের (boolean context) ব্যবহারের জন্য ব্যবহার করতে পারেন। উদাহরণস্বরূপ, আপনি এই ক্লাসকে ইনস্ট্যান্ট করতে পারেন এবং এই ইনস্ট্যান্ট অবজেক্টটি একটি if বাক্যে ব্যবহার করতে পারেন। এই উদ্দেশ্যে, আপনি একটি বিশেষnonzero() পদ্ধতি, যার রিটার্ন মান হল True অথবা False, যখন ইন্সট্যান্স অবজেক্টটি বুলের উপর প্রসঙ্গের মধ্যে থাকে তখন এই পদ্ধতিটি ডাকা হয়। পাইথন ৩ এ, আপনি এখনও একই কাজ করতে পারেন, কিন্তু এই বিশেষ পদ্ধতিটির নাম পরিবর্তন করা হয়েছেbool()。
Notes | Python 2 | Python 3 |
---|
|①|class A:
def nonzero(self):
pass|class A:
def bool(self):
pass
|②|class A:
def nonzero(self, x, y):
pass|no change|
১। যখন বুলের উপর একটি ক্লাস অবজেক্ট ব্যবহার করা হয়, তখন পাইথন ৩ কল করেbool(), কিন্তু নাnonzero()。
2। যাইহোক, যদি আপনি একটি সংজ্ঞায়িত আছে যে দুটি প্যারামিটার ব্যবহার করেnonzero() পদ্ধতি, 2to3 স্ক্রিপ্ট অনুমান করবে যে আপনি যে পদ্ধতিটি সংজ্ঞায়িত করেছেন তার অন্য কোন ব্যবহার আছে, তাই কোডটি পরিবর্তন করা হবে না।
পাইথন ২ এবং পাইথন ৩ এর মধ্যে, অক্ষর সংখ্যা সংজ্ঞায়িত করার জন্য ব্যাকরণ সামান্য পরিবর্তিত হয়েছে।
Notes | Python 2 | Python 3 |
---|---|---|
① | x = 0755 | x = 0o755 |
লম্বা এবং পূর্ণরূপে একত্রিত হওয়ার কারণে, sys.maxint ধ্রুবকটি আর সঠিক নয়। কিন্তু যেহেতু এই মানটি নির্দিষ্ট প্ল্যাটফর্মের ক্ষমতা সনাক্তকরণের জন্য দরকারী, তাই এটি পাইথন 3 দ্বারা সংরক্ষিত এবং sys.maxsize নামকরণ করা হয়।
Notes | Python 2 | Python 3 |
---|---|---|
① | from sys importmaxint | from sys importmaxsize |
② | a_function(sys.maxint) | a_function(sys.maxsize) |
১, maxint থেকে maxsize। ২. সব sys.maxint sys.maxsize হয়ে গেছে
পাইথন ২ এ, আপনি একটি বস্তুকে কলযোগ্য কিনা তা পরীক্ষা করতে বিশ্বব্যাপী ফাংশন callable ((() ব্যবহার করতে পারেন। পাইথন ৩ এ, এই বিশ্বব্যাপী ফাংশনটি বাতিল করা হয়েছে। একটি বস্তু কলযোগ্য কিনা তা পরীক্ষা করার জন্য, আপনি বিশেষ পদ্ধতি পরীক্ষা করতে পারেনcall() এর অস্তিত্ব
Notes | Python 2 | Python 3 |
---|---|---|
① | callable(anything) | hasattr(anything,’_call_’) |
পাইথন ২-এ, গ্লোবাল ফাংশন zip ((() যে কোনও একাধিক ক্রমকে প্যারামিটার হিসাবে ব্যবহার করতে পারে, এটি একটি মৌলিক তালিকা প্রদান করে। প্রথম মৌলিকটি প্রতিটি ক্রমের প্রথম উপাদানকে ধারণ করে; দ্বিতীয় মৌলিকটি প্রতিটি ক্রমের দ্বিতীয় উপাদানকে ধারণ করে; ধারাবাহিকভাবে এগিয়ে যায়। পাইথন ৩-এ, zip ((() একটি সূচককে ফেরত দেয়, তালিকা নয়।
Notes | Python 2 | Python 3 |
---|---|---|
① | zip(a, b, c) | list(zip(a, b, c)) |
② | d.join(zip(a, b, c)) | no change |
সবচেয়ে সহজ পদ্ধতিতে, আপনি list () ফাংশনকে zip () ফাংশনের পূর্ববর্তী ফাংশনটি পুনরুদ্ধার করতে পারেন। list () ফাংশনটি zip () ফাংশনটির পূর্ববর্তী ফাংশনটি পুনরুদ্ধার করতে পারে। list () ফাংশনটি এই zip () ফাংশনটি পুনরুদ্ধার করে এবং তারপরে ফলাফলের তালিকাটি ফেরত দেয়। যেহেতু আপনি ইতিমধ্যে একটি ক্রমের সমস্ত উপাদান অতিক্রম করেছেন (যেমন এখানে join () পদ্ধতির কল), zip () ফেরত এডাপ্টারটি সঠিকভাবে কাজ করতে পারে। 2to3 স্ক্রিপ্টগুলি এই পরিস্থিতিগুলি সনাক্ত করবে এবং আপনার কোডে কোনও পরিবর্তন করবে না।
পাইথন ২ এ, স্ট্যান্ডার্ডএরের হল স্টপআইটারেশন, জেনারেটরএক্সিট, কীবোর্ড ইন্টারপুট, সিস্টেমএক্সিট বাদে অন্যান্য সমস্ত বিল্ট-ইন ব্যতিক্রমের বেসক্লাস। পাইথন ৩ এ, স্ট্যান্ডার্ডএরের বাতিল করা হয়েছে; ব্যতিক্রম ব্যবহার করে প্রতিস্থাপন করা হয়েছে।
Notes | Python 2 | Python 3 |
---|---|---|
① | x =StandardError() | x =Exception() |
② | x =StandardError(a, b, c) | x =Exception(a, b, c) |
types মডিউলটিতে বিভিন্ন ধ্রুবক রয়েছে যা আপনাকে কোনও বস্তুর ধরণ নির্ধারণে সহায়তা করে। পাইথন ২ এ, এটি সমস্ত মৌলিক ডেটা প্রকারের প্রতিনিধিত্বকারী ধ্রুবক ধারণ করে, যেমন dict এবং int। পাইথন ৩ এ, এই ধ্রুবকগুলি ইতিমধ্যে বাতিল করা হয়েছে। কেবলমাত্র মৌলিক ধরণের নাম ব্যবহার করে এটি প্রতিস্থাপন করা প্রয়োজন।
Notes | Python 2 | Python 3 |
---|---|---|
types.UnicodeType | str | |
types.StringType | bytes | |
types.DictType | dict | |
types.IntType | int | |
types.LongType | int | |
types.ListType | list | |
types.NoneType | type(None) | |
types.BooleanType | bool | |
types.BufferType | memoryview | |
types.ClassType | type | |
types.ComplexType | complex | |
types.EllipsisType | type(Ellipsis) | |
types.FloatType | float | |
types.ObjectType | object | |
types.NotImplementedType | type(NotImplemented) | |
types.SliceType | slice | |
types.TupleType | tuple | |
types.TypeType | type | |
types.XRangeType | range |
types.StringType বাইট হিসেবে ম্যাপ করা হয়েছে, str নয়, কারণ Python 2 এর strings আসলে a sequence of bytes যেগুলো কোন অক্ষর দিয়ে কোড করা হয়েছে।
isinstance() ফাংশন একটি বস্তুর একটি নির্দিষ্ট শ্রেণী (class) বা প্রকার (type) এর একটি উদাহরণ কিনা তা পরীক্ষা করে। পাইথন ২ এ, আপনি প্রকার (types) থেকে তৈরি একটি টাইটালকে isinstance () ফাংশনটিতে প্রেরণ করতে পারেন এবং যদি বস্তুটি টাইটালের যেকোন প্রকারের হয় তবে ফাংশনটি True ফেরত দেয়। পাইথন ৩ এ, আপনি এখনও এটি করতে পারেন, তবে এটি একটি প্রকারের ব্যবহারের জন্য সুপারিশ করা হয় না যা প্যারামিটার হিসাবে দুইবার প্রেরণ করা হয়।
Notes | Python 2 | Python 3 |
---|---|---|
isinstance(x,(int,float,int)) | isinstance(x,(int,float)) |
পাইথন ২ এ দুটি স্ট্রিং টাইপ রয়েছেঃ ইউনিকোড কোডেড স্ট্রিং এবং নন-ইউনিকোড কোডেড স্ট্রিং। তবে আসলে আরও একটি টাইপ রয়েছে, বেসস্ট্রিং। এটি একটি বিমূর্ত ডেটা টাইপ, str এবং ইউনিকোড টাইপের একটি সুপারক্লাস। এটি সরাসরি কল করা বা ইনস্ট্যান্স করা যায় না, তবে আপনি এটিকে ইনস্ট্যান্সের প্যারামিটার হিসাবে ব্যবহার করতে পারেন যাতে কোনও অবজেক্ট ইউনিকোড স্ট্রিং বা নন-ইউনিকোড স্ট্রিং কিনা তা পরীক্ষা করতে পারে। পাইথন ৩ এ কেবলমাত্র একটি স্ট্রিং টাইপ রয়েছে, তাই বেসস্ট্রিংয়ের আর প্রয়োজন নেই।
Notes | Python 2 | Python 3 |
---|---|---|
isinstance(x, basestring) | isinstance(x, str) |
পাইথন ২.৩ itertools মডিউল চালু করেছে, যা গ্লোবাল ফাংশন zip ((), map ((), filter (() এর ভেরিয়েন্ট (() সংজ্ঞায়িত করে, এই ভেরিয়েন্টগুলির রিটার্ন টাইপটি একটি তালিকা নয়, বরং একটি ইটোরিয়াল। পাইথন ৩ এ, এই গ্লোবাল ফাংশনগুলির রিটার্ন টাইপটি মূলত একটি ইটোরিয়াল, তাই এই itertools এর ভেরিয়েন্ট ফাংশনগুলি বাতিল করা হয়েছে।
Notes | Python 2 | Python 3 |
---|---|---|
① | itertools.izip(a, b) | zip(a, b) |
② | itertools.imap(a, b) | map(a, b) |
③ | itertools.ifilter(a, b) | filter(a, b) |
④ | from itertools import imap, izip, foo | from itertools import foo |
1। জিওগ্রাফিক zip () ফাংশন ব্যবহার করুন, itertools.izip () এর পরিবর্তে। ২। map () ব্যবহার করুন itertools.imap () এর পরিবর্তে। ৩, itertools.ifilter (ইটারটুলস.আইফিল্টার) ফিল্টার (ইটারটুলস.আইফিল্টার) হয়ে গেছে। ৪। itertools মডিউলটি পাইথন ৩ এ রয়েছে, এটি কেবলমাত্র সেই ফাংশনগুলিকে আর অন্তর্ভুক্ত করে না যা গ্লোবাল নেমস্পেসে স্থানান্তরিত হয়েছে। ২-টু-৩ স্ক্রিপ্টগুলি যথেষ্ট বুদ্ধিমানভাবে অপসারণ করতে পারে যেগুলি আর দরকারী নয় এবং অন্যান্য আমদানি বাক্যাংশের অখণ্ডতা বজায় রাখে।
ব্যতিক্রমগুলি মোকাবেলার জন্য, sys মডিউলটিতে তিনটি ভেরিয়েবল রয়েছে যা আপনি অ্যাক্সেস করতে পারেনঃ sys.exc_type, sys.exc_value, sys.exc_traceback। (আসলে এগুলি পাইথন 1 এর সময় থেকেই ছিল) পাইথন 1.5 থেকে, নতুন sys.exc_info প্রকাশের কারণে, এই তিনটি ভেরিয়েবল ব্যবহার করা আর সুপারিশ করা হয় না, এটি উপরের তিনটি উপাদান সহ একটি মেটাসেট। পাইথন 3 এ, এই তিনটি ভেরিয়েবল অবশেষে আর বিদ্যমান নেই; এর অর্থ হল আপনাকে sys.exc_info ব্যবহার করতে হবে।
Notes | Python 2 | Python 3 |
---|---|---|
sys.exc_type | sys.exc_info()[0] | |
sys.exc_value | sys.exc_info()[1] | |
sys.exc_traceback | sys.exc_info()[2] |
পাইথন ২ এ, যদি আপনাকে একটি পারফরম্যান্সের তালিকা লিখতে হয়, যা একটি পারফরম্যান্সের মাধ্যমে যায়, তবে আপনাকে প্যারামিটার মানগুলির চারপাশে বন্ধনী যুক্ত করতে হবে না। পাইথন ৩ এ, এই বন্ধনীগুলি আবশ্যক।
Notes | Python 2 | Python 3 |
---|---|---|
[i for iin 1,2] | [i for iin(1,2)] |
পাইথন ২-এ os.getcwd (() নামে একটি ফাংশন রয়েছে যা বর্তমান ওয়ার্কিং ডিরেক্টরিটিকে একটি অ-ইউনিকোড স্ট্রিং হিসাবে ফেরত দেয়। যেহেতু আধুনিক ফাইল সিস্টেমগুলি ডাইরেক্টরির নামগুলিকে হিট কোড করতে পারে, তাই পাইথন ২.৩ os.getcwdu (() ফাংশনটি চালু করেছে। os.getcwdu (() ফাংশনটি বর্তমান ওয়ার্কিং ডিরেক্টরির ইউনিকোড কোডেড স্ট্রিংগুলি ফেরত দেয়। পাইথন ৩-এ, কেবলমাত্র একটি স্ট্রিং টাইপ (ইউনিকোড টাইপের) রয়েছে, তাই আপনার কেবলমাত্র os.getcwd (() দরকার।
Notes | Python 2 | Python 3 |
---|---|---|
os.getcwdu() | os.getcwd() |
পাইথন ২ এ, আপনি মেটা ক্লাসের একটি বিবৃতিতে মেটা ক্লাসের একটি প্যারামিটার সংজ্ঞায়িত করতে পারেন, অথবা একটি বিশেষ ক্লাস স্তর (ক্লাস-লেভেল) সংজ্ঞায়িত করতে পারেন।metaclass প্রোপার্টি, একটি ট্যাগ ক্লাস তৈরি করার জন্য।__metaclass_এই বৈশিষ্ট্যটি বাতিল করা হয়েছে।
Notes | Python 2 | Python 3 |
---|---|---|
① | class C(metaclass=PapayaMeta): pass |
unchanged |
② | class Whip: _metaclass_ = PapayaMeta |
class Whip(metaclass=PapayaMeta): pass |
③ | class C(Whipper, Beater): _metaclass_ = PapayaMeta |
class C(Whipper,Beater,metaclass=PapayaMeta): pass |
১। ক্লাস ঘোষণার সময় মেটাক্লাস প্যারামিটার ঘোষনা করা হয়, যা পাইথন ২ এবং পাইথন ৩-এ একই কাজ করে। ২, ক্লাসের সংজ্ঞায় metaclass বৈশিষ্ট্যটি ঘোষণা করুন যা Python 2 এ কার্যকর কিন্তু Python 3 এ আর কার্যকর নয়। 3, 2to3 একটি কার্যকর ক্লাস বিবৃতি তৈরি করতে সক্ষম, এমনকি যদি ক্লাসটি একাধিক পিতামাতার ক্লাস থেকে উত্তরাধিকার লাভ করে।
নীচে তালিকাভুক্ত ফিক্সগুলি প্রকৃত ফিক্স নয়। অর্থাৎ, এগুলি কেবল কোডের স্টাইলের বিষয়, কোডের মূল বিষয় নয়। তবে পাইথনের বিকাশকারীরা কোডের স্টাইলটি যথাসম্ভব সামঞ্জস্যপূর্ণ করার ক্ষেত্রে অত্যন্ত আগ্রহী। এটি করার জন্য, পাইথন কোড স্টাইলের জন্য একটি সরকারী নির্দেশিকা রয়েছে।
পাইথন ২-এ, একটি আক্ষরিক মান সেট সংজ্ঞায়িত করার একমাত্র উপায় হল set{a_sequence} কল করা। পাইথন ৩-এ এটি এখনও কার্যকর, তবে নতুন চিহ্নিতকরণ চিহ্ন ব্যবহার করেঃ আক্ষরিক নোটেশনঃ বড় বন্ধনী ({}) একটি পরিষ্কার পদ্ধতি। এই পদ্ধতিটি ফাঁকা সেট ছাড়াও কার্যকর, কারণ অভিধানগুলিও বড় বন্ধনী দিয়ে চিহ্নিত করা হয়, তাই {} একটি ফাঁকা অভিধানকে বোঝায়, একটি ফাঁকা সেট নয়।
2to3 স্ক্রিপ্ট ডিফল্টরূপে set () আক্ষরিক মান সংশোধন করে না। এই বৈশিষ্ট্যটি চালু করতে, কমান্ড লাইনটি 2to3 কল করার সময় -f set_literal প্যারামিটারটি নির্দিষ্ট করুন।
Notes | Before | After |
---|---|---|
set([1,2,3]) | {1,2,3} | |
set((1,2,3)) | {1,2,3} | |
set([i for iin a_sequence]) | {i for iin a_sequence} |
C-তে বাস্তবায়িত Python অবজেক্টগুলি একটি buffer interface প্রেরণ করে যা অন্য Python কোডকে সরাসরি একটি মেমরি পড়তে এবং লিখতে দেয়। (এটি শক্তিশালী শোনাচ্ছে, তবে এটি একইভাবে ভয়ঙ্কর) ।
2to3 স্ক্রিপ্টটি ডিফল্টরূপে buffer () ফাংশনটি মেরামত করে না। এই বৈশিষ্ট্যটি চালু করতে, কমান্ড লাইনে 2to3 কল করার সময় -f buffer প্যারামিটারটি নির্দিষ্ট করুন।
Notes | Before | After |
---|---|---|
x =buffer(y) | x =memoryview(y) |
যদিও পাইথন ইনডেনটিং এবং আউটডেনটিংয়ের জন্য ফাঁকগুলির জন্য কঠোর, তবে অন্যান্য ক্ষেত্রে ফাঁক ব্যবহারের জন্য পাইথন খুব অবাধ। তালিকা, মটরস,