Type/to search
8
Follow
1370
Followers
পাইথন 2.x.x এবং পাইথন 3.x.x এর মধ্যে পরিবর্তন এবং পাইথন 2.x.x কে পাইথন 3.x.x এ কীভাবে রূপান্তর করবেন
Tutorials
Created 2016-10-09 12:36:49  Updated 2017-10-11 10:18:05
 2
 5674

python2 এবং python3 এর মধ্যে পার্থক্য

প্রায় সকল পাইথন ২ প্রোগ্রামের কিছু পরিবর্তন প্রয়োজন যাতে তারা পাইথন ৩ এর পরিবেশে সঠিকভাবে কাজ করতে পারে। এই রূপান্তর প্রক্রিয়াটি সহজ করার জন্য, পাইথন ৩ একটি 2to3 ইউটিলিটি স্ক্রিপ্ট নিয়ে আসে যা আপনার পাইথন ২ প্রোগ্রামের উত্স ফাইলগুলিকে ইনপুট হিসাবে নেয় এবং স্বয়ংক্রিয়ভাবে এটিকে পাইথন ৩ এর ফর্ম্যাটে রূপান্তর করে। কেস স্টাডিঃ chardet কে পাইথন ৩ তে পোর্ট করা (porting chardet to Python 3) এই স্ক্রিপ্টটি কীভাবে চালানো যায় তা বর্ণনা করে এবং কিছু পরিস্থিতিতে দেখায় যেখানে এটি স্বয়ংক্রিয়ভাবে মেরামত করতে পারে না। এই সংযোজনটি বর্ণনা করে যে এটি স্বয়ংক্রিয়ভাবে মেরামত করতে পারে।

  • print বাক্যাংশ

