تقریباً تمام پیتھون 2 پروگراموں کو پیتھون 3 کے ماحول میں مناسب طریقے سے چلانے کے لئے کچھ ترمیم کی ضرورت ہوتی ہے۔ اس تبدیلی کے عمل کو آسان بنانے کے لئے ، پیتھون 3 میں ایک 2to3 افادیت اسکرپٹ ہے جو آپ کے پیتھون 2 پروگرام کے ماخذ فائلوں کو بطور ان پٹ لیتا ہے ، اور پھر اسے خود بخود پیتھون 3 میں تبدیل کرتا ہے۔ کیس اسٹڈی: چارڈٹ کو پیتھون 3 میں پورٹ کرنا () اس اسکرپٹ کو چلانے کا طریقہ بیان کرتا ہے ، اور پھر کچھ ایسی صورتوں کی نمائش کرتا ہے جہاں یہ خود کار طریقے سے مرمت نہیں کرسکتا ہے۔ یہ اپینڈکس اس کی وضاحت کرتا ہے جو خود بخود مرمت کرسکتا ہے۔
پیتھون 2 میں ، پرنٹ ایک جملہ ہے۔ آپ جو کچھ بھی آؤٹ پٹ کرنا چاہتے ہیں ، صرف اس کو پرنٹ کی ورڈ کے پیچھے رکھیں۔ پیتھون 3 میں ، پرنٹ () ایک فنکشن ہے۔ دوسرے فنکشنوں کی طرح ، پرنٹ () آپ کو اس کے لئے پیرامیٹرز کے طور پر جو کچھ آپ آؤٹ پٹ کرنا چاہتے ہیں اس کو منتقل کرنے کی ضرورت ہے۔
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | print() | |
| ② | print 1 | print(1) |
| ③ | print 1,2 | print(1,2) |
| ④ | print 1,2, | print(1,2,end=’ ‘) |
| ⑤ | print >>sys.stderr,1,2,3 | print(1,2,3, file=sys.stderr) |
1۔ ایک خالی لائن کو آؤٹ پٹ کرنے کے لئے ، آپ کو بغیر کسی پیرامیٹر کے پرنٹ کو کال کرنے کی ضرورت ہے۔ 2، ایک علیحدہ قدر کو آؤٹ پٹ کرنے کے لئے، اس قدر کو پرنٹ () کے طور پر استعمال کرنے کی ضرورت ہے. 3، ایک خالی جگہ کے ساتھ علیحدہ دو اقدار کو آؤٹ پٹ کے لئے استعمال کریں، دو پیرامیٹرز پرنٹ () کو کال کریں. 4، اس مثال میں کچھ چالیں ہیں۔ پیتھون 2 میں ، اگر آپ کو ایک کوما (() استعمال کرتے ہیں ، تو یہ پرنٹ کے جملے کے اختتام کے طور پر ایک خالی جگہ کے ساتھ نتائج کو الگ کرے گا ، اور پھر ایک پیچھے آنے والی خالی جگہ ((trailing space) کو آؤٹ پٹ کرے گا ، اس کے بجائے کہ وہ گاڑی واپس کرے ((carriage return)) ۔ پیتھون 3 میں ، اسی طرح کا اثر حاصل کیا جاسکتا ہے end = ’ ‘ بطور ایک کلیدی الفاظ کے پیرامیٹرز پرنٹ پر منتقل کریں۔ عددی پیرامیٹر کی ڈیفالٹ ‘\n’ ہے ، لہذا آخر میں پیداوار کے نشان کو ختم کرنے کے لئے ، عددی پیرامیٹر کی قدر کو دوبارہ ترتیب دیں۔ 5۔ پیتھون 2 میں، آپ >>pipe_name نحو کا استعمال کرتے ہوئے آؤٹ پٹ کو ایک پائپ لائن میں ری ڈائریکٹ کر سکتے ہیں، جیسے sys.stderr۔ پیتھون 3 میں، آپ پائپ لائن کو پرنٹ پرنٹ پر منتقل کرکے اسی طرح کی تقریب انجام دے سکتے ہیں۔ پیرامیٹر فائل کی ڈیفالٹ std.stdout ہے، لہذا اس کی قدر کو دوبارہ ترتیب دینے سے پرنٹ پرنٹ کو ایک اور پائپ لائن میں آؤٹ پٹ کرے گا۔
پطرون 2 میں دو قسم کے سٹرنگ ٹائپ ہیں:یونیکوڈ سٹرنگاورغیر یونیکوڈ سٹرنگپیتھون 3 میں صرف ایک ہی قسم ہے:یونیکوڈ سٹرنگ。
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | u’PapayaWhip’ | ‘PapayaWhip’ |
| ② | ur’PapayaWhip\foo’ | r’PapayaWhip\foo’ |
Python 2 میں یونیکوڈ سٹرنگ Python 3 میں عام سٹرنگ ہے، کیونکہ Python 3 میں سٹرنگ ہمیشہ یونیکوڈ کی شکل میں ہوتی ہے۔ یونی کوڈ پرائمری سٹرنگ ((raw string) (((اس سٹرنگ کا استعمال کرتے ہوئے ، پیتھون خود بخود الٹا سٹرنگ کا ترجمہ نہیں کرتا ہے “”) کو بھی عام سٹرنگ کے ساتھ تبدیل کیا گیا ہے کیونکہ پیتھون 3 میں ، تمام اصل سٹرنگیں یونیکوڈ میں انکوڈ کی گئی ہیں۔
پیتھون 2 میں دو گلوبل فنکشنز ہیں جو کسی آبجیکٹ کو زبردستی اسٹرنگ میں تبدیل کرسکتے ہیں: یونیکوڈ ((() جس میں آبجیکٹ کو یونیکوڈ اسٹرنگ میں تبدیل کیا جاتا ہے ، اور str ((() جس میں آبجیکٹ کو غیر یونیکوڈ اسٹرنگ میں تبدیل کیا جاتا ہے۔ پیتھون 3 میں صرف ایک ہی اسٹرنگ ٹائپ ہے ، جو یونیکوڈ اسٹرنگ ہے ، لہذا str ((() فنکشن تمام افعال کو انجام دے سکتا ہے۔unicode() فنکشن اب پیتھون 3 میں موجود نہیں ہے۔)
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | unicode(anything) | str(anything) |
پیتھون 2 میں int اور long قسمیں ہیں جو غیر فلوٹینٹ نمبروں کے لئے تیار ہیں۔ int قسم کی زیادہ سے زیادہ قیمت sys.maxint سے زیادہ نہیں ہوسکتی ہے ، اور یہ زیادہ سے زیادہ قیمت پلیٹ فارم سے متعلق ہے۔ آپ کو اعداد کے آخر میں ایک L شامل کرکے لمبی انٹیگریٹ کی وضاحت کی جاسکتی ہے ، ظاہر ہے کہ یہ انٹیگریٹ کی نمائندگی کرنے والے عددی حد سے زیادہ ہے۔ پیتھون 3 میں ، صرف ایک انٹیگریٹ قسم int ہے ، اور زیادہ تر معاملات میں ، یہ پیتھون 2 کی لمبی انٹیگریٹ کی طرح ہے۔ چونکہ انٹیگریٹ کی دو اقسام اب موجود نہیں ہیں ، لہذا ان کو الگ کرنے کے لئے خصوصی لسانیات کا استعمال کرنے کی ضرورت نہیں ہے۔
مزید پڑھنے: پی ای پی 237: متحد لمبی اور مکمل شکل
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | x = 1000000000000L | x = 1000000000000 |
| ② | x = 0xFFFFFFFFFFFFL | x = 0xFFFFFFFFFFFF |
| ③ | long(x) | int(x) |
| ④ | type(x) is long | type(x) is int |
| ⑤ | isinstance(x,long) | isinstance(x,int) |
پیتھون 2 میں اعشاریہ لمبی عددی شکل کو پیتھون 3 میں اعشاریہ عام عددی شکل میں تبدیل کیا گیا ہے۔ پیتھون 2 میں سولہ ہندسوں کی لمبی عددی شکل کو پیتھون 3 میں سولہ ہندسوں کی عام عددی شکل میں تبدیل کیا گیا ہے۔ اس کے علاوہ، Python 3 میں، طویل اور مکمل شکلیں اب موجود نہیں ہیں، لہذا آپ کو ان کو تبدیل کرنے کی ضرورت ہے.قدرتی طور پر اصل long () فنکشن بھی نہیں ہے۔ ایک متغیر کو انٹیگریٹ میں تبدیل کرنے کے لئے ، int () فنکشن کا استعمال کیا جاسکتا ہے。 چیک کریں کہ آیا ایک متغیر عددی ہے ، اس کی ڈیٹا ٹائپ حاصل کریں ، اور اس کا موازنہ int ٹائپ ((طویل نہیں) کے ساتھ کریں۔ آپ اعداد و شمار کی قسم کی جانچ پڑتال کے لئے insinstance () فنکشن بھی استعمال کرسکتے ہیں۔ ایک بار پھر ، انٹیگر کی قسم کی جانچ پڑتال کے لئے int ، نہیں ، استعمال کریں۔
پیتھون 2 کی حمایت <> بطور! = کا مترادف ہے۔ پیتھون 3 صرف! = کی حمایت کرتا ہے ، اب اس کی حمایت نہیں کی جاتی ہے۔
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | if x <> y: | if x != y: |
| ② | if x <> y<> z: | if x != y!= z: |
1۔ صرف موازنہ کریں۔ 2، نسبتا پیچیدہ تین اقدار کے درمیان موازنہ
پیتھون 2 میں ، لغت آبجیکٹ کے has_key() طریقہ یہ جانچنے کے لئے کہ کیا لغت میں کوئی خاص کلید موجود ہے ((key) Python 3 اب اس طریقہ کی حمایت نہیں کرتا آپ کو استعمال کرنے کی ضرورت ہےinآپریٹر
| Notes | Python 2 | Python 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) |
1، سب سے آسان شکل۔ 2۔ آپریٹر or کی ترجیح آپریٹر in سے کم ہے، اس لیے یہاں قوسین شامل کرنے کی ضرورت نہیں ہے۔ 3، دوسری طرف، اسی وجہ سے or کی ترجیح in سے کم ہے، یہاں قوسین شامل کرنے کی ضرورت ہے۔۔۔۔۔۔ نوٹ: یہاں کا کوڈ پچھلی لائن سے بالکل مختلف ہے۔۔۔پھیتھون پہلے x یا y کی تشریح کرے گا، اور نتیجہ x ہو گا۔۔۔۔۔ اگر x بل پر متن میں صحیح ہے) یا y۔ پھر پھیتھون چیک کرے گا کہ یہ نتیجہ a ہے یا نہیں_dictionary کی ایک چابی ) 4، آپریٹر in کی ترجیح آپریٹر + سے کم ہے، لہذا کوڈ میں اس شکل کو تکنیکی طور پر قوسین کی ضرورت نہیں ہے، لیکن 2to3 کو شامل کیا گیا ہے. 5، اس شکل میں قوسین کی ضرورت ہوتی ہے کیونکہ in کی ترجیح + سے کم ہے۔
پیتھون 2 میں ، لغت کے بہت سے طریقوں کی واپسی فہرست ہے۔ ان میں سے سب سے زیادہ استعمال ہونے والے طریقوں میں چابیاں ، اشیاء اور اقدار ہیں۔ پیتھون 3 میں ، ان تمام طریقوں کی واپسی متحرک نقطہ نظر میں تبدیل کردی گئی ہے۔ کچھ سیاق و سباق کے ماحول میں ، اس تبدیلی کا کوئی اثر نہیں ہوگا۔ اگر ان طریقوں کی واپسی کی قیمتوں کو فوری طور پر کسی دوسرے فنکشن میں منتقل کیا جاتا ہے ، اور یہ کہ یہ فنکشن پوری ترتیب میں چلتا ہے ، تو مندرجہ بالا طریقوں کی واپسی فہرست یا نقطہ نظر میں ہوگی اور اس سے کوئی فرق نہیں پڑے گا۔
| Notes | Python 2 | Python 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 |
1، list () فنکشن کا استعمال کرتے ہوئے keys () کی واپسی کی قیمت کو ایک جامد فہرست میں تبدیل کیا جاتا ہے۔ سیکیورٹی کے تحفظات کے لئے ، 2to3 ممکنہ طور پر غلطی کی اطلاع دے سکتا ہے۔ اس طرح کا کوڈ موثر ہے ، لیکن یہ نقطہ نظر کے استعمال کے لئے کم موثر ہے۔ آپ کو اس تبدیلی کے بعد کا کوڈ چیک کرنا چاہئے کہ آیا آپ کو فہرست کی ضرورت ہے یا نہیں ، شاید نقطہ نظر بھی ایسا ہی کام کرسکتا ہے۔ 2، یہ ایک اور نقطہ نظر ہے ((items کے بارے میں)) طریقہ کی فہرست میں تبدیلی ◄ 2to3 کے لئے اقدار () طریقہ کی واپسی کی قدر میں تبدیلی بھی اسی طرح ◄ 3، پیتھون 3 میں اب iterkeys ((() کو سپورٹ نہیں کیا گیا ہے۔ اگر ضروری ہو تو ، iter ((() کا استعمال کریں تاکہ keys ((() کی واپسی کی قیمت کو ایک iterator میں تبدیل کیا جاسکے۔ 4، 2to3 اس بات کی نشاندہی کرنے کے قابل ہے کہ iterkeys () طریقہ کار کو فہرست تجزیہ میں استعمال کیا گیا ہے ، اور پھر اسے پیتھون 3 میں کیز () طریقہ کار میں تبدیل کیا گیا ہے۔ اس کی واپسی کی قیمت کو پیک کرنے کے لئے اضافی iter () استعمال کرنے کی ضرورت نہیں ہے۔ یہ کام کرتا ہے کیونکہ نقطہ نظر تکرار پذیر ہے۔ 5،2to3 یہ بھی پہچان سکتا ہے کہ keys ((() طریقہ کی واپسی کی قیمت فوری طور پر کسی دوسرے فنکشن کو دی جاتی ہے جو پوری ترتیب کو عبور کرے گا ، لہذا اس کی واپسی کی قیمت کو پہلے فہرست میں تبدیل کرنے کی ضرورت نہیں ہے۔ اس کے برعکس ، min ((() فنکشن خوشی سے منظر کو عبور کرے گا۔ یہ عمل min (((),max (((),sum (((),list (((),tuple (((),set (((),sorted (((),any ((() اور all (()) کے لئے بھی اتنا ہی موثر ہے۔
پیتھون 2 سے پیتھون 3 تک ، معیاری کیوری کے کچھ ماڈیولز کا نام تبدیل کردیا گیا ہے۔ اور کچھ باہمی وابستہ ماڈیولز کو بھی جوڑا یا دوبارہ منظم کیا گیا ہے تاکہ اس وابستگی کو زیادہ منطقی بنایا جاسکے۔
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | import httplib | import http.client |
| ② | import Cookie | import http.cookies |
| ③ | import cookielib | import http.cookiejar |
| ④ | import BaseHTTPServer import SimpleHTTPServer import CGIHttpServer |
import http.server |
http.client ماڈیول ایک بنیادی لائبریری کو لاگو کرتا ہے جس کا استعمال HTTP وسائل کی درخواست کرنے اور HTTP ردعمل کو تجزیہ کرنے کے لئے کیا جاسکتا ہے۔ http.cookies ماڈیول HTTP ہیڈر Set-Cookie کے ذریعہ بھیجے گئے کوکیز کو حاصل کرنے کے لئے ایک پیتھونک انٹرفیس فراہم کرتا ہے عام طور پر استعمال ہونے والے مقبول براؤزر کوکیز کو فائلوں کی شکل میں ڈسک پر محفوظ کرتے ہیں ، اور http.cookiejar ماڈیول ان فائلوں پر کارروائی کرسکتا ہے۔ http.server ماڈیول ایک بنیادی HTTP سرور کو لاگو کرتا ہے
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | import urllib | import urllib.request urllib.parse,urllib.error |
| ② | import urllib2 | import urllib.request urllib.error |
| ③ | import urlparse | import urllib.parse |
| ④ | import robotparser | import urllib.robotparser |
| ⑤ | from urllib import FancyURLopener from urllib import urlencode |
from urllib.request import FancyURLopener from urllib.parse import urlencode |
| ⑥ | from urllib2 import Request from urllib2 import HTTPError |
from urllib.request import Request from urllib.error import HTTPError |
پیتھون 2 میں urllib ماڈیول میں مختلف قسم کے افعال تھے ، بشمول urlopen () جو اعداد و شمار حاصل کرنے کے لئے استعمال کیا جاتا ہے ، اور یہ بھی یو آر ایل کو اس کے اجزاء میں تقسیم کرنے کے لئے مفید ہے۔ splittype () ، splithost () ، اور splituser () افعال۔ نئے urllib پیکیج میں ، یہ افعال زیادہ منطقی طور پر منظم ہیں۔ 2to3 ان افعال کے کالوں کو نئے نام کے منصوبے کے مطابق ڈھالنے میں ترمیم کرے گا۔ پیتھون 3 میں ، سابقہ urllib2 ماڈیولز کو urllib پیکیج میں ضم کردیا گیا ہے۔ اس کے علاوہ ، urllib2 میں آپ کی پسندیدہ چیزیں پیتھون 3 میں urllib ماڈیولز میں ایک بار پھر آئیں گی ، جیسے build_opener () ، درخواست آبجیکٹ ، HTTPBasicAuthHandler اور دوستوں ◄ پیتھون 3 میں urllib.parse ماڈیول میں اصل پیتھون 2 میں urlparse ماڈیول کے تمام تجزیہ افعال شامل ہیں۔ urllib.robotparse ماڈیول نے robots.txt فائل کو حل کیا۔ FancyURLopener کلاس جو HTTP ری ڈائریکٹ اور دیگر اسٹیٹس کوڈ کو ہینڈل کرتی ہے وہ پیتھون 3 میں urllib.request ماڈیول میں اب بھی کام کرتی ہے۔ درخواست کا اعتراض urllib.request میں اب بھی کام کرتا ہے ، لیکن HTTPError جیسے مستقل کو urllib.error میں منتقل کردیا گیا ہے۔ کیا میں نے ذکر کیا کہ 2to3 آپ کے فنکشن کالز کو بھی دوبارہ لکھتا ہے؟ مثال کے طور پر ، اگر آپ کے پیتھون 2 کوڈ میں urllib ماڈیول درآمد کیا گیا ہے ، اور urllib.urlopen () فنکشن کو ڈیٹا حاصل کرنے کے لئے بلایا گیا ہے ، تو 2to3 درآمد کے جملے اور فنکشن کالز کو ایک ساتھ تبدیل کرے گا۔
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | import urllib print urllib.urlopen(’http://diveintopython3.org/‘).read() | import urllib.request, urllib.parse, urllib.error print(urllib.request.urlopen(’http://diveintopython3.org/‘).read()) |
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | import dbm | import dbm.ndbm |
| ② | import gdbm | import dbm.gnu |
| ③ | import dbhash | import dbm.bsd |
| ④ | import dumbdbm | import dbm.dumb |
| ⑤ | import anydbm import whichdb |
import dbm |
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | import xmlrpclib | import xmlrpc.client |
| ② | import DocXMLRPCServer import SimpleXMLRPCServer |
import xmlrpc.server |
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | try: import cStringIO as StringIO except ImportError: import StringIO |
import io |
| ② | try: import cPickle as pickle except ImportError: import pickle |
import pickle |
| ③ | import _builtin_ | import builtins |
| ④ | import copy_reg | import copyreg |
| ⑤ | import Queue | import queue |
| ⑥ | import SocketServer | import socketserver |
| ⑦ | import ConfigParser | import configparser |
| ⑧ | import repr | import reprlib |
| ⑨ | import commands | import subprocess |
1۔پائیتھون 2 میں ، آپ عام طور پر ایسا کرتے ہیں ، پہلے سٹرنگ آئی او کو سٹرنگ آئی او کے متبادل کے طور پر درآمد کرنے کی کوشش کریں ، اور اگر یہ ناکام ہوجاتا ہے تو ، پھر سٹرنگ آئی او درآمد کریں۔ 2، پیتھون 2 میں، تیز ترین پکسلز کو درآمد کرنا بھی ایک مفید طریقہ ہے جیسا کہ اوپر بیان کیا گیا ہے۔ پیتھون 3 میں، پکسلز ماڈیول آپ کے لئے خود کار طریقے سے کام کرتا ہے، لہذا ایسا نہ کریں. 3۔ بلٹ ان ماڈیول میں گلوبل فنکشنز ، کلاسز اور مستقل استعمال ہوتے ہیں جو پوری پائیتھون زبان میں استعمال ہوتے ہیں۔ بلٹ ان ماڈیول میں کسی فنکشن کی نئی وضاحت کا مطلب یہ ہے کہ اس گلوبل فنکشن کی ہر جگہ نئی تعریف کی جاتی ہے۔ یہ زبردست لگتا ہے ، لیکن یہ بھی خوفناک ہے۔ 4، کاپی ریگ ماڈیول نے C زبان میں بیان کردہ صارف کی اپنی مرضی کے مطابق اقسام کے لئے پکسل ماڈیول کی حمایت شامل کردی ہے۔ 5، queue ماڈیول ایک پروڈیوسر صارفین کی قطار (کثیر پروڈیوسر، کثیر صارفین کی قطار) کو لاگو کرتا ہے. 6، ساکٹ سرور ماڈیول مختلف ساکٹ سرورز کو لاگو کرنے کے لئے ایک عام بنیادی کلاس فراہم کرتا ہے۔ 7، configparser ماڈیول INI-style تشکیل فائل کو حل کرنے کے لئے استعمال کیا جاتا ہے۔ 8، reprlib ماڈیول نے بلٹ ان فنکشن repr () کو دوبارہ نافذ کیا ، اور اس تار کی لمبائی پر قابو پانے کا اضافہ کیا جو اس کی نمائندگی کرتا ہے اس سے پہلے کہ اس کاٹ دیا جائے۔ 9، ذیلی عمل ماڈیول آپ کو ذیلی عمل بنانے کے لئے کی اجازت دیتا ہے، ان کے پائپ لائن سے منسلک کریں، اور پھر ان کی واپسی کی قیمتوں کو حاصل کریں.
ایک پیکیج ایک واحد ادارہ ہے جو ایک دوسرے سے وابستہ ماڈیولز کے ایک گروپ پر مشتمل ہوتا ہے۔ پیتھون 2 میں ، ایک ہی پیکیج میں ماڈیولز کے باہمی حوالہ جات کے ل you ، آپ درآمد foo یا سے foo درآمد بار کا استعمال کریں گے۔ پیتھون 2 کے ترجمان پہلے موجودہ ڈائرکٹری میں foo.py تلاش کریں گے ، اور پھر پیتھون تلاش کے راستے ((sys.path) میں تلاش کریں گے۔ پیتھون 3 میں یہ عمل تھوڑا سا مختلف ہے۔ پیتھون 3 پہلے موجودہ راستے پر تلاش نہیں کرے گا ، یہ براہ راست پیتھون کے تلاش کے راستے میں تلاش کرے گا۔ اگر آپ ایک پیکیج میں ماڈیول کو دوسرے پیکیج میں داخل کرنا چاہتے ہیں تو ، آپ کو واضح طور پر دو ماڈیولوں کے لئے متعلقہ راستے فراہم کرنے کی ضرورت ہوگی۔
اگر آپ کے پاس ایک ہی ڈائرکٹری میں ایک سے زیادہ فائلیں ہیں تو ، آپ کو مندرجہ ذیل پیکیج ملیں گے:
chardet/ | +–init.py | +–constants.py | +–mbcharsetprober.py | +–universaldetector.py
اب فرض کریں کہ universaldetector.py کو constants.py کی ایک پوری کلاس اور mbcharsetprober.py کی ایک کلاس کی ضرورت ہے۔ آپ کیا کریں گے؟
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | import constants | from .import constants |
| ② | from mbcharsetprober import MultiByteCharSetProber | from .mbcharsetprober import MultiByteCharsetProber |
1۔ جب آپ کو پیکج کے کسی اور حصے سے پورے ماڈیول کو درآمد کرنے کی ضرورت ہو تو ، نئے from .import نحو کا استعمال کریں۔ یہاں جملہ نمبر (((.) موجودہ فائل (((universaldetector.py) اور آپ جس فائل کو درآمد کرنا چاہتے ہیں (((constants.py) کے مابین متعلقہ راستے کی نشاندہی کرتا ہے۔ اس مثال میں ، یہ دونوں فائلیں ایک ہی ڈائرکٹری میں ہیں ، لہذا ایک ہی جملہ استعمال کیا گیا ہے۔ آپ پیرنٹ ڈائرکٹری (((from ..import anothermodule) یا ذیلی ڈائرکٹری سے بھی درآمد کرسکتے ہیں۔ 2۔ کسی خاص کلاس یا فنکشن کو دوسرے ماڈیول سے براہ راست اپنے ماڈیول کے نام کی جگہ میں درآمد کرنے کے لئے ، ماڈیول کے نام میں جس میں درآمد کرنے کی ضرورت ہے اس میں رشتہ دار راستہ شامل کریں ، اور آخری سلاچ کو ہٹا دیں ((slash) ۔ اس مثال میں ، mbcharsetprober.py اور universaldetector.py ایک ہی ڈائرکٹری میں ہیں ، لہذا رشتہ دار راستہ کا نام ایک جملہ ہے۔ آپ اسے پیرنٹ ڈائرکٹری ((from .. import anothermodule) یا ذیلی ڈائرکٹری میں بھی درآمد کرسکتے ہیں۔
پیتھون 2 میں، iterator کے پاس ایک next () طریقہ ہے جو تسلسل میں اگلی شق کو واپس کرتا ہے۔ یہ پیتھون 3 میں بھی کام کرتا ہے، لیکن اب ایک نیا عالمی فنکشن next () ہے جو ایک iterator کو بطور پیرامیٹر استعمال کرتا ہے۔
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | anIterator.next() | next(anIterator) |
| ② | a_function_that_returns_an_iterator().next() | next(a_function_that_returns_an_iterator()) |
|③|class A:
def next(self):
pass|class A:
def next(self):
pass|
|④|class A:
def next(self, x, y):
pass|no change |
|⑤|next = 42
for an_iterator in a_sequence_of_iterators:
an_iterator.next()|next = 42
for an_iterator in a_sequence_of_iterators:
an_iterator.next() |
1، سب سے آسان مثال، آپ اب ایک iterator کے next (() طریقہ کار کو کال نہیں کرتے ہیں، اب آپ کو ایک عالمی فنکشن next (()) میں ایک پیرامیٹر کے طور پر iterator کے خود کو منتقل.
2، اگر آپ کے پاس ایک واپسی قدر ہے تو یہ ایک فنکشن ہے جس میں ایک انڈکٹر ہے، اس فنکشن کو کال کریں اور اس کے نتیجے میں اگلے () فنکشن کے لئے پیرامیٹرز کے طور پر بھیجیں. 2 سے 3 اسکرپٹ اس تبدیلی کو صحیح طریقے سے انجام دینے کے لئے کافی ذہین ہے.
3، اگر آپ کو آپ کی اپنی کلاس کی وضاحت، اور پھر ایک iterator کے طور پر اس کا استعمال کرتے ہیں تو، پیتھون 3 میں، آپ کو ایک خاص طریقہ کی وضاحت کر سکتے ہیںnext() کے لئے.
4، اگر آپ کی تعریف کی کلاس میں صرف ایک next () ہے، یہ ایک یا زیادہ پیرامیٹرز کا استعمال کرتا ہے، 2to3 پر عملدرآمد کے دوران اسے منتقل نہیں کرے گا. یہ کلاس ایک iterator کے طور پر استعمال نہیں کیا جا سکتا، کیونکہ اس کے اگلے () طریقہ کار کے ساتھ پیرامیٹرز ہے.
5، یہ تھوڑا سا پیچیدہ ہے۔ اگر آپ کے پاس ایک مقامی متغیر ہے جس کا نام next ہے تو ، اس کی ترجیح پائیٹن 3 میں عالمی فنکشن next ((() سے زیادہ ہوگی۔ اس صورت میں ، آپ کو ایڈیٹر کے خصوصی طریقہ کار کو کال کرنے کی ضرورت ہوگی۔next() سیریز میں اگلے عنصر کے لئے۔。(یا، آپ کوڈ کو دوبارہ ترتیب دے سکتے ہیں تاکہ اس مقامی متغیر کا نام next نہ ہو، لیکن 2to3 آپ کے لئے یہ کام نہیں کرے گا۔。)
پیتھون 2 میں ، فلٹر () طریقہ ایک فہرست واپس کرتا ہے ، جو ایک فنکشن کے ذریعہ حاصل کیا جاتا ہے جس کی واپسی کی قیمت درست یا غلط ہوتی ہے۔ پیتھون 3 میں ، فلٹر () فنکشن ایک ایڈیٹر واپس کرتا ہے ، اور فہرست نہیں ہے۔
| Notes | Python 2 | Python 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 ایک فہرست () فنکشن کے ساتھ فلٹر () کو پیک کرتا ہے، جس میں فہرست () فنکشن اس کے پیرامیٹرز کے ذریعے چلتا ہے اور پھر ایک فہرست واپس کرتا ہے. 2، تاہم، اگر filter() کال کو list() میں پیک کیا گیا ہے تو، 2 سے 3 مزید کارروائی نہیں کرے گا، کیونکہ اس صورت میں filter() کی واپسی کی قیمت ایک iterator ہے یا نہیں اس سے کوئی فرق نہیں پڑتا. 3، فلٹر ((None، …) کے اس مخصوص جملے کو سنبھالنے کے لئے، 2to3 اس کال کو لسانی طور پر برابر سے فہرست تجزیہ میں تبدیل کرے گا۔ 4۔ چونکہ فور لوپ پورے سلسلے میں چلتا ہے، اس لیے مزید ترمیم کرنے کی ضرورت نہیں ہے۔ 5، جیسا کہ اوپر، کوئی ترمیم کرنے کی ضرورت نہیں ہے، کیونکہ فہرست تجزیہ پورے سلسلہ میں جاتا ہے، یہاں تک کہ اگر فلٹر () ایک iterator کو واپس کرتا ہے، تو یہ پہلے ہی فلٹر () کی طرح کام کرتا ہے جو فہرست واپس کرتا ہے.
فلٹر () کی تبدیلی کی طرح ، نقشہ () فنکشن اب ایک iterator لوٹاتا ہے۔ پیتھون 2 میں ، یہ ایک فہرست لوٹاتا ہے۔
| Notes | Python 2 | Python 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 |
1، فلٹر () کے ساتھ اسی طرح کا سلوک ، آسان ترین صورت میں ، 2to3 ایک فہرست () فنکشن کا استعمال کرتا ہے جو نقشہ () کال کو پیک کرتا ہے۔ 2، مخصوص نقشے کے لئے ((کوئی نہیں، …) نحو، فلٹر ((کوئی نہیں، …) کی طرح، 2to3 اسے ایک استعمال کرنے کے لئے تبدیل کرے گا فہرست () 3، اگر نقشے کا پہلا پیرامیٹر lambda فنکشن ہے تو ، 2to3 اس کو مساوی طور پر فہرست تجزیہ میں تبدیل کرے گا۔ 4، پورے سلسلے میں for لوپ کے لئے، کوئی تبدیلی کرنے کی ضرورت نہیں ہے۔ 5، ایک بار پھر، یہاں کوئی ترمیم کرنے کی ضرورت نہیں ہے، کیونکہ فہرست تجزیہ پورے سلسلہ میں چلتا ہے، یہاں تک کہ اگر نقشہ () کی واپسی کی قیمت فہرست کے بجائے ایک ایڈیٹر ہے تو یہ کام کر سکتا ہے.
پیتھون 3 میں، reduce ((() فنکشن کو عالمی نام کی جگہ سے ہٹا دیا گیا ہے اور اب اسے fucntools ماڈیول میں رکھا گیا ہے۔
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | reduce(a, b, c) | from functools import reduce reduce(a, b, c) |
Python 2 میں ایک گلوبل فنکشن ہے جس کا نام apply () ہے جو ایک فنکشن f اور ایک لسٹ استعمال کرتا ہے[a, b, c] بطور پیرامیٹر ، واپسی کی قیمت f ((a, b, c) ہے۔ آپ اس فنکشن کو براہ راست کال کرکے فہرست سے پہلے ایک asterisk بھی شامل کرسکتے ہیں (((*) کے طور پر پیرامیٹرز کو اس کے پاس پاس کرنے کے لئے ایک ہی کام انجام دیا گیا ہے۔ پطرون 3 میں، apply() فنکشن اب موجود نہیں ہے؛ ستارہ نشان کے استعمال کی ضرورت ہے۔
| Notes | Python 2 | Python 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] کی طرح) فنکشن کو کال کرنے کے لئے ایک asterisk شامل کریں۔ یہ پیتھون 2 میں apply ((() فنکشن کے برابر ہے۔ 2، پیتھون 2 میں، apply() فنکشن دراصل 3 پیرامیٹرز لے سکتا ہے: ایک فنکشن، ایک پیرامیٹرز کی فہرست، اور ایک لغت نامہ پیرامیٹرز ((dictionary of named arguments) ۔ پیتھون 3 میں، آپ پیرامیٹرز کی فہرست سے پہلے ایک ستارہ شامل کر سکتے ہیں (((), ڈکشنری کے نام کے پیرامیٹرز سے پہلے دو ستارے شامل کریں ((**اس کے نتیجے میں، یہ ایک ہی اثر حاصل کرنے کے لئے استعمال کیا جاتا ہے. 3، آپریٹر + یہاں استعمال کیا جاتا ہے کے طور پر منسلک فہرست کی تقریب، اس کی ترجیح آپریٹرز سے زیادہ ہے، لہذا a_list_of_args + z کے ارد گرد اضافی قوسین شامل کرنے کی ضرورت نہیں ہے۔ 4، 2to3 اسکرپٹ کافی ذہین ہے کہ وہ پیچیدہ apply () کالوں کو تبدیل کرے ، بشمول درآمد ماڈیول میں فنکشن کال کرنا۔
پیتھون 2 میں ، آپ کو ایک تار پر intern () فنکشن کا استعمال کرتے ہوئے اس کی حد بندی کرنے کی اجازت دی جاسکتی ہے تاکہ اس کی کارکردگی کو بہتر بنایا جاسکے۔ پیتھون 3 میں ، intern () فنکشن کو sys ماڈیول میں منتقل کردیا گیا ہے۔
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | intern(aString) | sys.intern(aString) |
جیسا کہ پرنٹ کے جملے کو پیتھون 3 میں ایک فنکشن میں تبدیل کیا گیا ہے ، اسی طرح ای سی سی کے جملے بھی۔。exec() فنکشن میں ایک اسٹرنگ استعمال ہوتی ہے جس میں کسی بھی پیتھون کوڈ کو بطور پیرامیٹرز استعمال کیا جاتا ہے ، اور پھر اس کو اسٹیٹمنٹ یا اظہار کی طرح انجام دیا جاتا ہے۔。exec() اور eval() کی طرح ہے ، لیکن exec() زیادہ طاقتور اور زیادہ ہنر مند ہے۔。eval() فنکشن صرف ایک ہی اظہار پر عملدرآمد کرسکتا ہے ، لیکن exec() متعدد جملے ، درآمد ، درآمد ، فنکشن کا اعلان کرسکتا ہے۔
| Notes | Python 2 | Python 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)| 1، سب سے آسان شکل میں، کیونکہ exec ((() اب ایک فنکشن ہے، نہ کہ ایک بیان، 2to3 اس سٹرنگ کی شکل میں کوڈ کو قوسین کے ساتھ گھیر لے گا۔ 2، پیتھون 2 میں exec بیان نام کی جگہ کی وضاحت کرسکتا ہے ، اور کوڈ اس نجی جگہ پر عمل کرے گا جو عالمی آبجیکٹ پر مشتمل ہے۔ پیتھون 3 میں بھی ایسا ہی ہے۔ آپ کو صرف اس نام کی جگہ کو دوسرے پیرامیٹرز کے طور پر exec () فنکشن میں منتقل کرنے کی ضرورت ہے۔ 3۔ اس سے بھی زیادہ حیرت انگیز بات یہ ہے کہ پیتھون 2 میں exec کے بیان میں ایک مقامی نام کی جگہ بھی دی جاسکتی ہے (مثال کے طور پر ایک فنکشن میں اعلان کردہ متغیر) ۔ پیتھون 3 میں ، exec () فنکشن بھی ایسا ہی کام کرتا ہے۔
پچھلے exec کے جملے کی طرح ، پیتھون 2 میں execfile کے جملے بھی پیتھون کوڈ کو چلانے کی طرح سٹرنگ کا استعمال کرسکتے ہیں۔ اس کے برعکس ، exec سٹرنگ کا استعمال کرتا ہے ، جبکہ exec فائل فائل کا استعمال کرتی ہے۔ پیتھون 3 میں ، execfile کے جملے کو ہٹا دیا گیا ہے۔ اگر آپ واقعی کسی فائل میں موجود پیتھون کوڈ کو چلانا چاہتے ہیں (لیکن آپ اسے درآمد نہیں کرنا چاہتے ہیں) ، تو آپ اس فائل کو کھول کر اس کے مندرجات کو پڑھ سکتے ہیں ، اور پھر اس کو کال کرسکتے ہیں compile () ۔
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | execfile(‘a_filename’) | exec(compile(open(‘a_filename’).read(),‘a_filename’,‘exec’)) |
پیتھون 2 میں، ایک سٹرنگ کا اظہار کرنے کے لئے جو کسی بھی شے کو ظاہر کرتا ہے، اس میں ایک شے ہے جس میں اشارے کے اندر اندر احاطہ کرتا ہے (جیسےx) کی خصوصی گرامر۔ پیتھون 3 میں ، یہ صلاحیت اب بھی موجود ہے ، لیکن آپ کو اس طرح کی سٹرنگ کے لئے ریٹروکوٹ استعمال کرنے کی ضرورت نہیں ہے۔ آپ کو عالمی فنکشن repr استعمال کرنے کی ضرورت ہے۔
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | `x` | repr(x) |
| ② | `‘PapayaWhip’ + `2`` | repr(‘PapayaWhip’+ repr(2)) |
1۔ یاد رکھیں، x کچھ بھی ہو سکتا ہے۔ ایک کلاس، فنکشن، ماڈیول، بنیادی ڈیٹا ٹائپ وغیرہ۔ 2، پیتھون 2 میں ، ریٹرو کوٹینٹ کو ان پٹ کیا جاسکتا ہے ، جس کے نتیجے میں اس طرح کی الجھن والی (لیکن موثر) اظہار ◄ 2to3 کافی ذہین ہے کہ اس طرح کی ایک پٹ کال کو ریپر () فنکشن میں تبدیل کیا جاسکے ◄
پیتھون 2 سے پیتھون 3 تک ، غیر معمولی کو پکڑنے کے لئے گرامر میں کچھ تبدیلی آئی ہے۔
| 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 |
1، پیتھون 2 میں غیر معمولی قسم کے بعد ایک کمیا شامل کرنے کے مقابلے میں، پیتھون 3 نے ایک نیا کلیدی لفظ استعمال کیا ہے، as。 2، کلیدی لفظ as بھی استعمال کیا جا سکتا ہے جب ایک ہی وقت میں متعدد قسم کے غیر معمولیات پکڑے جائیں۔ 3۔ اگر آپ کو ایک غیر معمولی چیز کا پتہ چل گیا ہے لیکن آپ کو اس غیر معمولی چیز تک رسائی حاصل کرنے میں کوئی دلچسپی نہیں ہے تو ، پیتھون 2 اور پیتھون 3 کی ترکیب ایک جیسی ہے۔ 4، اسی طرح، اگر آپ تمام غیر معمولی کو پکڑنے کے لئے ایک انشورنس کا طریقہ استعمال کرتے ہیں، تو پطرون 2 اور پطرون 3 میں ایک ہی نحو ہے. 5۔ ماڈیولز کو درآمد کرتے وقت ((یا زیادہ تر دوسرے معاملات میں) ، آپ کو یقینی طور پر اس طریقہ کار کا استعمال نہیں کرنا چاہئے ((مذکورہ بالا فال بیک کا حوالہ دیتے ہوئے)) ۔ ورنہ ، پروگرام کی بورڈ انٹروپٹ ((اگر صارف Ctrl-C کے ذریعہ پروگرام کو روکتا ہے) جیسے غیر معمولی معاملات کو پکڑ سکتا ہے ، جس سے ڈیبگنگ مشکل ہوجاتی ہے۔
پیتھون 3 میں ، اپنی مرضی کے مطابق استثناءات کو پھینکنے کے لئے ایک معمولی تبدیلی کی گئی ہے۔
| 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 |
1۔ صارف کے ذریعہ اپنی مرضی کے مطابق غلط پیغامات کے بغیر استثناء کو خارج کردیں ، اس سب سے آسان شکل میں ، گرامر میں کوئی تبدیلی نہیں ہوئی۔ 2، جب آپ صارف کے اپنی مرضی کے مطابق غلطی کی معلومات کے ساتھ ایک استثنا کو پھینکنا چاہتے ہیں تو ، تبدیلی واضح ہے۔ Python 2 ایک کمیا کے ساتھ استثنا اور غلطی کو الگ کرتا ہے۔ Python 3 غلطی کی معلومات کو استثنا کے طور پر پیرامیٹرز کے طور پر منتقل کرتا ہے۔ 3، پیتھون 2 ایک زیادہ پیچیدہ نحو کی حمایت کرتا ہے جس میں ایک صارف کی اپنی مرضی کے مطابق واپسی کے ساتھ ایک استثنا کو پھینک دیا جاتا ہے۔ آپ اسے پیتھون 3 میں بھی کرسکتے ہیں ، لیکن یہ بالکل مختلف ہے۔ 4۔ پطرون 2 میں ، آپ ایک غیر معمولی کو صرف ایک غیر معمولی پیغام کے ساتھ چھوڑ سکتے ہیں۔ پطرون 3 میں ، اس شکل کی اب حمایت نہیں کی جاتی ہے۔ 2to3 آپ کو متنبہ کرے گا کہ یہ اس طرح کی نحو کو خود بخود ٹھیک نہیں کرسکتا ہے۔
پیتھون 2 میں ، جنریٹر کے پاس a_generator.throw () طریقہ ہے۔ a_generator.throw () کال کرنے سے جنریٹر کو روک دیا جاتا ہے اور اس کے بعد جنریٹر فنکشن کے ذریعہ حاصل کردہ اگلی قدر واپس کردی جاتی ہے۔ پیتھون 3 میں ، یہ فنکشن اب بھی دستیاب ہے ، لیکن اس کی نحو میں تھوڑا سا مختلف ہے۔
| 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 |
1، سب سے آسان شکل میں، جنریٹر صارف کی اپنی مرضی کے مطابق غلطی کے پیغامات کے بغیر ایک استثناء پھینک دیتا ہے. اس صورت میں، پیتھون 2 سے پیتھون 3 میں کوئی تبدیلی نہیں ہے. 2، اگر جنریٹر صارف کی اپنی مرضی کے مطابق غلطی کا پیغام لے کر ایک استثنا پھینک دیتا ہے، تو آپ کو اس غلطی کا پیغام تار (غلطی سٹرنگ) کو اس کی مثال کے طور پر اس کی مثال کے طور پر منتقل کرنے کی ضرورت ہے. 3، پیتھون 2 میں صرف غیر معمولی معلومات کو خارج کرنے کی بھی حمایت کی جاتی ہے۔ پیتھون 3 میں اس طرح کی گرامر کی حمایت نہیں کی جاتی ہے ، اور 2to3 ایک انتباہی پیغام دکھائے گا جو آپ کو بتائے گا کہ آپ کو دستی طور پر اس کوڈ کو ٹھیک کرنے کی ضرورت ہے۔
پیتھون 2 میں ، اعداد کی ایک مخصوص حد تک پہنچنے کے لئے دو طریقے ہیں: رینج () ، جو ایک فہرست واپس کرتا ہے ، اور رینج () ، جو ایک iterator واپس کرتا ہے۔ پیتھون 3 میں ، رینج () iterator واپس کرتا ہے ، اور ایکس رینج () اب موجود نہیں ہے۔
| 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 |
1، سب سے آسان صورت حال میں، 2to3 صرف xrange () کو range () میں تبدیل کرتا ہے۔ 2، اگر آپ کا پیتھون 2 کوڈ رینج () کا استعمال کرتا ہے تو ، 2to3 کو معلوم نہیں ہوگا کہ آپ کو فہرست کی ضرورت ہے یا نہیں ، اور نہ ہی یہ کہ ایک ایتھرنیٹر بھی کام کرتا ہے۔ احتیاط کے طور پر ، 2to3 غلطی کی اطلاع دے سکتا ہے ، اور پھر اس کا استعمال کرتا ہے list () رینج () کی واپسی کی قدر کو فہرست کی قسم میں تبدیل کرنے پر مجبور کریں۔ 3، اگر فہرست تجزیہ میں xrange () فنکشن ہے، تو اس کی واپسی کی قیمت کو ایک فہرست میں تبدیل کرنے کی ضرورت نہیں ہے، کیونکہ فہرست تجزیہ ایک انڈکٹر کے لئے بھی اسی طرح کام کرتا ہے۔ 4، اسی طرح، for سائیکل بھی iterator پر کام کرتا ہے، لہذا یہاں بھی کچھ بھی نہیں بدلتا ہے 5، فنکشن sum ((() ایڈیٹر پر کام کرتا ہے ، لہذا 2to3 نے یہاں کوئی تبدیلی نہیں کی ہے۔ جیسا کہ لغت کلاس کے طریقوں میں سے ایک ہے جس کی واپسی کی قیمت نظر (((view) ہے اور فہرست نہیں ہے۔ یہ بھی min ((() ، max ((() ، sum ((() ، list ((() ، tuple ((() ، set ((() ، sorted ((() ، any ((() ، all (()) کے لئے ہے۔
پیتھون 2 میں دو گلوبل فنکشنز ہیں جو کمانڈ لائن پر صارف سے ان پٹ کی درخواست کرنے کے لئے استعمال کیے جاتے ہیں۔ پہلا ان پٹ () کہا جاتا ہے ، جو صارف کا انتظار کرتا ہے کہ وہ ایک پیتھون اظہار () داخل کرے اور پھر اس کا نتیجہ واپس کرے۔ دوسرا راؤ ان پٹ () کہا جاتا ہے ، اور صارف جو کچھ بھی داخل کرتا ہے وہ اسے واپس کرتا ہے۔ یہ ابتدائیوں کو بہت الجھن میں ڈالتا ہے ، اور یہ وسیع پیمانے پر دیکھا جاتا ہے کہ یہ پیتھون زبان کا ایک گانٹھ کا ٹکڑا ہے۔
| Notes | Python 2 | Python 3 |
|---|---|---|
| ① | raw_input() | input() |
| ② | raw_input(‘prompt’) | input(‘prompt’) |
| ③ | input() | eval(input()) |
1، سب سے آسان شکل، خام_ان پٹ ((() کو ان پٹ ((() کے ساتھ تبدیل کیا گیا ہے۔ 2، پیتھون 2 میں، raw_input ((() فنکشن ایک اشارے کو بطور پیرامیٹرز متعین کرسکتا ہے۔ پیتھون 3 میں یہ فنکشن محفوظ ہے۔ 3، اگر آپ واقعی میں صارف کو ایک پطرون اظہار میں داخل کرنے کے لئے پوچھنا چاہتے ہیں، تو نتائج کا حساب لگایا جاسکتا ہے، آپ کو ان پٹ () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () ()
پیتھون 2 میں ، فنکشن کا کوڈ فنکشن کی خصوصی خصوصی