পাইথন ২ এ, print একটি বাক্য। আপনি যা কিছু আউটপুট করতে চান, আপনি কেবল সেগুলি print কীওয়ার্ডের পরে রেখে দিতে পারেন। পাইথন ৩ এ, print ((() একটি ফাংশন। অন্যান্য ফাংশনগুলির মতো, print ((() আপনাকে যা আউটপুট করতে চান তা একটি প্যারামিটার হিসাবে পাস করতে হবে।

NotesPython 2Python 3
printprint()
print 1print(1)
print 1,2print(1,2)
print 1,2,print(1,2,end=' ')
print >>sys.stderr,1,2,3print(1,2,3, file=sys.stderr)

1। একটি ফাঁকা লাইন আউটপুট করার জন্য, আপনি print () কল করতে হবে যার কোন প্যারামিটার নেই।
২। একটি পৃথক মান আউটপুট করার জন্য, print () এর একটি প্যারামিটার হিসাবে এই মানটি ব্যবহার করতে হবে।
3। প্রিন্ট () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () ()
৪। এই উদাহরণে কিছু কৌশল আছে। পাইথন ২ এ, যদি আপনি print বাক্যাংশের শেষে একটি কমা (,) ব্যবহার করেন, তবে এটি একটি ফাঁকা দিয়ে আউটপুটকে পৃথক করবে, এবং তারপর একটি অনুসরণকারী ফাঁকা (,) ট্রেইলিং স্পেস) আউটপুট করবে, ক্যারিজ রিটার্ন না করে। পাইথন ৩ এ, একই প্রভাবটি প্রিন্টের কাছে একটি কীওয়ার্ড প্যারামিটার হিসাবে end=' ' দিয়ে সম্পন্ন করা যেতে পারে। প্যারামিটারটির ডিফল্ট মান হল '\n', তাই শেষ প্যারামিটারটির মান পুনঃনির্ধারণ করে, আপনি শেষের দিকে ক্যারিজ রিটার্ন চিহ্নটি বাতিল করতে পারেন।
৫. পাইথন ২ এ, আপনি >>pipe_name সিনট্যাক্স ব্যবহার করে আউটপুটকে একটি পাইপলাইনে পুনর্নির্দেশ করতে পারেন, যেমন sys.stderr। পাইথন ৩ এ, আপনি একই কাজটি করতে পারেন পাইপলাইনের মানগুলি কীওয়ার্ড প্যারামিটার ফাইল হিসাবে প্রিন্টের কাছে প্রেরণ করে। প্যারামিটার ফাইলের ডিফল্ট মানটি std.stdout, তাই এর মানটি পুনঃনির্ধারণ করা প্রিন্টকে অন্য একটি পাইপলাইনে আউটপুট দেবে।

  • ইউনিকোড স্ট্রিং

পাইথন ২ এ দুই ধরনের স্ট্রিং টাইপ রয়েছেঃইউনিকোড স্ট্রিংএবংঅ-ইউনিকোড স্ট্রিংপাইথন 3 এর একটি মাত্র টাইপ আছে:ইউনিকোড স্ট্রিং

NotesPython 2Python 3
u'PapayaWhip''PapayaWhip'
ur'PapayaWhip\foo'r'PapayaWhip\foo'

পাইথন ২ এর ইউনিকোড স্ট্রিংগুলি পাইথন ৩ এ সাধারণ স্ট্রিং, কারণ পাইথন ৩ এ স্ট্রিংগুলি সর্বদা ইউনিকোড ফর্ম্যাট থাকে।
ইউনিকোড অরিজিনাল স্ট্রিং ((raw string) ((এই স্ট্রিং ব্যবহার করে, পাইথন স্বয়ংক্রিয়ভাবে বিপরীত ক্রিয়াটি অনুবাদ করে না"") সাধারণ স্ট্রিং দ্বারা প্রতিস্থাপিত হয়েছে, কারণ পাইথন 3 এ, সমস্ত অরিজিনাল স্ট্রিং ইউনিকোডে এনকোড করা হয়েছে।

  • গ্লোবাল ফাংশন ইউনিকোড (((

পাইথন ২-এ দুটি গ্লোবাল ফাংশন রয়েছে যা বস্তুটিকে স্ট্রিংয়ে রূপান্তর করতে বাধ্য করেঃ unicode ((() যা বস্তুটিকে ইউনিকোড স্ট্রিংয়ে রূপান্তর করে, এবং str ((() যা বস্তুটিকে নন-ইউনিকোড স্ট্রিংয়ে রূপান্তর করে। পাইথন ৩-এ কেবলমাত্র একটি স্ট্রিং টাইপ রয়েছে, ইউনিকোড স্ট্রিং, তাই str ((() ফাংশনটি সমস্ত কার্য সম্পাদন করতে পারে।unicode() ফাংশনটি পাইথন ৩ এ আর বিদ্যমান নেই <unk>)

NotesPython 2Python 3
unicode(anything)str(anything)
  • লম্বা সমতল

পাইথন ২-এ নন-ফ্লোটিং পয়েন্টের জন্য int এবং long টাইপ রয়েছে। int টাইপের সর্বোচ্চ মানটি sys.maxint এর চেয়ে বেশি হতে পারে না, এবং এই সর্বোচ্চ মানটি প্ল্যাটফর্মের সাথে সম্পর্কিত। আপনি সংখ্যার শেষে একটি এল সংযুক্ত করে লম্বা পূর্ণসংখ্যা সংজ্ঞায়িত করতে পারেন। স্পষ্টতই, এটি int টাইপ দ্বারা উপস্থাপিত সংখ্যার চেয়ে বৃহত্তর পরিসীমা। পাইথন ৩-এ কেবলমাত্র একটি পূর্ণসংখ্যা টাইপ int রয়েছে, যা বেশিরভাগ ক্ষেত্রে পাইথন ২-এর মতো দীর্ঘ পূর্ণসংখ্যা। যেহেতু দুটি ধরণের পূর্ণসংখ্যা বিদ্যমান নেই, তাই তাদের পার্থক্য করার জন্য বিশেষ ব্যাকরণ ব্যবহার করার প্রয়োজন নেই।

পিইপি ২৩৭: ইউনিফাইড লং ও ইন্টিগ্রেটেড টাইপ।

NotesPython 2Python 3
x = 1000000000000Lx = 1000000000000
x = 0xFFFFFFFFFFFFLx = 0xFFFFFFFFFFFF
long(x)int(x)
type(x) is longtype(x) is int
isinstance(x,long)isinstance(x,int)

পাইথন ২-এ দশমিকের দীর্ঘ পূর্ণসংখ্যা পাইথন ৩-এ দশমিকের সাধারণ পূর্ণসংখ্যা দ্বারা প্রতিস্থাপিত হয়েছে।
পাইথন ২-এ ষোড়শ সংখ্যাযুক্ত দীর্ঘ পূর্ণসংখ্যাকে পাইথন ৩-এ ষোড়শ সংখ্যাযুক্ত সাধারণ পূর্ণসংখ্যা দ্বারা প্রতিস্থাপিত করা হয়েছে।
পাইথন ৩ এ, লম্বা পূর্ণরূপ আর নেই, তাই এটিকে "অনুপস্থিত" বলা হয়।প্রাকৃতিক long () ফাংশনটিও নেই। একটি পরিবর্তনশীলকে একটি পূর্ণরূপে রূপান্তর করতে বাধ্য করার জন্য int () ফাংশন ব্যবহার করা যেতে পারে
একটি ভেরিয়েবল পূর্ণসংখ্যা কিনা তা পরীক্ষা করে, তার ডেটা টাইপ পায় এবং একটি int টাইপের সাথে তুলনা করে (যেটা দীর্ঘ নয়) ।
আপনি ইনস্ট্যান্স () ফাংশন ব্যবহার করে ডেটা টাইপ পরীক্ষা করতে পারেন; আবারও জোর দিয়ে বলতে চাই, পূর্ণসংখ্যা টাইপ পরীক্ষা করার জন্য int ব্যবহার করুন, লং নয়।

  • <> তুলনা অপারেটর

পাইথন ২ সমর্থন করে <> হিসাবে! = এর সমার্থক। পাইথন ৩ শুধুমাত্র! = সমর্থন করে, আর সমর্থন করে না <>।

NotesPython 2Python 3
if x <> y:if x != y:
if x <> y<> z:if x != y!= z:

১। সহজভাবে তুলনা করা।
২। তিনটি তুলনামূলক জটিল মানের মধ্যে তুলনা।

  • শব্দকোষ পদ্ধতি has_key()

পাইথন ২ তে, ডিকশনারি অবজেক্টের has_key ((() পদ্ধতি যা একটি নির্দিষ্ট কী রয়েছে কিনা তা পরীক্ষা করার জন্য ব্যবহৃত হয় (((key) । পাইথন 3 এই পদ্ধতিটি আর সমর্থন করে না ।inঅপারেটর:

NotesPython 2Python 3
a_dictionary.has_key('PapayaWhip')'PapayaWhip' in a_dictionary
a_dictionary.has_key(x) or a_dictionary.has_key(y)x in a_dictionary or y in a_dictionary
a_dictionary.has_key(x or y)(x or y) in a_dictionary
a_dictionary.has_key(x + y)(x + y) in a_dictionary
x + a_dictionary.has_key(y)x + (y in a_dictionary)

১। সবচেয়ে সহজ ফর্ম <unk>
২। or অপারেটরের অগ্রাধিকার in অপারেটরের চেয়ে কম, তাই এখানে বন্ধনী যোগ করার প্রয়োজন নেই।
৩। অন্যদিকে, একই কারণে, or এর অগ্রাধিকার in এর চেয়ে কম, এখানে বন্ধনী যুক্ত করতে হবে। উল্লেখ্যঃ এখানে কোডটি পূর্বের লাইনের থেকে সম্পূর্ণ ভিন্ন। পাইথন প্রথমে x or y ব্যাখ্যা করবে, ফলাফল x ((যদি x এর মানটি বুলে সত্য হয়) বা y। তারপরে পাইথন পরীক্ষা করে যে ফলাফলটি a কিনা_একটি শব্দকোষের একটি কী।)
৪. অপারেটর in এর অগ্রাধিকার অপারেটর + এর চেয়ে কম, তাই কোডের এই ফর্মটি প্রযুক্তিগতভাবে বন্ধনীগুলির প্রয়োজন হয় না, তবে ২-টু-৩ যোগ করা হয়।
৫। এই ফর্মটি অবশ্যই বন্ধনীতে থাকা উচিত, কারণ in এর অগ্রাধিকার + <unk> এর চেয়ে কম।

  • একটি অভিধান শ্রেণীর পদ্ধতি যা একটি তালিকা ফেরত দেয়

পাইথন ২-এ, অনেক অভিধান পদ্ধতির রিটার্ন মান হল তালিকা। সবচেয়ে বেশি ব্যবহৃত পদ্ধতির মধ্যে রয়েছে keys,items এবং values। পাইথন ৩-এ, উপরের সমস্ত পদ্ধতির রিটার্ন মান পরিবর্তন করা হয়েছে dynamic view-এ। কিছু প্রসঙ্গের পরিবেশে, এই পরিবর্তনটি প্রভাব ফেলবে না। যদি এই পদ্ধতিগুলির রিটার্ন মানগুলি অবিলম্বে অন্য একটি ফাংশনকে দেওয়া হয় এবং সেই ফাংশনটি পুরো ক্রমটি অতিক্রম করে, তবে উপরের পদ্ধতির রিটার্ন মান হল তালিকা বা দৃশ্য এবং কোনও পার্থক্য হবে না। অন্য ক্ষেত্রে, পাইথন ৩-এর এই পরিবর্তনগুলি গুরুত্বপূর্ণ। আপনি যদি একটি তালিকা আশা করেন যা স্বাধীনভাবে পয়েন্ট করা যায়, তবে পাইথন ৩-এর এই পরিবর্তনগুলি আপনার কোড কার্ডকে আটকে দেবে, কারণ view-টি সূচীবদ্ধকরণ সমর্থন করে না।

NotesPython 2Python 3
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())no change

১। list () ফাংশন ব্যবহার করে keys () এর রিটার্ন ভ্যালুকে একটি স্ট্যাটিক তালিকায় রূপান্তর করা হয়। নিরাপত্তার জন্য, 2to3 সম্ভবত ভুল করে। এই ধরনের কোড কার্যকর, তবে ভিউ ব্যবহারের জন্য এটি কিছুটা কম দক্ষ। আপনি অবশ্যই তালিকাটি প্রয়োজন কিনা তা দেখার জন্য রূপান্তরিত কোডটি পরীক্ষা করা উচিত, সম্ভবত ভিউও একই কাজ করতে পারে।
২, এটি অন্য একটি দৃশ্য, যা [[items]] পদ্ধতির [[conversion]]কে [[list]]তে রূপান্তরিত করে। ২-টু-৩ জোড়া [[values]] পদ্ধতির [[value]] ফেরত দেওয়ার ক্ষেত্রেও একই রকম।
৩, পাইথন ৩ তে আর iterkeys ((() সাপোর্ট করে না। প্রয়োজন হলে, iter ((() ব্যবহার করে keys ((() এর রিটার্ন মানকে একটি iterator এ রূপান্তর করুন।
৪, ২-টু-৩ এর সাহায্যে, iterkeys () পদ্ধতিকে তালিকা বিশ্লেষণে ব্যবহার করা যেতে পারে এবং এটিকে পাইথন ৩ এর keys () পদ্ধতিতে রূপান্তর করা যেতে পারে। এর জন্য অতিরিক্ত iter () ব্যবহার করার প্রয়োজন নেই। এটি কার্যকর কারণ ভিউটি পুনরাবৃত্তিমূলক।
৫, ২-৩-এও দেখা যায় যে keys ((() পদ্ধতির রিটার্ন অবিলম্বে অন্য ফাংশনে প্রেরণ করা হয় যা পুরো ক্রমটি অতিক্রম করে, তাই keys ((() এর রিটার্নকে প্রথমে একটি তালিকায় রূপান্তর করার দরকার নেই। বিপরীতে, min ((() ফাংশনটি দৃশ্যটি অতিক্রম করতে খুশি হবে। এই প্রক্রিয়াটি min (((), max (((), sum (((), list (((), tuple (((), set (((), sorted (((), any ((() এবং all (()) এর জন্যও কার্যকর।

  • মডিউল পুনরায় নামকরণ বা পুনর্গঠন

পাইথন ২ থেকে পাইথন ৩ পর্যন্ত, স্ট্যান্ডার্ড কুরির কিছু মডিউল নামকরণ করা হয়েছে। কিছু সম্পর্কিত মডিউলকে একত্রিত বা পুনর্গঠিত করা হয়েছে যাতে এই সম্পর্ক আরও যৌক্তিক হয়।

  • http
    পাইথন ৩ এ, বেশ কয়েকটি সম্পর্কিত এইচটিটিপি মডিউলকে একটি পৃথক প্যাকেজে সংযুক্ত করা হয়েছে, যা হল http।
NotesPython 2Python 3
import httplibimport http.client
import Cookieimport http.cookies
import cookielibimport http.cookiejar
import BaseHTTPServer <br> import SimpleHTTPServer <br> import CGIHttpServerimport http.server

http.client মডিউলটি একটি অন্তর্নিহিত লাইব্রেরি বাস্তবায়ন করে যা HTTP রিসোর্সগুলির জন্য অনুরোধ করতে এবং HTTP প্রতিক্রিয়াগুলি পার্স করতে ব্যবহার করা যেতে পারে।
http.cookies মডিউলটি HTTP হেডার (HTTP header) Set-Cookie এর মাধ্যমে প্রেরিত কুকিজ পাওয়ার জন্য একটি পাইথোনিক ইন্টারফেস সরবরাহ করে
সাধারণ ব্রাউজারগুলি কুকিজকে ফাইল হিসাবে ডিস্কে সংরক্ষণ করে, এবং http.cookiejar মডিউল এই ফাইলগুলি পরিচালনা করতে পারে।
http.server মডিউল একটি মৌলিক HTTP সার্ভার বাস্তবায়ন করে

  • urllib
    পাইথন ২-এ কিছু মডিউল রয়েছে যা ইউআরএল বিশ্লেষণ, কোডিং এবং প্রাপ্তির জন্য ব্যবহৃত হয়, তবে এই মডিউলগুলি একে অপরের উপর মাউস ক্যানের মতো কাজ করে। পাইথন ৩-এ, এই মডিউলগুলি পুনর্গঠন করা হয়েছে এবং একটি পৃথক প্যাকেজ, urllib হিসাবে সংকলিত হয়েছে।
NotesPython 2Python 3
import urllibimport urllib.request <br> urllib.parse,urllib.error
import urllib2import urllib.request <br> urllib.error
import urlparseimport urllib.parse
import robotparserimport urllib.robotparser
from urllib import FancyURLopener <br> from urllib import urlencodefrom urllib.request import FancyURLopener <br> from urllib.parse import urlencode
from urllib2 import Request <br> from urllib2 import HTTPErrorfrom urllib.request import Request <br> from urllib.error import HTTPError

পূর্বে, পাইথন ২-এর urllib মডিউলটিতে বিভিন্ন ফাংশন ছিল, যার মধ্যে রয়েছে urlopen () যা ডেটা সংগ্রহের জন্য ব্যবহৃত হয়, এবং এটি ইউআরএলকে তার উপাদানগুলিতে বিভক্ত করার জন্যও কার্যকর ছিল splitype ()), splithost () এবং splituser () ফাংশন। নতুন urllib প্যাকেজে, এই ফাংশনগুলি আরও যৌক্তিকভাবে সংগঠিত হয়েছে। 2to3 এই ফাংশনগুলির কলগুলিকে নতুন নামকরণের সাথে খাপ খাইয়ে নিতে সংশোধন করবে।
পাইথন ৩ তে, পূর্ববর্তী urllib2 মডিউলগুলি urllib প্যাকেজে সংযুক্ত করা হয়েছে। একই সময়ে, আপনার প্রিয় কিছু urllib2 এর মধ্যে একটি অনুপস্থিত urllib মডিউল পাইথন ৩ তে উপস্থিত হবে, যেমন build_opener () পদ্ধতি, Request object, HTTPBasicAuthHandler এবং friends。
পাইথন ৩ এর urllib.parse মডিউলটিতে মূল পাইথন ২ এর urlparse মডিউলের সমস্ত পার্সার ফাংশন রয়েছে।
urllib.robotparse মডিউলটি robots.txt ফাইলটি পার্স করে।
FancyURLopener ক্লাস, যা HTTP পুনর্নির্দেশ এবং অন্যান্য স্ট্যাটাস কোড পরিচালনা করে, এখনও পাইথন 3 এর urllib.request মডিউলে কার্যকর রয়েছে। <unk>urlencode (<unk>) ফাংশনটি urllib.parse এ স্থানান্তরিত হয়েছে।
Request অবজেক্ট urllib.request এ কাজ করে, কিন্তু HTTPError এর মত ধ্রুবকগুলো urllib.error এ স্থানান্তরিত হয়েছে।
আমি কি উল্লেখ করেছি যে 2to3 আপনার ফাংশন কলগুলিও পুনর্লিখন করবে? উদাহরণস্বরূপ, যদি আপনার পাইথন 2 কোডে urllib মডিউলটি আমদানি করা হয়, তবে urllib.urlopen () ফাংশনটি ডেটা পেতে, 2to3 আমদানি বাক্যাংশ এবং ফাংশন কলগুলি একই সাথে সংশোধন করবে।

NotesPython 2Python 3
import urllib print urllib.urlopen('http://diveintopython3.org/').read()import urllib.request, urllib.parse, urllib.error <br> print(urllib.request.urlopen('http://diveintopython3.org/').read())
  • dbm
    সমস্ত DBM ক্লোন এখন একটি পৃথক প্যাকেজ, dbm. আপনি যদি তাদের মধ্যে একটি নির্দিষ্ট রূপ, যেমন GNUDBM প্রয়োজন, আপনি dbm প্যাকেজ মধ্যে উপযুক্ত মডিউল আমদানি করতে পারেন।
NotesPython 2Python 3
import dbmimport dbm.ndbm
import gdbmimport dbm.gnu
import dbhashimport dbm.bsd
import dumbdbmimport dbm.dumb
import anydbm <br> import whichdbimport dbm
  • xmlrpc
    এক্সএমএল-আরপিসি একটি হালকা স্তরের পদ্ধতি যা HTTP প্রোটোকলের মাধ্যমে দূরবর্তী RPC কলগুলি সম্পাদন করে। কিছু এক্সএমএল-আরপিসি ক্লায়েন্ট এবং এক্সএমএল-আরপিসি সার্ভার-এন্ড বাস্তবায়ন লাইব্রেরি এখন একটি পৃথক প্যাকেজে সংযুক্ত করা হয়েছে, xmlrpc।
NotesPython 2Python 3
import xmlrpclibimport xmlrpc.client
import DocXMLRPCServer <br> import SimpleXMLRPCServerimport xmlrpc.server
  • অন্যান্য মডিউল

NotesPython 2Python 3
try:<br>  import cStringIO as StringIO <br>except ImportError: <br>  import StringIOimport io
try:<br>  import cPickle as pickle <br>except ImportError: <br>  import pickleimport pickle
import _builtin_import builtins
import copy_regimport copyreg
import Queueimport queue
import SocketServerimport socketserver
import ConfigParserimport configparser
import reprimport reprlib
import commandsimport subprocess

১। Python 2 এ আপনি সাধারণত এই কাজটি করবেন, প্রথমে cStringIO কে StringIO এর বিকল্প হিসেবে ইম্পোর্ট করার চেষ্টা করুন, যদি ব্যর্থ হয় তবে StringIO ইম্পোর্ট করুন। Python 3 এ এটি করবেন না; io মডিউলটি আপনাকে এই কাজটি করতে সাহায্য করবে। এটি উপলব্ধ দ্রুততম বাস্তবায়ন পদ্ধতি খুঁজে বের করবে এবং এটি স্বয়ংক্রিয়ভাবে ব্যবহার করবে।
২। পাইথন ২ তে, দ্রুততম পিকল বাস্তবায়ন আমদানি করাও উপরের মতই একটি কার্যকর পদ্ধতি। পাইথন ৩ তে, পিকল মডিউলটি স্বয়ংক্রিয়ভাবে আপনার জন্য এটি পরিচালনা করে, তাই আর এটি করবেন না।
৩. builtins মডিউল গ্লোবাল ফাংশন, ক্লাস এবং ধ্রুবক ধারণ করে যা পুরো পাইথন ভাষায় ব্যবহৃত হয়। Builtins মডিউলের একটি ফাংশন পুনরায় সংজ্ঞায়িত করা মানে এই গ্লোবাল ফাংশনটি সর্বত্র পুনরায় সংজ্ঞায়িত করা। এটি শক্তিশালী শোনাচ্ছে, তবে একই সাথে ভয়ঙ্করও।
৪। copyreg মডিউলটি C ভাষায় সংজ্ঞায়িত ব্যবহারকারীর কাস্টমাইজড প্রকারের জন্য pickle মডিউলটির সমর্থন যোগ করেছে।
৫। ক্যু মডিউল একটি প্রযোজক-ভোক্তা ক্যু (মাল্টি-প্রযোজক, মাল্টি-গ্রাহক ক্যু) বাস্তবায়ন করে।
৬। সকেট সার্ভার মডিউলটি বিভিন্ন সকেট সার্ভার বাস্তবায়নের জন্য সাধারণ মৌলিক শ্রেণি সরবরাহ করে।
৭। কনফিগারারার মডিউলটি আইএনআই-স্টাইল কনফিগারেশন ফাইলগুলিকে বিশ্লেষণ করতে ব্যবহৃত হয়।
৮, reprlib মডিউলটি বিল্ট-ইন ফাংশন repr () পুনরায় বাস্তবায়ন করে এবং স্ট্রিংয়ের দৈর্ঘ্য নিয়ন্ত্রণ করে যে এটি বন্ধ হওয়ার আগে নির্দেশিত হয়।
9। subprocess মডিউল আপনাকে একটি সাবপ্রসেস তৈরি করতে দেয়, তাদের পাইপলাইনের সাথে সংযুক্ত করে এবং তাদের রিটার্নের মানগুলি গ্রহণ করে।

  • প্যাকেজের মধ্যে আপেক্ষিক আমদানি

একটি প্যাকেজ হল একটি একক সত্তা যা একটি সম্পর্কিত মডিউল দ্বারা গঠিত। পাইথন ২ তে, একই প্যাকেজের মডিউলগুলির জন্য পারস্পরিক রেফারেন্সের জন্য, আপনি আমদানি foo বা from foo import Bar ব্যবহার করবেন। পাইথন ২ এর ব্যাখ্যাকারী প্রথমে বর্তমান ডিরেক্টরিতে foo.py অনুসন্ধান করবে, তারপরে পাইথন অনুসন্ধান পাথ ((sys.path) এ অনুসন্ধান করবে। পাইথন ৩ এ এই প্রক্রিয়াটি কিছুটা আলাদা। পাইথন ৩ প্রথমে বর্তমান পাথটি অনুসন্ধান করবে না, এটি সরাসরি পাইথনের অনুসন্ধান পাথের মধ্যে অনুসন্ধান করবে। যদি আপনি প্যাকেজের অন্য মডিউলকে একটি প্যাকেজের মডিউল থেকে আমদানি করতে চান তবে আপনাকে স্পষ্টতই দুটি মডিউলের আপেক্ষিক পথ সরবরাহ করতে হবে।

ধরুন, আপনার কাছে একই ডিরেক্টরিতে একাধিক ফাইল রয়েছে, যেমনঃ

chardet/
|
+--init.py
|
+--constants.py
|
+--mbcharsetprober.py
|
+--universaldetector.py

এখন ধরুন যে universaldetector.py এর জন্য constants.py এর পুরো একটি ক্লাস এবং mbcharsetprober.py এর একটি ক্লাস প্রয়োজন। আপনি কি করবেন?

NotesPython 2Python 3
import constantsfrom .import constants
from mbcharsetprober import MultiByteCharSetProberfrom .mbcharsetprober import MultiByteCharsetProber

১। যখন আপনি প্যাকেজের অন্য জায়গা থেকে পুরো মডিউলটি আমদানি করতে চান, তখন নতুন from.import সিনট্যাক্স ব্যবহার করুন। এখানে বাক্য সংখ্যা (((.) বর্তমান ফাইল (universaldetector.py) এবং আপনি যে ফাইলটি আমদানি করতে চান (constants.py) এর মধ্যে আপেক্ষিক পথ নির্দেশ করে। এই উদাহরণে, এই দুটি ফাইল একই ডিরেক্টরিতে রয়েছে, তাই একটি একক বাক্য ব্যবহার করা হয়েছে। আপনি পিতা-মাতা ডিরেক্টরি থেকেও আমদানি করতে পারেন (((from .. import anothermodule) অথবা একটি উপ-ডিরেক্টরি।
২। একটি নির্দিষ্ট ক্লাস বা ফাংশন অন্য মডিউল থেকে সরাসরি আপনার মডিউল নামস্থান থেকে আমদানি করার জন্য, আমদানি করা প্রয়োজন এমন মডিউল নামের সাথে আপেক্ষিক পাথ যুক্ত করুন এবং শেষ স্ল্যাশটি সরিয়ে দিন ((slash) । এই উদাহরণে, mbcharsetprober.py এবং universaldetector.py একই ডিরেক্টরিতে রয়েছে, তাই আপেক্ষিক পাথের নামটি একটি বাক্য। আপনি পিতা-মাতা ডিরেক্টরি ((from .. import anothermodule) বা একটি উপ-ডিরেক্টরি থেকেও আমদানি করতে পারেন।

  • পরবর্তী ()

পাইথন ২-এ, ইটোরেটরটির একটি next () পদ্ধতি রয়েছে যা ক্রমের পরবর্তী পদটি ফেরত দেয়। এটি পাইথন ৩-এও কাজ করে, তবে এখন একটি নতুন গ্লোবাল ফাংশন next () রয়েছে যা একটি ইটোরেটরকে প্যারামিটার হিসাবে ব্যবহার করে।

NotesPython 2Python 3
anIterator.next()next(anIterator)
a_function_that_returns_an_iterator().next()next(a_function_that_returns_an_iterator())
class A:<br>  def next(self):<br>  passclass A:<br>  def next(self):<br>  pass|
class A:<br>  def next(self, x, y):<br>  passno change
next = 42<br>for an_iterator in a_sequence_of_iterators:<br>  an_iterator.next()next = 42<br>for an_iterator in a_sequence_of_iterators:<br>  an_iterator.next()

1, সহজতম উদাহরণ, আপনি আর একটি ইটোরেটর এর next (() পদ্ধতি কল করবেন না, এখন আপনি ইটোরেটর নিজেই একটি প্যারামিটার হিসাবে গ্লোবাল ফাংশন next ((() তে পাস করবেন।
২, যদি আপনার কাছে একটি ফাংশন থাকে যার রিটার্ন মান হল একটি ইডিয়েটর, তবে এই ফাংশনটি কল করুন এবং ফলাফলটি next () ফাংশনকে প্যারামিটার হিসাবে পাস করুন।
তৃতীয়ত, আপনি যদি আপনার নিজস্ব ক্লাসটি সংজ্ঞায়িত করেন এবং এটিকে একটি ইরেক্টর হিসাবে ব্যবহার করেন, পাইথন 3 এ, আপনি একটি বিশেষ পদ্ধতি সংজ্ঞায়িত করে__next_(পরের সংবাদ)
৪, যদি আপনার সংজ্ঞায়িত শ্রেণীর মধ্যে একটি next () থাকে, যা এক বা একাধিক প্যারামিটার ব্যবহার করে, 2to3 কার্যকর করার সময় এটিকে সরানো হবে না। এই শ্রেণীটি একটি iterator হিসাবে ব্যবহার করা যাবে না, কারণ এর next () পদ্ধতিতে প্যারামিটার রয়েছে।
৫, এটা একটু জটিল। আপনি যদি একটি স্থানীয় ভেরিয়েবলের নাম next রাখেন, তাহলে Python 3 এ এর অগ্রাধিকার হবে global function next ((() এর চেয়ে বেশি। এই ক্ষেত্রে, আপনাকে একটি বিশেষ পদ্ধতিতে iterator কল করতে হবে।next() ক্রমের পরবর্তী উপাদানটি পেতে。(অথবা, আপনি কোডটি পুনর্গঠন করতে পারেন যাতে এই স্থানীয় পরিবর্তনশীলটির নাম next না হয়, কিন্তু 2to3 আপনার জন্য এটি করবে না。)

  • গ্লোবাল ফাংশন ফিল্টার

পাইথন ২ এ, filter() পদ্ধতি একটি তালিকা প্রদান করে যা একটি ফাংশন দ্বারা প্রাপ্ত হয় যা সত্য বা মিথ্যা হিসাবে প্রত্যাবর্তন করে। পাইথন ৩ এ, filter() ফাংশনটি একটি ইরেক্টর ফেরত দেয়, এটি আর তালিকা নয়।

NotesPython 2Python 3
filter(a_function, a_sequence)list(filter(a_function, a_sequence))
list(filter(a_function, a_sequence))no change
filter(None, a_sequence)[i for iin a_sequence if i]
for i in filter(None, a_sequence):no change
[i for iin filter(a_function, a_sequence)]no change

1, সবচেয়ে সহজ ক্ষেত্রে, 2to3 একটি list () ফাংশন ব্যবহার করে filter () প্যাকেজ করে, এবং list () ফাংশন তার প্যারামিটারগুলি অতিক্রম করে এবং একটি তালিকা ফেরত দেয়।
২, যাইহোক, যদি filter() কলটি list() প্যাকেজে থাকে, তাহলে 2to3 আর কাজ করবে না, কারণ এই ক্ষেত্রে filter() এর রিটার্ন মানটি একটি iterator কিনা তা গুরুত্বপূর্ণ নয়।
3। Filter ((None, ...) এর এই বিশেষ ব্যাকরণটি মোকাবেলা করার জন্য, 2to3 এই কলটিকে ব্যাকরণগতভাবে সমতুল্য থেকে তালিকা বিশ্লেষণে রূপান্তর করবে।
৪। যেহেতু for loop পুরো ক্রম জুড়ে চলে, তাই আর কোন পরিবর্তন করার প্রয়োজন নেই।
৫. উপরের মতই, কোন পরিবর্তন করার প্রয়োজন নেই, কারণ তালিকা পার্সারিং পুরো ক্রম জুড়ে চলে, এমনকি যদি filter ((() একটি iterator ফেরত দেয়, তবে এটি আগের filter ((() return list মতই কাজ করবে।

  • গ্লোবাল ফাংশন মানচিত্র

ফিল্টার () এর পরিবর্তনের মতো, map () ফাংশনটি এখন একটি iterator প্রদান করে। পাইথন 2 এ, এটি একটি তালিকা প্রদান করে।

NotesPython 2Python 3
map(a_function,'PapayaWhip')list(map(a_function,'PapayaWhip'))
map(None,'PapayaWhip')list('PapayaWhip')
map(lambda x: x+1,range(42))[x+1for x in range(42)]
for i in map(a_function, a_sequence):no change
[i for iin map(a_function,a_sequence)]no change

১, ফিল্টার (), 2to3 এর সাথে একইভাবে ব্যবহার করা হয়। সবচেয়ে সহজ ক্ষেত্রে, 2to3 একটি list () ফাংশন ব্যবহার করে map () কলটি প্যাকেজ করে।
২। একটি বিশেষ map ((None, ...) বানানের জন্য, filter ((None, ...) এর মত, 2to3 এটিকে একটি list (() এর সমতুল্য কল হিসাবে রূপান্তর করবে।
৩, map (,) এর প্রথম প্যারামিটারটি যদি একটি lambda ফাংশন হয়, 2to3 এটিকে সমতুল্যভাবে তালিকা পার্সেলিংয়ে রূপান্তর করবে।
৪। For loop এর জন্য কোন পরিবর্তন করার প্রয়োজন নেই, যা পুরো ক্রম জুড়ে চলে।
৫, আবার, এখানে কোন পরিবর্তন করার প্রয়োজন নেই, কারণ তালিকা পার্সারিং পুরো ক্রম জুড়ে চলে, এমনকি map () এর রিটার্ন মানটি তালিকা নয় বরং একটি ইন্ডেক্স হলেও এটি সঠিকভাবে কাজ করবে।

  • গ্লোবাল ফাংশন reduce ()

পাইথন ৩-এ, reduce ((() ফাংশনটি গ্লোবাল নামস্থান থেকে সরিয়ে ফেলা হয়েছে এবং এটি এখন fucntools মডিউলে রাখা হয়েছে।

NotesPython 2Python 3
reduce(a, b, c)from functools import reduce reduce(a, b, c)
  • গ্লোবাল ফাংশন apply

পাইথন ২ এর একটি গ্লোবাল ফাংশন আছে যার নাম apply (), এটি একটি ফাংশন f এবং একটি তালিকা ব্যবহার করে[a, b, c] একটি প্যারামিটার হিসাবে, f ((a, b, c) । আপনি এই ফাংশনটি সরাসরি কল করে তালিকাটির আগে একটি তারকাচিহ্ন যুক্ত করতে পারেন।*) একটি প্যারামিটার হিসেবে পাস করা হয় যাতে এটি একই কাজ করতে পারে। পাইথন ৩-এ, apply ((() ফাংশন আর বিদ্যমান নেই; এটিকে একটি তারকাচিহ্ন দিয়ে চিহ্নিত করতে হবে।

NotesPython 2Python 3
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)

1, সবচেয়ে সহজ ফর্ম, আপনি একটি প্যারামিটার তালিকা (যেমন[a, b, c] এর মত) ফাংশনটি কল করার আগে একটি তারকাচিহ্ন যুক্ত করুন। এটি পাইথন ২ এর apply () ফাংশনের সমতুল্য।
২, পাইথন ২ এ, apply ((() ফাংশনটি আসলে ৩ টি প্যারামিটার বহন করতে পারেঃ একটি ফাংশন, একটি প্যারামিটার তালিকা, একটি অভিধান নামকরণ প্যারামিটার (((dictionary of named arguments)) । পাইথন ৩ এ, আপনি প্যারামিটার তালিকার আগে একটি তারকাচিহ্ন যুক্ত করে (((), অভিধানের নামকরণের পরামিতিগুলির আগে দুটি তারকাচিহ্ন যুক্ত করুন ((**) একই রকম প্রভাব ফেলতে পারে।
৩, অপারেটর + এখানে লিঙ্কযুক্ত তালিকার ফাংশন হিসাবে ব্যবহৃত হয়, এটি অপারেটরের চেয়ে বেশি অগ্রাধিকার পায়
, সুতরাং a_list_of_args + z এর চারপাশে অতিরিক্ত বন্ধনী যুক্ত করার প্রয়োজন নেই।
৪, ২-টু-৩ স্ক্রিপ্টটি জটিল apply () কলগুলি রূপান্তর করার জন্য যথেষ্ট বুদ্ধিমান, যার মধ্যে আমদানি মডিউলের ফাংশনগুলি অন্তর্ভুক্ত রয়েছে।

  • গ্লোবাল ফাংশন intern ())

পাইথন ২ এ, আপনি একটি স্ট্রিংয়ের উপর inter () ফাংশন ব্যবহার করে এটিকে সীমাবদ্ধ করতে পারেন যাতে এটি পারফরম্যান্স অপ্টিমাইজেশান অর্জন করতে পারে। পাইথন ৩ এ, inter () ফাংশনটি sys মডিউলে স্থানান্তরিত হয়েছে।

NotesPython 2Python 3
intern(aString)sys.intern(aString)
  • exec বিবৃতি

    যেভাবে print স্টেটমেন্ট পাইথন ৩ তে একটি ফাংশন হয়ে যায়, তেমনিভাবে exec স্টেটমেন্টটিও ঘটে।。exec() ফাংশনটি একটি স্ট্রিং ব্যবহার করে যার মধ্যে যেকোন পাইথন কোড রয়েছে প্যারামিটার হিসাবে, এবং তারপর এটিকে স্টেটমেন্ট বা এক্সপ্রেশন হিসাবে চালায়।。exec() এবং eval() এর মতোই, তবে exec() আরও শক্তিশালী এবং আরও কৌশলগত।。eval() ফাংশনটি শুধুমাত্র একটি একক এক্সপ্রেশন চালাতে পারে, কিন্তু exec() একাধিক স্টেটমেন্ট চালাতে পারে, আমদানি করতে পারে, আমদানি করতে পারে, ফাংশন ঘোষণা করতে পারে।

NotesPython 2Python 3

|①|exec codeString|exec(codeString)
|②|exec codeString in a_global_namespace|exec(codeString, a_global_namespace)|
|③|exec codeString in a_global_namespace, a_local_namespace|exec(codeString, a_global_namespace,a_local_namespace)|
১। সহজতম আকারে, যেহেতু exec ((() এখন একটি ফাংশন, একটি স্টেটমেন্ট নয়, 2to3 এই স্ট্রিং আকারের কোডকে বন্ধনী দিয়ে ঘিরে রাখবে।
২, Python 2 এর exec স্টেটমেন্ট নামস্থান নির্দিষ্ট করতে পারে, কোডটি এই গ্লোবাল অবজেক্টের তৈরি ব্যক্তিগত স্পেসে কার্যকর হবে। Python 3 তেও এই বৈশিষ্ট্য রয়েছে; আপনাকে কেবল এই নামস্থানটি দ্বিতীয় প্যারামিটার হিসাবে exec () ফাংশনে পাস করতে হবে।
৩. আরো আশ্চর্যজনকভাবে, Python 2 এর exec স্টেটমেন্ট একটি স্থানীয় নামস্থান নির্ধারণ করতে পারে (যেমন একটি ফাংশনের মধ্যে ঘোষিত পরিবর্তনশীল) । Python 3 এ, exec () ফাংশনটিও এই ধরনের একটি ফাংশন রয়েছে।

  • execfile বিবৃতি

পূর্ববর্তী exec স্টেটমেন্টের মত, Python 2 এর execfile স্টেটমেন্টটিও Python কোড চালানোর মত স্ট্রিং ব্যবহার করতে পারে। তবে exec স্ট্রিং ব্যবহার করে এবং execfile ফাইল ব্যবহার করে। Python 3 এ, execfile স্টেটমেন্টটি সরিয়ে ফেলা হয়েছে। আপনি যদি সত্যিই একটি ফাইলের Python কোডটি চালাতে চান তবে আপনি এটি আমদানি করতে চান না, আপনি ফাইলটি খুলতে, এর বিষয়বস্তু পড়তে এবং তারপরে compile () ফাংশনটি কল করতে পারেন।

NotesPython 2Python 3
execfile('a_filename')exec(compile(open('a_filename').read(),'a_filename','exec'))
  • repr (উল্লেখযোগ্য)

পাইথন ২-এ, একটি স্ট্রিং-এর মাধ্যমে একটি ইচ্ছাকৃত অবজেক্টকে প্রদর্শিত করার জন্য, একটি অবজেক্টকে একটি বিপরীত-উদ্ধৃতিতে আবৃত করা হয়, যেমন ((x) এর বিশেষ ব্যাকরণ. পাইথন ৩ এ, এই ক্ষমতা এখনও বিদ্যমান, কিন্তু আপনি আর এই স্ট্রিংটি প্রাপ্ত করতে ব্যাককোড ব্যবহার করতে পারবেন না। আপনাকে একটি গ্লোবাল ফাংশন ব্যবহার করতে হবে repr ((() ।

NotesPython 2Python 3
`x`repr(x)
`'PapayaWhip' + `2``repr('PapayaWhip'+ repr(2))

১। মনে রাখবেন, x যেকোনো কিছু হতে পারে <unk> একটি ক্লাস, ফাংশন, মডিউল, মৌলিক ডেটা টাইপ, ইত্যাদি <unk>। repr () ফাংশন যেকোনো ধরনের প্যারামিটার ব্যবহার করতে পারে <unk>
২, পাইথন ২ তে, বিপরীত কয়েনগুলিকে প্যাচ করা যায়, যার ফলে এই বিভ্রান্তিকর (কিন্তু কার্যকর) অভিব্যক্তিটি তৈরি হয়। ২ থেকে ৩ যথেষ্ট স্মার্ট যে এই প্যাচড কলটিকে rep () ফাংশনে রূপান্তর করতে পারে।

  • try...except বাক্য

পাইথন ২ থেকে পাইথন ৩-এ, ব্যতিক্রম ক্যাপচার করার ব্যাকরণ কিছুটা পরিবর্তিত হয়েছে।

NotesPython 2Python 3
try:<br>  import mymodule<br>except ImportError, e<br>  passtry:<br>  import mymodule<br>except ImportError as e:<br>  pass
try:<br>  import mymodule<br>except (RuntimeError, ImportError), e<br>  passtry:<br>  import mymodule<br>except (RuntimeError, ImportError) as e:<br>  pass
try:<br>  import mymodule<br>except ImportError:<br>  passno change
try:<br>  import mymodule<br>except:<br>  passno change

১। পাইথন ২ এর ব্যতিক্রম প্রকারের পরে কমা যোগ করার তুলনায়, পাইথন ৩ একটি নতুন কীওয়ার্ড ব্যবহার করে, as。
২। as কীওয়ার্ডটি একই সময়ে একাধিক ধরণের অস্বাভাবিকতা ধরার ক্ষেত্রেও ব্যবহার করা যেতে পারে।
৩. আপনি যদি একটি ব্যতিক্রম ধরেন, কিন্তু ব্যতিক্রমের বস্তুর কাছে যেতে আগ্রহী না হন, তবে পাইথন ২ এবং পাইথন ৩ এর সিনট্যাক্স একই রকম।
৪. একইভাবে, আপনি যদি একটি বীমা পদ্ধতি ব্যবহার করেন (ফ্যালব্যাক) সব ব্যতিক্রম ধরতে, পাইথন ২ এবং পাইথন ৩ এর বানান একই রকম ৷
৫। মডিউল আমদানি করার সময় (বা অন্যান্য বেশিরভাগ ক্ষেত্রে) আপনি অবশ্যই এই পদ্ধতিটি ব্যবহার করবেন না (উপরে উল্লিখিত ফলব্যাকটি উল্লেখ করুন) । অন্যথায়, প্রোগ্রামটি কীবোর্ড ইন্টারপুট (যদি ব্যবহারকারী Ctrl-C চাপলে প্রোগ্রামটি বিরতি দেয়) এর মতো ব্যতিক্রমগুলি ধরতে পারে, যার ফলে ডিবাগিং আরও কঠিন হয়ে যায়।

  • raise বাক্য

পাইথন ৩-এ, কাস্টম ব্যতিক্রমের ব্যাকরণে সামান্য পরিবর্তন করা হয়েছে।

NotesPython 2Python 3
raise MyExceptionunchanged
raise MyException,'error message'raise MyException('error message')
raise MyException,'error message', a_tracebackraise MyException('errormessage').with_traceback(a_traceback)
raise 'error message'unsupported

১। ব্যতিক্রমটি ব্যবহারকারীর দ্বারা কাস্টমাইজ করা ত্রুটি বার্তা ছাড়াই সরানো হয়েছে, এই সরলীকৃত ফর্মটিতে, ব্যাকরণটি পরিবর্তন হয়নি।
২, যখন আপনি একটি ব্যতিক্রমকে ব্যবহারকারীর কাস্টমাইজড ত্রুটি বার্তা দিয়ে ফেলে দিতে চান, তখন পরিবর্তনটি স্পষ্ট হয়। পাইথন ২ ব্যতিক্রম এবং ত্রুটি বার্তা আলাদা করতে একটি কমা ব্যবহার করে; পাইথন ৩ ত্রুটি বার্তাটিকে ব্যতিক্রম হিসাবে প্যারামিটার হিসাবে পাস করে।
৩। পাইথন ২ একটি জটিল ব্যতিক্রমকে স্ট্যাক ট্রেস করার জন্য একটি জটিল ব্যাকরণ সমর্থন করে। পাইথন ৩ তে আপনি এটি করতে পারেন, কিন্তু ব্যাকরণটি সম্পূর্ণ ভিন্ন।
৪. পাইথন ২ এ, আপনি একটি ব্যতিক্রম ছাড়া একটি ব্যতিক্রম বর্ষণ করতে পারেন, কেবলমাত্র একটি ব্যতিক্রম বার্তা। পাইথন ৩ এ, এই ফর্মটি আর সমর্থিত নয়। ২-টু-৩ আপনাকে সতর্ক করবে যে এটি স্বয়ংক্রিয়ভাবে এই সিনট্যাক্সটি ঠিক করতে পারে না।

  • জেনারেটরের throw পদ্ধতি

পাইথন ২-এ, জেনারেটরের একটি থ্রো () পদ্ধতি রয়েছে। a_generator.throw () কলটি জেনারেটরটি স্থগিত হওয়ার সময় একটি ব্যতিক্রম ফেলে দেয় এবং তারপরে জেনারেটর ফাংশন দ্বারা নেওয়া পরবর্তী মানটি ফেরত দেয়। পাইথন ৩-এ, এই বৈশিষ্ট্যটি এখনও উপলব্ধ, তবে ব্যাকরণগতভাবে কিছুটা আলাদা।

NotesPython 2Python 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

১. সহজ ভাষায়, জেনারেটরটি ব্যতিক্রমগুলি ফেলে দেয় যা ব্যবহারকারীর দ্বারা কাস্টমাইজ করা ত্রুটি বার্তা বহন করে না। এই ক্ষেত্রে, পাইথন ২ থেকে পাইথন ৩ এর ব্যাকরণগতভাবে কোনও পরিবর্তন নেই।
২। যদি জেনারেটর একটি ব্যতিক্রম ফেলে দেয় যা ব্যবহারকারীর নিজস্ব ত্রুটি বার্তা নিয়ে আসে, তাহলে আপনাকে এই ত্রুটি বার্তার স্ট্রিংটি () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () ()
৩, পাইথন ২ শুধুমাত্র ব্যতিক্রমী তথ্যের ব্যতিক্রমগুলিকে সমর্থন করে। পাইথন ৩ এই ব্যতিক্রমী ব্যতিক্রমগুলিকে সমর্থন করে না এবং ২-টু-৩ একটি সতর্কতা বার্তা প্রদর্শন করে যা আপনাকে এই কোডটি ম্যানুয়ালি ঠিক করতে বলে।

  • গ্লোবাল ফাংশন xrange

পাইথন ২ এ, একটি নির্দিষ্ট পরিসরের মধ্যে সংখ্যা পেতে দুটি উপায় রয়েছেঃ range (), যা একটি তালিকা ফেরত দেয়, এবং range (), যা একটি iterator ফেরত দেয়। পাইথন ৩ এ, range (), যা একটি iterator ফেরত দেয়, xrange (), আর নেই।

NotesPython 2Python 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) হিসাবে ফেরত দেয় এবং তালিকা নয়।

  • গ্লোবাল ফাংশন raw_input (() এবং input (())

পাইথন ২-এ দুটি গ্লোবাল ফাংশন রয়েছে যা কমান্ড লাইনে ব্যবহারকারীর ইনপুটের জন্য অনুরোধ করে। প্রথমটি বলা হয় ইনপুট (), যা ব্যবহারকারীর জন্য একটি পাইথন এক্সপ্রেশন টাইপ করার জন্য অপেক্ষা করে (), এবং তারপরে ফলাফলটি ফেরত দেয়। দ্বিতীয়টি বলা হয় কাঁচা_ইনপুট (), যা ব্যবহারকারী কী প্রবেশ করে তা ফেরত দেয়। এটি নতুনদের জন্য খুব বিভ্রান্তিকর, এবং এটি পাইথন ভাষার একটি চিংড়ি চিংড়ি হিসাবে ব্যাপকভাবে দেখা হয়।

NotesPython 2Python 3
raw_input()input()
raw_input('prompt')input('prompt')
input()eval(input())

১। সরল রূপ, raw_input ((() কে ইনপুট ((() তে প্রতিস্থাপন করা হয়েছে।
২, পাইথন ২ তে, raw_input (()) ফাংশনটি একটি পয়েন্টারকে একটি পয়েন্টার হিসাবে নির্দিষ্ট করতে পারে। পাইথন ৩ এ এই বৈশিষ্ট্যটি সংরক্ষিত রয়েছে।
৩. আপনি যদি সত্যিই ব্যবহারকারীকে একটি পাইথন এক্সপ্রেশন টাইপ করার জন্য অনুরোধ করতে চান, তাহলে আপনি ইনপুট () ফাংশনটি কল করে এবং ফেরত মানটি ইভাল () () তে পাঠিয়ে ফলাফলটি গণনা করতে পারেন।

  • ফাংশন সম্পত্তি

পাইথন ২ এ, ফাংশনটির কোডটি ফাংশনটির নিজস্ব বিশেষ বৈশিষ্ট্যগুলি অ্যাক্সেস করতে পারে। পাইথন ৩ এ, সামঞ্জস্যের জন্য, এই বিশেষ বৈশিষ্ট্যগুলির নামকরণ করা হয়েছে।

NotesPython 2Python 3
a_function.func_namea_function._name_
a_function.func_doca_function._doc_
a_function.func_defaultsa_function._defaults_
a_function.func_dicta_function._dict_
a_function.func_closurea_function._closure_
a_function.func_globalsa_function._globals_
a_function.func_codea_function._code_

1、name প্রোপার্টি ((মূল function_name) ফাংশনের নাম ধারণ করে।
2、doc প্রোপার্টিটি ((originalfuncdoc) আপনার ফাংশন সোর্স কোডে সংজ্ঞায়িত ডকুমেন্ট স্ট্রিং ((docstring) ধারণ করে
3、__defaults__property ((মূল function_defaults) হল একটি ট্যাগলাইট যা প্যারামিটারের ডিফল্ট মান সংরক্ষণ করে।
4、__dict__attribute ((মূল function_dict) একটি নামস্থান যা কোনো ফাংশনের নামের সাথে যুক্ত।
5、__closure__property ([[:en:originalfunc_closure]]) হলো একটি cell অবজেক্টের একটি ট্যাগোমেট যা একটি ফাংশনকে [[:en:free variable]] এর সাথে আবদ্ধ করে।
6、__globals__property ((মূল function_globals) হল একটি মডিউল গ্লোবাল নামস্থানের একটি রেফারেন্স, ফাংশন নিজেই এই নামস্থানে সংজ্ঞায়িত করা হয়েছে।
7、__code__property ((originalfunc_code) একটি কোড অবজেক্ট, যা কম্পাইল করা ফাংশনলিটিকে নির্দেশ করে।

  • I/O পদ্ধতি xreadlines

পাইথন ২-এ, ফাইল অবজেক্টের একটি xreadlines () পদ্ধতি রয়েছে যা একটি ইরেক্টর ফেরত দেয় যা ফাইলের একটি লাইন একবার পড়ে। এটি বিশেষত ফর লুপের ক্ষেত্রে কার্যকর। আসলে, পাইথন ২-এর পরবর্তী সংস্করণগুলি ফাইল অবজেক্টের মধ্যে এই বৈশিষ্ট্যটি যুক্ত করেছে।

পাইথন ৩ এ, xreadlines ((() পদ্ধতি আর ব্যবহার করা যায় না। 2to3 সহজ পরিস্থিতি সমাধান করতে পারে, তবে কিছু প্রান্তের ক্ষেত্রে ম্যানুয়াল হস্তক্ষেপ প্রয়োজন।

NotesPython 2Python 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-এর তুলনায় অনেক বেশি কার্যকরী।

  • lambda ফাংশন যা একাধিক প্যারামিটারের পরিবর্তে অ্যাট্রু ব্যবহার করে

পাইথন ২-এ আপনি একটি অ্যানোনিম ল্যাম্বদা ফাংশন (anonymous lambda function) সংজ্ঞায়িত করতে পারেন, যা একটি প্যারামিটার হিসাবে একটি মট্রোর উপাদান সংখ্যা নির্দিষ্ট করে ফাংশনটিকে কার্যত একাধিক প্যারামিটার গ্রহণ করতে সক্ষম করে। প্রকৃতপক্ষে, পাইথন ২ এর ব্যাখ্যাকারী এই মট্রোটিকে নামযুক্ত আর্গুমেন্টগুলিতে আনপ্যাক করে, এবং তারপরে আপনি ল্যাম্বদা ফাংশনে তাদের নাম দিয়ে উল্লেখ করতে পারেন। পাইথন ৩-এ আপনি এখনও একটি মট্রোটি ল্যাম্বদা ফাংশনের প্যারামিটার হিসাবে পাস করতে পারেন, তবে পাইথন ব্যাখ্যাকারী এটিকে নামযুক্ত প্যারামিটারে বিশ্লেষণ করবে না। আপনাকে পজিশনাল ইনডেক্স (positional index) দিয়ে প্রতিটি প্যারামিটার উল্লেখ করতে হবে।

NotesPython 2Python 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+ zlambda x_y_z: x_y_z[0]+x_y_z[1][0]+ x_y_z[1][1]
lambda x, y, z: x+y + zunchanged

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 হল ক্লাস নিজেই। পাইথন ৩ এ, এই বৈশিষ্ট্যগুলি নামকরণের কনভেনশন অনুসারে নামকরণ করা হয়েছে।

NotesPython 2Python 3
aClassInstance.aClassMethod.im_funcaClassInstance.aClassMethod._func_
aClassInstance.aClassMethod.im_selfaClassInstance.aClassMethod._self_
aClassInstance.aClassMethod.im_classaClassInstance.aClassMethod._self_._class_
  • nonzero বিশেষ পদ্ধতি

পাইথন ২ এ, আপনি আপনার নিজস্ব ক্লাস তৈরি করতে পারেন এবং তাদের বুল-উপরের (boolean context) ব্যবহারের জন্য ব্যবহার করতে পারেন। উদাহরণস্বরূপ, আপনি এই ক্লাসকে ইনস্ট্যান্ট করতে পারেন এবং এই ইনস্ট্যান্ট অবজেক্টটি একটি if বাক্যে ব্যবহার করতে পারেন। এই উদ্দেশ্যে, আপনি একটি বিশেষ__nonzero__() পদ্ধতি, যার রিটার্ন মান হল True অথবা False, যখন ইন্সট্যান্স অবজেক্টটি বুলের উপর প্রসঙ্গের মধ্যে থাকে তখন এই পদ্ধতিটি ডাকা হয়। পাইথন ৩ এ, আপনি এখনও একই কাজ করতে পারেন, কিন্তু এই বিশেষ পদ্ধতিটির নাম পরিবর্তন করা হয়েছে__bool__()。

NotesPython 2Python 3

|①|class A:<br>  def nonzero(self):<br>  pass|class A:<br>  def bool(self):<br>  pass
|②|class A:<br>  def nonzero(self, x, y):<br>  pass|no change|
১। যখন বুলের উপর একটি ক্লাস অবজেক্ট ব্যবহার করা হয়, তখন পাইথন ৩ কল করে__bool__(), কিন্তু না__nonzero__()。
2। যাইহোক, যদি আপনি একটি সংজ্ঞায়িত আছে যে দুটি প্যারামিটার ব্যবহার করে__nonzero__() পদ্ধতি, 2to3 স্ক্রিপ্ট অনুমান করবে যে আপনি যে পদ্ধতিটি সংজ্ঞায়িত করেছেন তার অন্য কোন ব্যবহার আছে, তাই কোডটি পরিবর্তন করা হবে না।

  • অষ্টধারার প্রকার

পাইথন ২ এবং পাইথন ৩ এর মধ্যে, অক্ষর সংখ্যা সংজ্ঞায়িত করার জন্য ব্যাকরণ সামান্য পরিবর্তিত হয়েছে।

NotesPython 2Python 3
x = 0755x = 0o755
  • sys.maxint

লম্বা এবং পূর্ণরূপে একত্রিত হওয়ার কারণে, sys.maxint ধ্রুবকটি আর সঠিক নয়। কিন্তু যেহেতু এই মানটি নির্দিষ্ট প্ল্যাটফর্মের ক্ষমতা সনাক্তকরণের জন্য দরকারী, তাই এটি পাইথন 3 দ্বারা সংরক্ষিত এবং sys.maxsize নামকরণ করা হয়।

NotesPython 2Python 3
from sys importmaxintfrom sys importmaxsize
a_function(sys.maxint)a_function(sys.maxsize)

১, maxint থেকে maxsize।
২. সব sys.maxint sys.maxsize <unk> হয়ে গেছে

  • গ্লোবাল ফাংশন callable ())

পাইথন ২ এ, আপনি একটি বস্তুকে কলযোগ্য কিনা তা পরীক্ষা করতে বিশ্বব্যাপী ফাংশন callable ((() ব্যবহার করতে পারেন। পাইথন ৩ এ, এই বিশ্বব্যাপী ফাংশনটি বাতিল করা হয়েছে। একটি বস্তু কলযোগ্য কিনা তা পরীক্ষা করার জন্য, আপনি বিশেষ পদ্ধতি পরীক্ষা করতে পারেন__call__() এর অস্তিত্ব

NotesPython 2Python 3
callable(anything)hasattr(anything,'_call_')
  • গ্লোবাল ফাংশন (zip)

পাইথন ২-এ, গ্লোবাল ফাংশন zip ((() যে কোনও একাধিক ক্রমকে প্যারামিটার হিসাবে ব্যবহার করতে পারে, এটি একটি মৌলিক তালিকা প্রদান করে। প্রথম মৌলিকটি প্রতিটি ক্রমের প্রথম উপাদানকে ধারণ করে; দ্বিতীয় মৌলিকটি প্রতিটি ক্রমের দ্বিতীয় উপাদানকে ধারণ করে; ধারাবাহিকভাবে এগিয়ে যায়। পাইথন ৩-এ, zip ((() একটি সূচককে ফেরত দেয়, তালিকা নয়।

NotesPython 2Python 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 স্ক্রিপ্টগুলি এই পরিস্থিতিগুলি সনাক্ত করবে এবং আপনার কোডে কোনও পরিবর্তন করবে না।

  • স্ট্যান্ডার্ডError ব্যতিক্রম

পাইথন ২ এ, স্ট্যান্ডার্ডএরের হল স্টপআইটারেশন, জেনারেটরএক্সিট, কীবোর্ড ইন্টারপুট, সিস্টেমএক্সিট বাদে অন্যান্য সমস্ত বিল্ট-ইন ব্যতিক্রমের বেসক্লাস। পাইথন ৩ এ, স্ট্যান্ডার্ডএরের বাতিল করা হয়েছে; ব্যতিক্রম ব্যবহার করে প্রতিস্থাপন করা হয়েছে।

NotesPython 2Python 3
x =StandardError()x =Exception()
x =StandardError(a, b, c)x =Exception(a, b, c)
  • types মডিউলের ধ্রুবক

types মডিউলটিতে বিভিন্ন ধ্রুবক রয়েছে যা আপনাকে কোনও বস্তুর ধরণ নির্ধারণে সহায়তা করে। পাইথন ২ এ, এটি সমস্ত মৌলিক ডেটা প্রকারের প্রতিনিধিত্বকারী ধ্রুবক ধারণ করে, যেমন dict এবং int। পাইথন ৩ এ, এই ধ্রুবকগুলি ইতিমধ্যে বাতিল করা হয়েছে। কেবলমাত্র মৌলিক ধরণের নাম ব্যবহার করে এটি প্রতিস্থাপন করা প্রয়োজন।

NotesPython 2Python 3
types.UnicodeTypestr
types.StringTypebytes
types.DictTypedict
types.IntTypeint
types.LongTypeint
types.ListTypelist
types.NoneTypetype(None)
types.BooleanTypebool
types.BufferTypememoryview
types.ClassTypetype
types.ComplexTypecomplex
types.EllipsisTypetype(Ellipsis)
types.FloatTypefloat
types.ObjectTypeobject
types.NotImplementedTypetype(NotImplemented)
types.SliceTypeslice
types.TupleTypetuple
types.TypeTypetype
types.XRangeTyperange

types.StringType বাইট হিসেবে ম্যাপ করা হয়েছে, str নয়, কারণ Python 2 এর strings আসলে a sequence of bytes যেগুলো কোন অক্ষর দিয়ে কোড করা হয়েছে।

  • গ্লোবাল ফাংশন ইনস্ট্যান্স

isinstance() ফাংশন একটি বস্তুর একটি নির্দিষ্ট শ্রেণী (class) বা প্রকার (type) এর একটি উদাহরণ কিনা তা পরীক্ষা করে। পাইথন ২ এ, আপনি প্রকার (types) থেকে তৈরি একটি টাইটালকে isinstance () ফাংশনটিতে প্রেরণ করতে পারেন এবং যদি বস্তুটি টাইটালের যেকোন প্রকারের হয় তবে ফাংশনটি True ফেরত দেয়। পাইথন ৩ এ, আপনি এখনও এটি করতে পারেন, তবে এটি একটি প্রকারের ব্যবহারের জন্য সুপারিশ করা হয় না যা প্যারামিটার হিসাবে দুইবার প্রেরণ করা হয়।

NotesPython 2Python 3
isinstance(x,(int,float,int))isinstance(x,(int,float))
  • basestring ডাটা টাইপ

পাইথন ২ এ দুটি স্ট্রিং টাইপ রয়েছেঃ ইউনিকোড কোডেড স্ট্রিং এবং নন-ইউনিকোড কোডেড স্ট্রিং। তবে আসলে আরও একটি টাইপ রয়েছে, বেসস্ট্রিং। এটি একটি বিমূর্ত ডেটা টাইপ, str এবং ইউনিকোড টাইপের একটি সুপারক্লাস। এটি সরাসরি কল করা বা ইনস্ট্যান্স করা যায় না, তবে আপনি এটিকে ইনস্ট্যান্সের প্যারামিটার হিসাবে ব্যবহার করতে পারেন যাতে কোনও অবজেক্ট ইউনিকোড স্ট্রিং বা নন-ইউনিকোড স্ট্রিং কিনা তা পরীক্ষা করতে পারে। পাইথন ৩ এ কেবলমাত্র একটি স্ট্রিং টাইপ রয়েছে, তাই বেসস্ট্রিংয়ের আর প্রয়োজন নেই।

NotesPython 2Python 3
isinstance(x, basestring)isinstance(x, str)
  • itertools মডিউল

পাইথন ২.৩ itertools মডিউল চালু করেছে, যা গ্লোবাল ফাংশন zip ((), map ((), filter (() এর ভেরিয়েন্ট (() সংজ্ঞায়িত করে, এই ভেরিয়েন্টগুলির রিটার্ন টাইপটি একটি তালিকা নয়, বরং একটি ইটোরিয়াল। পাইথন ৩ এ, এই গ্লোবাল ফাংশনগুলির রিটার্ন টাইপটি মূলত একটি ইটোরিয়াল, তাই এই itertools এর ভেরিয়েন্ট ফাংশনগুলি বাতিল করা হয়েছে।

NotesPython 2Python 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, foofrom itertools import foo

1। জিওগ্রাফিক zip () ফাংশন ব্যবহার করুন, itertools.izip () এর পরিবর্তে।
২। map () ব্যবহার করুন itertools.imap () এর পরিবর্তে।
৩, itertools.ifilter (ইটারটুলস.আইফিল্টার) ফিল্টার (ইটারটুলস.আইফিল্টার) হয়ে গেছে।
৪। itertools মডিউলটি পাইথন ৩ এ রয়েছে, এটি কেবলমাত্র সেই ফাংশনগুলিকে আর অন্তর্ভুক্ত করে না যা গ্লোবাল নেমস্পেসে স্থানান্তরিত হয়েছে। ২-টু-৩ স্ক্রিপ্টগুলি যথেষ্ট বুদ্ধিমানভাবে অপসারণ করতে পারে যেগুলি আর দরকারী নয় এবং অন্যান্য আমদানি বাক্যাংশের অখণ্ডতা বজায় রাখে।

  • sys.exc_type, sys.exc_value, sys.exc_traceback

ব্যতিক্রমগুলি মোকাবেলার জন্য, sys মডিউলটিতে তিনটি ভেরিয়েবল রয়েছে যা আপনি অ্যাক্সেস করতে পারেনঃ sys.exc_type, sys.exc_value, sys.exc_traceback। (আসলে এগুলি পাইথন 1 এর সময় থেকেই ছিল) পাইথন 1.5 থেকে, নতুন sys.exc_info প্রকাশের কারণে, এই তিনটি ভেরিয়েবল ব্যবহার করা আর সুপারিশ করা হয় না, এটি উপরের তিনটি উপাদান সহ একটি মেটাসেট। পাইথন 3 এ, এই তিনটি ভেরিয়েবল অবশেষে আর বিদ্যমান নেই; এর অর্থ হল আপনাকে sys.exc_info ব্যবহার করতে হবে।

NotesPython 2Python 3
sys.exc_typesys.exc_info()[0]
sys.exc_valuesys.exc_info()[1]
sys.exc_tracebacksys.exc_info()[2]
  • অ্যালগরিদমের তালিকা পার্স করা

পাইথন ২ এ, যদি আপনাকে একটি পারফরম্যান্সের তালিকা লিখতে হয়, যা একটি পারফরম্যান্সের মাধ্যমে যায়, তবে আপনাকে প্যারামিটার মানগুলির চারপাশে বন্ধনী যুক্ত করতে হবে না। পাইথন ৩ এ, এই বন্ধনীগুলি আবশ্যক।

NotesPython 2Python 3
[i for iin 1,2][i for iin(1,2)]
  • os.getcwdu () ফাংশন

পাইথন ২-এ os.getcwd (() নামে একটি ফাংশন রয়েছে যা বর্তমান ওয়ার্কিং ডিরেক্টরিটিকে একটি অ-ইউনিকোড স্ট্রিং হিসাবে ফেরত দেয়। যেহেতু আধুনিক ফাইল সিস্টেমগুলি ডাইরেক্টরির নামগুলিকে হিট কোড করতে পারে, তাই পাইথন ২.৩ os.getcwdu (() ফাংশনটি চালু করেছে। os.getcwdu (() ফাংশনটি বর্তমান ওয়ার্কিং ডিরেক্টরির ইউনিকোড কোডেড স্ট্রিংগুলি ফেরত দেয়। পাইথন ৩-এ, কেবলমাত্র একটি স্ট্রিং টাইপ (ইউনিকোড টাইপের) রয়েছে, তাই আপনার কেবলমাত্র os.getcwd (() দরকার।

NotesPython 2Python 3
os.getcwdu()os.getcwd()
  • মেটা ক্লাস

পাইথন ২ এ, আপনি মেটা ক্লাসের একটি বিবৃতিতে মেটা ক্লাসের একটি প্যারামিটার সংজ্ঞায়িত করতে পারেন, অথবা একটি বিশেষ ক্লাস স্তর (ক্লাস-লেভেল) সংজ্ঞায়িত করতে পারেন।metaclass প্রোপার্টি, একটি ট্যাগ ক্লাস তৈরি করার জন্য।__metaclass_এই বৈশিষ্ট্যটি বাতিল করা হয়েছে।

NotesPython 2Python 3
class C(metaclass=PapayaMeta):<br>  passunchanged
class Whip:<br>  _metaclass_ = PapayaMetaclass Whip(metaclass=PapayaMeta):<br>  pass
class C(Whipper, Beater):<br>  _metaclass_ = PapayaMetaclass C(Whipper,Beater,metaclass=PapayaMeta):<br>  pass

১। ক্লাস ঘোষণার সময় মেটাক্লাস প্যারামিটার ঘোষনা করা হয়, যা পাইথন ২ এবং পাইথন ৩-এ একই কাজ করে।
২, ক্লাসের সংজ্ঞায় metaclass বৈশিষ্ট্যটি ঘোষণা করুন যা Python 2 এ কার্যকর কিন্তু Python 3 এ আর কার্যকর নয়।
3, 2to3 একটি কার্যকর ক্লাস বিবৃতি তৈরি করতে সক্ষম, এমনকি যদি ক্লাসটি একাধিক পিতামাতার ক্লাস থেকে উত্তরাধিকার লাভ করে।

  • কোড শৈলী সম্পর্কে

নীচে তালিকাভুক্ত ফিক্সগুলি প্রকৃত ফিক্স নয়। অর্থাৎ, এগুলি কেবল কোডের স্টাইলের বিষয়, কোডের মূল বিষয় নয়। তবে পাইথনের বিকাশকারীরা কোডের স্টাইলটি যথাসম্ভব সামঞ্জস্যপূর্ণ করার ক্ষেত্রে অত্যন্ত আগ্রহী। এটি করার জন্য, পাইথন কোড স্টাইলের জন্য একটি সরকারী নির্দেশিকা রয়েছে।

  • set{"আক্ষরিক মান"}{"আক্ষরিক"}{"প্রকাশিত"}

    পাইথন ২-এ, একটি আক্ষরিক মান সেট সংজ্ঞায়িত করার একমাত্র উপায় হল set{a_sequence} কল করা। পাইথন ৩-এ এটি এখনও কার্যকর, তবে নতুন চিহ্নিতকরণ চিহ্ন ব্যবহার করেঃ আক্ষরিক নোটেশনঃ বড় বন্ধনী ({}) একটি পরিষ্কার পদ্ধতি। এই পদ্ধতিটি ফাঁকা সেট ছাড়াও কার্যকর, কারণ অভিধানগুলিও বড় বন্ধনী দিয়ে চিহ্নিত করা হয়, তাই {} একটি ফাঁকা অভিধানকে বোঝায়, একটি ফাঁকা সেট নয়।

2to3 স্ক্রিপ্ট ডিফল্টরূপে set () আক্ষরিক মান সংশোধন করে না। এই বৈশিষ্ট্যটি চালু করতে, কমান্ড লাইনটি 2to3 কল করার সময় -f set_literal প্যারামিটারটি নির্দিষ্ট করুন।

NotesBeforeAfter
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 প্যারামিটারটি নির্দিষ্ট করুন।

NotesBeforeAfter
x =buffer(y)x =memoryview(y)
  • কমা চিহ্নের চারপাশের ফাঁকা জায়গা ((স্পষ্ট)

    যদিও পাইথন ইনডেনটিং এবং আউটডেনটিংয়ের জন্য ফাঁকগুলির জন্য কঠোর, তবে অন্যান্য ক্ষেত্রে ফাঁক ব্যবহারের জন্য পাইথন খুব অবাধ। তালিকা, মটরস, সংগ্রহ এবং অভিধানগুলিতে, ফাঁকগুলি কমা চিহ্নের আগে বা পরে উপস্থিত হতে পারে, এটি কোনও খারাপ প্রভাব ফেলবে না। তবে, পাইথন কোড স্টাইল গাইড ম্যানুয়ালটি বলেছে যে কমা চিহ্নের আগে কোনও ফাঁক থাকতে পারে না এবং কমা চিহ্নের পরে একটি ফাঁক থাকা উচিত। যদিও এটি কেবলমাত্র একটি নান্দনিক বিবেচনার জন্য (কোডটি এখনও ঠিকঠাক কাজ করতে পারে, পাইথন 2 এবং পাইথন 3 এও), তবে 2 থেকে 3 স্ক্রিপ্টগুলি আপনার জন্য এই মেরামতটি ম্যানুয়ালের মান অনুসারে করতে পারে।

2to3 স্ক্রিপ্টটি ডিফল্টরূপে কমান্ডের চারপাশে ফাঁকা স্থানগুলি সংশোধন করে না। এই বৈশিষ্ট্যটি চালু করতে, কমান্ড লাইনটি 2to3 কল করার সময় -f wscomma প্যারামিটারটি নির্দিষ্ট করুন।

NotesBeforeAfter
a ,ba, b
{a :b}{a: b}
  • প্রচলিত (Common idioms)

    পাইথন কমিউনিটিতে অনেকগুলি প্রথা প্রতিষ্ঠিত হয়েছে। কিছু আছে যেমন while 1: loop, যা পাইথন 1 এর সাথে সম্পর্কিত। পাইথন ২.৩ অবধি সত্যিকার অর্থে বুল টাইপ ছিল না, তাই বিকাশকারীরা পূর্বে 1 এবং 0 এর বিকল্প ব্যবহার করেছিলেন।

2to3 স্ক্রিপ্টটি ডিফল্টরূপে এই নিয়মগুলির জন্য মেরামত করে না। এই বৈশিষ্ট্যটি চালু করতে, কমান্ড লাইনটি 2to3 কল করার সময় -f idioms প্যারামিটারটি নির্দিষ্ট করুন।

NotesBeforeAfter
while 1:<br>  do_stuff()while True:<br>  do_stuff()
type(x) == Tisinstance(x, T)
type(x) is Tisinstance(x, T)
a_list = list(a_sequence)a_list = sorted(a_sequence)
a_list.sort()do_stuff(a_list)
do_stuff(a_list)

পুনর্নির্দেশিতসিএসডিএন ব্লগ

কিভাবে Python 2 এর কোডকে Python 3 এর কোডে রূপান্তর করবেন

কিভাবে Python 2.x এর কোডকে Python 3.x এর কোডে রূপান্তর করা যায়।
Python 2.x কোডকে Python 3.x কোডে রূপান্তর করার উপায়

  • 1. নিজে নিজে পরিবর্তন করুন

এটা খুব বেশি বলার কিছু নয়, যদি এটি শুধুমাত্র কয়েকটি ফাংশনকে প্রভাবিত করে, যেমন print ইত্যাদি।

তাই আপনি আপনার নিজের কোড পরিবর্তন করতে পারেন।

  • ২. পাইথনের অন্তর্নির্মিত স্ক্রিপ্ট টুল ব্যবহার করে স্বয়ংক্রিয়ভাবে রূপান্তর করুন

পাইথন ২.x সংস্করণ, যেমন আমি পাইথন ২.৭.২ ইনস্টল করেছি, এটি উইন্ডোজ ডাউনলোড এবং ইনস্টল করার পরে কিছু দরকারী সরঞ্জাম নিয়ে আসে।

এর মধ্যে একটি হচ্ছে 2to3.py, যা আপনাকে Python 2.x কোডকে Python 3.x কোডে রূপান্তর করতে সাহায্য করবে।

এর অবস্থানঃ পাইথন ইনস্টল করা রুট ডিরেক্টরি\Python27\Tools\Scripts\2to3.py

কিভাবে 2to3.py ব্যবহার করে Python 2.x এর কোডকে Python 3.x এর কোডে রূপান্তর করা যায়
উদাহরণস্বরূপ, আমি পাইথন ২.এক্স এর একটি পাইথন স্ক্রিপ্ট পেয়েছিঃ

D:\tmp\tmp_dev_root\python\python2_to_python3\34563264_data_from_site.py

এখন, Python 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>&nbsp;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>&nbsp;<a href="#">[email protected]</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>&nbsp;740 SW 21st Ave, Suite #310<br /> RefactoringTool: Files that were modified: RefactoringTool: 34563264_data_from_site.py

আপনি এখন দেখতে পাচ্ছেন যে 34563264_data_from_site.py কোডটি Python 3.x কোডে রূপান্তরিত হয়েছে।

এই দুইটা ফাইলের মধ্যে পার্থক্য দেখলে বুঝতে পারবেনঃ

img

বর্তমানে, 2to3.py-এর জন্য আরও ব্যবহারের জন্য, আপনি সাহায্য অনুসন্ধান করতে পারেনঃ

D:\tmp\tmp_dev_root\python\python2_to_python3>D:\tmp\WordPress\DevRoot\Python27\Tools\Scripts\2to3.py -h Usage: 2to3 [options] file|dir ... Options: -h, --help show this help message and exit -d, --doctests_only Fix up doctests only -f FIX, --fix=FIX Each FIX specifies a transformation; default: all -j PROCESSES, --processes=PROCESSES Run 2to3 concurrently -x NOFIX, --nofix=NOFIX Prevent a transformation from being run -l, --list-fixes List available transformations -p, --print-function Modify the grammar so that print() is a function -v, --verbose More verbose logging --no-diffs Don't show diffs of the refactoring -w, --write Write back modified files -n, --nobackups Don't write backups for modified files

এখানে কিছু ব্যাখ্যা দেওয়া হলঃ

(১) যদি উপরে উল্লিখিত -w প্যারামিটার না থাকে, তবে ডিফল্টরূপে কেবলমাত্র রূপান্তর প্রক্রিয়াটির সাথে সম্পর্কিত ডিফ সামগ্রীটি বর্তমান উইন্ডোতে প্রিন্ট করা হবে।

(২) -w যোগ করলে, আপনি যে পরিবর্তনটি করেছেন তা আবার আগের ফাইলে লিখতে পারবেন।

(৩) আপনি যদি একটি bak ফাইল তৈরি করতে না চান, তাহলে -n যোগ করুন।

(৪) আপনি যদি এই সমস্ত আউটপুট দেখতে না চান, তবে নো-ডিফস যোগ করুন।

অন্যদের জন্য, এটি খুব কমই বলা হয়েছে। আগ্রহীরা নিজেরাই অনুসন্ধান চালিয়ে যেতে পারেন।

উপরের 2to3 এর ব্যবহাররাস্তায়

যদি ভুল থাকে তবে দয়া করে তা জানান। ^_^

Related Recommendations
Comment
All comments (2)

    botvs用的python2?

    9 years ago

    BotVS 的回测服务器 使用的是Python 2.7版本, 对于BotVS 平台 Python2 ,Python3 都是支持的。

    9 years ago
  • 1
Forums
PINE Language
Get the app
iPhone Download
© 2015 - ∞ INVENTOR PTE LTD (SG)