تقریباً تمام پِیٹَن 2 پروگراموں کو پِیٹَن 3 کے ماحول میں کام کرنے کے لیے کچھ ترمیم کی ضرورت ہوتی ہے۔ اس تبدیلی کے عمل کو آسان بنانے کے لیے، پِیٹَن 3 اپنے ساتھ ایک یوٹیلیٹی اسکرپٹ (Utility Script) لاتا ہے، جو آپ کے پِیٹَن 2 پروگرام کی سورس فائل کو ان پٹ کے طور پر لیتا ہے، اور پھر اسے خود بخود پِیٹَن 3 کی شکل میں بدل دیتا ہے۔ کیس اسٹڈی: چارڈٹ کو پِیٹَن 3 میں پورٹ کرنا (porting chardet to Python 3) اس اسکرپٹ کو چلانے کا طریقہ بیان کرتا ہے، پھر کچھ ایسی صورتیں دکھاتا ہے جن کو یہ خود بخود ٹھیک نہیں کر سکتا۔ یہ ضمیمہ اس کے خود بخود ٹھیک ہونے کی صورتوں کی وضاحت کرتا ہے۔
پیتھون 2 میں ، پرنٹ ایک بیان ہے۔ آپ جو کچھ بھی آؤٹ پٹ کرنا چاہتے ہیں اسے صرف پرنٹ کی کلید کے پیچھے رکھ سکتے ہیں۔ پیتھون 3 میں ، پرنٹ ()) ایک فنکشن ہے۔ کسی بھی دوسرے فنکشن کی طرح ، پرنٹ ()) کی ضرورت ہے کہ آپ جو کچھ آؤٹ پٹ کرنا چاہتے ہیں اسے بطور پیرامیٹر منتقل کریں۔
نوٹ | پِیٹون 2 | پطرون 3 |
---|---|---|
① | پرنٹ | پرنٹ کریں |
② | پرنٹ 1 | پرنٹ کریں ((1) |
③ | 1.2 پرنٹ کریں | پرنٹ کریں ((1,2) |
④ | پرنٹ 1، 2، | print ((1,2,end= |
⑤ | پرنٹ >>sys.stderr،1،2،3 | print ((1,2,3, فائل=sys.stderr) |
1، ایک خالی سطر کو آؤٹ پٹ کرنے کے لئے، آپ کو بغیر کسی پیرامیٹر کے بغیر پرنٹ ((() کا مطالبہ کرنا ہوگا.
2، ایک علیحدہ قدر کو باہر نکالنے کے لئے، آپ کو اس قدر کو ایک پیرامیٹر کے طور پر استعمال کرنے کی ضرورت ہے print (()).
3، پیداوار کے لئے ایک خالی جگہ کا استعمال کرتے ہوئے الگ الگ دو اقدار، دو پیرامیٹرز کے ساتھ پرنٹ ((() کال کر سکتے ہیں.
اس مثال میں کچھ چالیں ہیں۔ پیتھون 2 میں ، اگر آپ ایک کوما کا استعمال کرتے ہیں ، () پرنٹ بیان کے اختتام کے طور پر ، یہ نتائج کو خالی جگہوں سے الگ کرے گا ، اور پھر اس کے بعد ایک ٹریلنگ اسپیس (trailing space) کی پیداوار میں کارروائی کی واپسی کے بغیر پیداوار کرے گا۔ پیتھون 3 میں ، اسی طرح کا اثر اس بات سے حاصل کیا جاسکتا ہے کہ end =
پِیٹَن 2 میں سٹرنگ کی دو اقسام ہیں:یونیکوڈ سٹرنگاورغیر یونیکوڈ سٹرنگ│پائیٹن 3 میں صرف ایک قسم ہے:یونیکوڈ سٹرنگ。
نوٹ | پِیٹون 2 | پطرون 3 |
---|---|---|
① | ||
② | ur |
پیتھون 2 میں یونیکوڈ سٹرنگز پیتھون 3 میں عام سٹرنگز ہیں کیونکہ پیتھون 3 میں سٹرنگز ہمیشہ یونیکوڈ کی شکل میں ہیں۔ یونیکوڈ کی اصل سٹرنگ ((raw string) ((اس سٹرنگ کا استعمال کرتے ہوئے، پائتن خود بخود الٹا slope "کے طور پر ترجمہ نہیں کرے گا") بھی عام سٹرنگ کے طور پر تبدیل کر دیا گیا ہے، کیونکہ پیتھون 3 میں، تمام بنیادی سٹرنگ یونیکوڈ میں انکوڈنگ کر رہے ہیں.
پیتھون 2 میں دو گلوبل افعال ہیں جو کسی شے کو سٹرنگ میں تبدیل کرنے پر مجبور کرتے ہیں: یونیکوڈ ((() جس میں کسی شے کو یونیکوڈ سٹرنگ میں تبدیل کیا جاتا ہے ، اور str ((() جس میں کسی شے کو غیر یونیکوڈ سٹرنگ میں تبدیل کیا جاتا ہے۔ پیتھون 3 میں صرف ایک سٹرنگ ٹائپ ہے ، یونیکوڈ سٹرنگ ، لہذا str ((() فنکشن تمام افعال کو انجام دیتا ہے۔یونیکوڈ (() افعال اب پیتھون 3 میں موجود نہیں ہیں۔)
نوٹ | پِیٹون 2 | پطرون 3 |
---|---|---|
① | یونیکوڈ ((کچھ بھی) | str ((کچھ بھی) |
پیتھون 2 میں غیر فلوٹ پوائنٹس کے لئے تیار کردہ int اور long اقسام ہیں۔ انٹ کی اقسام کی زیادہ سے زیادہ قیمت sys.maxint سے زیادہ نہیں ہوسکتی ہے ، اور یہ زیادہ سے زیادہ قیمت پلیٹ فارم سے متعلق ہے۔ عدد کے اختتام پر ایک L شامل کرکے لمبے عدد کی وضاحت کی جاسکتی ہے ، ظاہر ہے ، یہ عدد کی حد سے زیادہ ہے جس کی نمائندگی انٹ کی قسم کرتی ہے۔ پیتھون 3 میں ، صرف ایک ہی عدد کی قسم int ہے ، جو زیادہ تر معاملات میں پیتھون 2 میں لمبے عدد کی طرح ہے۔ چونکہ پہلے سے ہی دو قسم کے عدد موجود نہیں ہیں ، لہذا ان میں فرق کرنے کے لئے خصوصی نحو کا استعمال کرنے کی ضرورت نہیں ہے۔
مزید پڑھیں: پی ای پی 237: یونیفائیڈ لونگ انٹیگریٹڈ اور انٹیگریٹڈ۔
نوٹ | پِیٹون 2 | پطرون 3 |
---|---|---|
① | x = 1000000000000L | x = 1000000000000 |
② | x = 0xFFFFFFFFFFFF | x = 0xFFFFFFFFFF |
③ | لمبا ((x) | int(x) |
④ | type(x) لمبا ہے | قسم ((x) int ہے |
⑤ | isinstance ((x,long) | isinstance ((x،int) |
پیتھون 2 میں اعشاریہ لمبے عدد کو پیتھون 3 میں اعشاریہ لمبے عام عدد سے تبدیل کردیا گیا ہے۔ پائیتھون 2 میں سولہ ہندسوں کی لمبائی والے انٹیجرز کو پائیتھون 3 میں سولہ ہندسوں کی لمبائی والے عام انٹیجرز سے تبدیل کیا گیا ہے۔ اس کے بعد، ہم نے اس کے بارے میں مزید معلومات حاصل کرنے کے لئے اس کے بارے میں بات کی.یہاں تک کہ قدرتی طور پر لانگ ((() فنکشن بھی موجود نہیں ہے۔ ایک متغیر کو انٹیجر میں تبدیل کرنے کے لئے ، آپ int ((() فنکشن استعمال کرسکتے ہیں۔◄ یہ چیک کرتا ہے کہ آیا کوئی متغیر انٹیجر ہے ، اس کا ڈیٹا ٹائپ حاصل کرتا ہے ، اور اس کا موازنہ انٹ ٹائپ ((long نہیں) کے ساتھ کرتا ہے۔ آپ اعداد و شمار کی قسم کی جانچ پڑتال کرنے کے لئے انسٹینس () فنکشن کا استعمال بھی کرسکتے ہیں۔ ایک بار پھر ، انٹیجر کی قسم کی جانچ پڑتال کرنے کے لئے لمبے عرصے کے بجائے int کا استعمال کریں۔
پیتھون 2 <> کو!= کے مترادف کے طور پر سپورٹ کرتا ہے۔ پیتھون 3 صرف!= کی حمایت کرتا ہے ، اب <> کی حمایت نہیں کرتا ہے۔
نوٹ | پِیٹون 2 | پطرون 3 |
---|---|---|
① | اگر x <> y: | اگر x!= y: |
② | اگر x <> y<> z: | اگر x!= y!= z: |
1، سادہ موازنہ۔ 2، نسبتا پیچیدہ تین اقدار کے درمیان موازنہ۔
پیتھون 2 میں ، لغت کے اعتراض کا has_key طریقہ استعمال کیا جاتا ہے تاکہ اس بات کی جانچ کی جاسکے کہ لغت میں مخصوص کلید موجود ہے یا نہیں۔ پیتھون 3 اس طریقہ کار کی حمایت نہیں کرتا ہے۔میںآپریٹرز۔
نوٹ | پِیٹون 2 | پطرون 3 |
---|---|---|
① | a_dictionary.has_key (( |
|
② | a_dictionary.has_key ((x) یا a_dictionary.has_key ((y) | a_dictionary میں x یا a_dictionary میں y |
③ | a_dictionary.has_key ((x یا y) | (x یا y) a_dictionary میں |
④ | a_dictionary.has_key ((x + y) | (x + y) a_dictionary میں |
⑤ | x + a_dictionary.has_key(y) | x + (a_dictionary میں y) |
1، سب سے آسان شکل۔
2، آپریٹر or کی اہمیت آپریٹر in سے کم ہے، لہذا یہاں قوسین شامل کرنے کی ضرورت نہیں ہے۔
3، دوسری طرف، اسی وجہ سے،
پیتھون 2 میں ، بہت سے لغت کے طریقوں کی واپسی کی قیمت فہرستیں ہیں۔ ان میں سے سب سے زیادہ عام طریقوں میں چابیاں ، اشیاء اور اقدار شامل ہیں۔ پیتھون 3 میں ، ان تمام طریقوں کی واپسی کی قیمتوں کو متحرک نظارے میں تبدیل کردیا گیا ہے۔ کچھ سیاق و سباق کے ماحول میں ، اس تبدیلی کا کوئی اثر نہیں پڑتا ہے۔ اگر ان طریقوں کی واپسی کی قیمتوں کو فوری طور پر کسی اور فنکشن کو منتقل کیا جاتا ہے ، اور یہ فنکشن پوری سیریز کو عبور کرتا ہے تو ، ان طریقوں کی واپسی کی قیمتوں میں فہرست یا نقطہ نظر میں کوئی فرق نہیں پڑتا ہے۔ دیگر معاملات میں ، پیتھون 3 کے تعلقات۔ اہم توقعات یہ ہیں کہ اگر آپ ان عناصر کی فہرست کو آزادانہ طور پر ایڈریس کرسکتے ہیں تو ، پیتھون 3 میں ان تبدیلیوں سے آپ کا کوڈ پھنس جائے گا ، کیونکہ گرافک ویو انڈیکسنگ کی حمایت نہیں کرتا ہے۔
نوٹ | پِیٹون 2 | پطرون 3 |
---|---|---|
① | a_dictionary.keys() | فہرست ((a_dictionary.keys()) |
② | a_dictionary.items() | فہرست ((a_dictionary.items()) |
③ | a_dictionary.iterkeys() | iter ((a_dictionary.keys()) |
④ | [i کے لئے iin a_dictionary.iterkeys() ] | [i کے لئے iin a_dictionary.keys() ] |
⑤ | min(a_dictionary.keys()) | کوئی تبدیلی نہیں |
1، استعمال فہرست () تقریب کیز () کی واپسی کی قدر کو ایک جامد فہرست میں تبدیل کرتا ہے، سیکورٹی کے تحفظات کے لئے، 2to3 غلط ہو سکتا ہے۔ اس طرح کا کوڈ درست ہے، لیکن استعمال کے نقطہ نظر کے لئے یہ کچھ کم موثر ہے. آپ کو تبدیل کرنے کے بعد کوڈ کی جانچ پڑتال کرنا چاہئے، یہ دیکھنے کے لئے کہ آپ کو لازمی طور پر فہرست کی ضرورت ہے، شاید نقطہ نظر بھی اسی کام کو انجام دے سکتا ہے. 2، یہ ایک اور نقطہ نظر ہے ((بشمول اشیاء کے بارے میں)) طریقہ کار کی فہرست میں تبادلوں کا ؛ 2to3 کے لئے اقدار کے لئے طریقہ کار کی واپسی کی قدر کی تبدیلی بھی اسی طرح ہے ؛ 3، پائتھون 3 میں iterkeys کی حمایت ختم ہوگئی ہے۔ اگر ضروری ہو تو ، کیز کی واپسی کی قدر کو ایک آریٹر میں تبدیل کرنے کے لئے iter استعمال کریں۔ 4، 2to3 یہ تسلیم کرنے کے قابل ہے کہ فہرست تجزیہ میں استعمال ہونے والے آئیٹرکیز کا طریقہ استعمال کیا جاتا ہے اور پھر اسے پائتھون 3 میں کیز میں تبدیل کیا جاتا ہے۔ یہ قابل عمل ہے کیونکہ نقطہ نظر تکرار پذیر ہے۔ 5، 2to3 بھی اس بات کی نشاندہی کرتا ہے کہ keys() طریقہ کار کی واپسی کی قدر فوری طور پر کسی دوسرے فنکشن کو منتقل کردی جاتی ہے جو پوری سیریز میں گھومتا ہے ، لہذا پہلے keys() کی واپسی کی قدر کو فہرست میں تبدیل کرنے کی ضرورت نہیں ہے۔ اس کے برعکس ، min() فنکشن خوشی سے نظارے میں گھومتا ہے۔ یہ عمل کم از کم ، زیادہ سے زیادہ ، مجموعی ، مجموعی ، ٹپل ، سیٹ لسٹ ، ترتیب ، کسی بھی اور سب کے لئے بھی اسی طرح کام کرتا ہے۔
پیتھون 2 سے پیتھون 3 تک ، معیاری ذخیرہ میں موجود کچھ ماڈیولز کا نام تبدیل کردیا گیا ہے۔ اور کچھ باہم منسلک ماڈیولز کو بھی جوڑ دیا گیا ہے یا دوبارہ منظم کیا گیا ہے تاکہ یہ منسلک زیادہ منطقی ہو۔
نوٹ | پِیٹون 2 | پطرون 3 |
---|---|---|
① | httplib درآمد کریں | http.client درآمد کریں |
② | درآمد کوکی | http.cookies درآمد کریں |
③ | کوکی لیب درآمد کریں | http.cookiejar درآمد کریں |
④ | درآمد بیسHTTPServer درآمد سادہHTTPServer درآمد CGIHttpServer |
http.server درآمد کریں |
http.client ماڈیول ایک بنیادی ذخیرہ کو نافذ کرتا ہے جس کا استعمال HTTP وسائل کی درخواست کرنے اور HTTP ردعمل کو تجزیہ کرنے کے لئے کیا جاسکتا ہے۔ http.cookies ماڈیول ایک پیتھونک انٹرفیس فراہم کرتا ہے جو HTTP ہیڈر کے ذریعہ سیٹ کوکیز کے ذریعہ بھیجے گئے کوکیز کو حاصل کرتا ہے۔ عام طور پر استعمال ہونے والے براؤزر کوکیز کو فائلوں کی شکل میں ڈسک پر اسٹور کرتے ہیں ، اور http.cookiejar ماڈیول ان فائلوں کو سنبھال سکتا ہے۔ http.server ماڈیول ایک بنیادی HTTP سرور کو نافذ کرتا ہے
نوٹ | پِیٹون 2 | پطرون 3 |
---|---|---|
① | درآمد urllib | درآمد urllib.request urllib.parse,urllib.error |
② | درآمد urllib2 | درآمد urllib.request urllib.error |
③ | درآمد یو آر ایل پارس | درآمد urllib.parse |
④ | روبوٹ پارسر درآمد کریں | درآمد urllib.robotparser |
⑤ | سے urllib درآمد FancyURLopener سے urllib درآمد urlencode |
سے urllib.request درآمد FancyURLopener سے urllib.parse درآمد urlencode |
⑥ | سے urllib2 درآمد درخواست سے urllib2 درآمد HTTPError |
سے urllib.request درآمد درخواست سے urllib.error درآمد HTTPError |
اس سے پہلے، پیتھون 2 میں urllib ماڈیول مختلف قسم کے افعال پر مشتمل تھا، بشمول urlopen () جو ڈیٹا حاصل کرنے کے لئے استعمال کیا جاتا ہے، اور یہ بھی مفید ہے کہ یو آر ایل کو اس کے اجزاء میں تقسیم کرنے کے لئے استعمال کیا جائے۔ splittype () ، splithost () اور splituser () افعال۔ نئے urllib پیکج میں ، یہ افعال زیادہ منطقی طور پر منظم ہیں۔ 2to3 ان افعال کی کالوں کو تبدیل کرے گا تاکہ نئے نام دینے کے منصوبے کو پورا کیا جاسکے۔ پیتھون 3 میں، پہلے urllib2 ماڈیول کو urllib پیک میں شامل کیا گیا تھا۔ اس کے علاوہ، urllib2 میں آپ کی پسندیدہ چیزیں ایک دوسرے کے ساتھ پیتھون 3 کے urllib ماڈیول میں شامل ہوں گی۔ مثال کے طور پر build_opener () طریقہ کار، Request اعتراض، HTTPBasicAuthHandler اور دوست۔ پیتھون 3 میں urllib.parse ماڈیول میں اصل پیتھون 2 میں urlparse ماڈیول کے تمام تجزیہ افعال شامل ہیں۔ urllib.robotparse ماڈیول robots.txt فائل کو تجزیہ کرتا ہے۔ فینسی یو آر ایل اوپنر کلاس جو ایچ ٹی ٹی پی ری ڈائریکٹ اور دیگر حالت کوڈ کو سنبھالتی ہے وہ پیتھون 3 میں urllib.request ماڈیول میں اب بھی قابل عمل ہے۔ urllib.parse میں urlencode () فنکشن منتقل کردیا گیا ہے۔ درخواست کا اعتراض urllib.request میں درست رہتا ہے، لیکن مستقلات جیسے HTTPError کو urllib.error میں منتقل کردیا گیا ہے۔ کیا میں نے ذکر کیا ہے کہ 2to3 آپ کے فنکشن کالز کو بھی دوبارہ لکھے گا؟ مثال کے طور پر ، اگر آپ نے اپنے پائتن 2 کوڈ میں urllib ماڈیول درآمد کیا ہے اور urllib.urlopen () فنکشن کو ڈیٹا حاصل کرنے کے لئے بلایا ہے تو ، 2to3 ایک ہی وقت میں درآمد کے بیان اور فنکشن کال کو تبدیل کرے گا۔
نوٹ | پِیٹون 2 | پطرون 3 |
---|---|---|
① | درآمد urllib پرنٹ urllib.urlopen (("http://diveintopython3.org/’◄ پڑھا گیا | درآمد urllib.request، urllib.parse، urllib.error print ((urllib.request.urlopen)) "http://diveintopython3.org/’پڑھنا |
نوٹ | پِیٹون 2 | پطرون 3 |
---|---|---|
① | درآمد ڈی بی ایم | درآمد ڈی بی ایم.ڈی بی ایم |
② | درآمد gdbm | درآمدdbm.gnu |
③ | dbhash درآمد کریں | درآمد dbm.bsd |
④ | درآمد dumbdbm | درآمد dbm.dumb |
⑤ | import anyydbm import جسdb |
درآمد ڈی بی ایم |
نوٹ | پِیٹون 2 | پطرون 3 |
---|---|---|
① | xmlrpclib درآمد کریں | xmlrpc.client درآمد کریں |
② | درآمد DocXMLRPCServer درآمد SimpleXMLRPCServer |
xmlrpc.server درآمد کریں |
نوٹ | پِیٹون 2 | پطرون 3 |
---|---|---|
① | کوشش: درآمد cStringIO کے طور پر StringIO سوائے درآمدError: درآمد StringIO |
درآمد |
② | کوشش کریں: درآمد کریں cپکنگ کو پکنگ کے طور پر سوائے درآمدError: درآمد کریں پکنگ |
درآمد شدہ pickle |
③ | درآمد کریںتعمیر_ | درآمد شدہ عمارتیں |
④ | درآمد کریں copy_reg | درآمد کاپی ریگ |
⑤ | درآمد قطار | درآمد قطار |
⑥ | SocketServer درآمد کریں | درآمد ساکٹ سرور |
⑦ | درآمد ConfigParser | درآمد configparser |
⑧ | درآمد repr | درآمد reprlib |
⑨ | درآمد کمانڈز | درآمد کا ذیلی عمل |
1، پیتھون 2 میں آپ عام طور پر ایسا کرتے ہیں، سب سے پہلے آپ کو اسٹرینگIO کے متبادل کے طور پر cStringIO درآمد کرنے کی کوشش کریں، اور اگر یہ ناکام ہوجاتا ہے، تو پھر اسٹرینگIO درآمد کریں۔ پیتھون 3 میں ایسا نہ کریں؛ io ماڈیول آپ کو اس کے بارے میں کام کرنے میں مدد کرتا ہے۔ یہ دستیاب تیز ترین عمل درآمد کا پتہ لگاتا ہے اور پھر اسے خود بخود استعمال کرتا ہے۔ 2، پیتھون 2 میں، تیز ترین pickle عمل درآمد درآمد بھی ایک قابل استعمال طریقہ ہے. 3، بلٹنز ماڈیول میں گلوبل افعال، اقسام اور مستقلات شامل ہیں جو پورے پیتھون زبان میں استعمال ہوتے ہیں۔ بلٹنز ماڈیول میں کسی فنکشن کی نئی تعریف کا مطلب ہے کہ ہر جگہ اس گلوبل فنکشن کی نئی وضاحت کی گئی ہے۔ یہ زبردست لگتا ہے ، لیکن یہ بھی خوفناک ہے۔ 4، کاپی ریگ ماڈیول نے سی زبان میں بیان کردہ صارف کی اپنی مرضی کے مطابق اقسام کے لئے پکل ماڈیول کی حمایت شامل کی ہے۔ 5، قطار ماڈیول ایک پروڈیوسر صارفین قطار (ملٹی پروڈیوسر، ملٹی صارفین قطار) کو لاگو کرتا ہے. 6، ساکٹ سرور ماڈیول مختلف ساکٹ سرورز کو لاگو کرنے کے لئے ایک عام بنیادی کلاس فراہم کرتا ہے۔ 7، configparser ماڈیول INI طرز پروفائلز کو تجزیہ کرنے کے لئے استعمال کیا جاتا ہے۔ 8، reprlib ماڈیول نے بلٹ ان فنکشن repr () کو دوبارہ نافذ کیا ، اور اس پر کنٹرول شامل کیا کہ سٹرنگ کی نمائندگی کی لمبائی کاٹ دی گئی ہے۔ 9، ذیلی عمل ماڈیول آپ کو ذیلی عمل تخلیق کرنے کی اجازت دیتا ہے، ان کے پائپ لائن سے منسلک، اور ان کی واپسی کی قدر حاصل.
پیکیج ایک واحد ادارہ ہے جس میں منسلک ماڈیولز کا ایک گروپ شامل ہے۔ پییٹون 2 میں ، آپ کو ایک ہی پیکیج کے اندر ماڈیولز کے مابین باہمی حوالہ جات کے لئے درآمد فو یا سے فو درآمد بار کا استعمال کرنا چاہئے۔2解释器会先在当前目录里搜索foo.pyاس کے بعد پیتھون کے تلاش کے راستے (sys.path) میں تلاش کریں۔ پیتھون 3 میں یہ عمل تھوڑا مختلف ہے۔ پیتھون 3 پہلے موجودہ راستے میں تلاش نہیں کرے گا ، یہ براہ راست پیتھون کے تلاش کے راستے میں تلاش کرے گا۔ اگر آپ کسی ماڈیول کو کسی دوسرے ماڈیول میں درآمد کرنا چاہتے ہیں تو ، آپ کو واضح طور پر دو ماڈیولوں کے مابین رشتہ دار راستے فراہم کرنے کی ضرورت ہے۔
اگر آپ کے پاس ایک ہی ڈائرکٹری میں ایک سے زیادہ فائلیں ہیں تو آپ کو مندرجہ ذیل پیکجوں کا استعمال کرنا چاہئے:
چارڈٹ/ ∙∙ ±-شروع کریں.py ∙∙+--constants.py | +--mbcharsetprober.py | +--یونیورسل ڈیٹیکٹر.پی
اب فرض کریں کہ universaldector.py کو پورے constants.py کو درآمد کرنے کی ضرورت ہے۔,另外还需要导入mbcharsetprober.py的一个类。你会怎样做?
نوٹ | پِیٹون 2 | پطرون 3 |
---|---|---|
① | درآمد کنسٹنٹس | درآمد کنسٹنٹس سے |
② | سے mbcharsetprober درآمد MultiByteCharSetProber | سے.mbcharsetprober درآمد MultiByteCharsetProber |
1、 جب آپ کو پیکیج کے کسی اور حصے سے پورے ماڈیول کو درآمد کرنے کی ضرورت ہو تو ، نیا استعمال کریںfrom.import نحو.universaldetector.pyاور آپ کو فائلوں کو درآمد کرنا چاہتے ہیںconstants.py) کے درمیان رشتہ دار راستہ ہے۔ اس مثال میں ، یہ دونوں فائلیں ایک ہی ڈائریکٹری میں ہیں ، لہذا ایک ہی جملہ استعمال کیا گیا ہے۔ آپ والدین ڈائریکٹری ((from... import anothermodule) یا سب ڈائریکٹری سے بھی درآمد کرسکتے ہیں۔ 2، کسی خاص کلاس یا فنکشن کو دوسرے ماڈیولز سے براہ راست اپنے ماڈیول کی نام کی جگہ میں درآمد کرنے کے لئے ، ماڈیول کے نام سے پہلے جس ماڈیول کو درآمد کرنے کی ضرورت ہے اس میں رشتہ دار راستہ شامل کریں اور آخری سلش کو ہٹا دیں۔ اس مثال میں ، mbcharsetprober.py اور universaldetector.py ایک ہی ڈائریکٹری میں ہیں ، لہذا رشتہ دار راستے کا نام ایک جملہ ہے۔ آپ والدین ڈائریکٹری ((from... import anothermodule) یا سب سے چھوٹی ڈائریکٹری سے بھی درآمد کرسکتے ہیں۔
پیتھون 2 میں، آریسرز کے پاس ایک next () طریقہ ہے جو سیریز میں اگلے کو واپس کرنے کے لئے استعمال کیا جاتا ہے۔ پیتھون 3 میں یہ بھی کام کرتا ہے، لیکن اب ایک نیا عالمی فنکشن ہے next () ، جو ایک آریسر کو بطور پیرامیٹر استعمال کرتا ہے۔
نوٹ | پِیٹون 2 | پطرون 3 |
---|---|---|
① | anIterator.next ((() | اگلا (انٹیریٹر) |
② | a_function_that_returns_an_iterator().next() | next ((a_function_that_returns_an_iterator()) |
③ | کلاس A: def next ((self): پاس |
کلاس A: def _اگلا_(خود): پاس کرو |
④ | کلاس A: def اگلے ((خود، x، y): پاس |
کوئی تبدیلی نہیں |
⑤ | next = 42 a_sequence_of_iterators میں an_iterator کے لئے: an_iterator.next (() |
اگلا = 42 a_sequence_of_iterators میں ایک_iterator کے لئے: ایک_iterator._اگلا_() |
1، سب سے آسان مثال، آپ کو ایک آریٹر کے لئے اگلا ((() طریقہ کار کو کال کرنے کے بجائے، اب آپ کو آریٹر خود کو عالمی فنکشن اگلا ((() کے لئے ایک پیرامیٹر کے طور پر منتقل کر رہے ہیں. 2، اگر آپ کے پاس ایک واپسی کی قدر ہے جو کہ ایک آریٹر کا فنکشن ہے، تو اس فنکشن کو کال کریں اور اس کے نتائج کو بطور پیرامیٹر اگلی () فنکشن میں منتقل کریں۔ 3، اگر آپ اپنی کلاس کو فرض کرتے ہیں اور پھر اسے ایک آریٹر کے طور پر استعمال کرتے ہیں، تو آپ Python 3 میں خصوصی طریقوں کی وضاحت کر سکتے ہیں۔اگلا_(میں نے اس کو پورا کرنے کے لئے آیا ہوں. 4، اگر آپ نے کسی کلاس کو صرف ایک ہی بار میں مقرر کیا ہے تو ، اس میں ایک یا ایک سے زیادہ پیرامیٹرز استعمال ہوتے ہیں ، 2to3 اس پر عملدرآمد نہیں کرے گا۔ اس کلاس کو آئریٹر کے طور پر استعمال نہیں کیا جاسکتا ہے ، کیونکہ اس کے اگلے طریقہ کار میں پیرامیٹرز ہیں۔ 5، یہ ایک چھوٹا سا پیچیدہ ہے۔ اگر آپ کو ایک مقامی متغیر نامی اگلا ہو جاتا ہے، تو یہ پائتھون 3 میں عالمی تقریب اگلا سے زیادہ ترجیح دی جائے گی. اس صورت میں آپ کو ایک خاص طریقہ کار کا استعمال کرنے کی ضرورت ہے.اگلا_() سیریز میں اگلے عنصر کو حاصل کرنے کے لیے استعمال ہوتا ہے۔ یا، آپ کو کوڈ کو دوبارہ ترتیب دے سکتے ہیں تاکہ اس مقامی متغیر کا نام اگلا نہ ہو، لیکن 2to3 آپ کے لیے یہ کام نہیں کرے گا۔)
پیتھون 2 میں ، فلٹر () طریقہ ایک فہرست واپس کرتا ہے ، جو سیریز کے ہر عنصر کا پتہ لگانے کے لئے ایک فنکشن کے ذریعہ حاصل کی جاتی ہے جس کی واپسی کی قیمت سچ یا غلط ہے۔
نوٹ | پِیٹون 2 | پطرون 3 |
---|---|---|
① | فلٹر ((a_function، a_sequence) | فہرست ((فلٹر ((ایک_فنکشن، ایک_سلسلہ)) |
② | فہرست ((فلٹر ((ایک_فنکشن، ایک_سلسلہ)) | کوئی تبدیلی نہیں |
③ | فلٹر ((کوئی نہیں، a_sequence) | [i کے لئے iin a_sequence اگر i] |
④ | فلٹر میں i کے لئے ((کوئی نہیں، a_sequence): | کوئی تبدیلی نہیں |
⑤ | [i کے لئے iin فلٹر ((a_function, a_sequence) ] | کوئی تبدیلی نہیں |
1، سب سے آسان صورت میں، 2to3 فلٹر کو ایک فہرست () فنکشن کے ساتھ لپیٹتا ہے، اور فہرست () فنکشن اس کے پیرامیٹرز کو گھومتا ہے اور فہرست واپس کرتا ہے۔ 2، تاہم، اگر فلٹر () کال کو پہلے ہی فہرست () میں لپیٹ دیا گیا ہے تو ، 2to3 مزید عملدرآمد نہیں کرے گا ، کیونکہ اس صورت میں فلٹر () کی واپسی کی قدر ایک آریٹر ہے یا نہیں اس سے کوئی فرق نہیں پڑتا ہے۔ 3، فلٹر ((None،...) جیسے خصوصی نحو کو سنبھالنے کے لئے، 2to3 اس کال کو نحو کے برابر فہرست تجزیہ میں تبدیل کرتا ہے۔ 4، چونکہ فور لوپ پورے سلسلے میں چلتا ہے، اس کے لئے مزید ترمیم کرنے کی ضرورت نہیں ہے۔ 5، جیسا کہ اوپر، کوئی تبدیلی کی ضرورت نہیں ہے، کیونکہ فہرست کا تجزیہ پورے سلسلے میں ہوتا ہے، یہاں تک کہ اگر فلٹر () ایک آریٹر کو واپس کرتا ہے، تو یہ اسی طرح کام کرتا ہے جیسے پچھلے فلٹر () فہرست کو واپس کرتا ہے۔
فلٹر (فائل) کی طرح، نقشہ (فائل) اب ایک آریٹر لوٹاتا ہے۔ (پائتھون 2 میں، یہ ایک فہرست لوٹاتا ہے۔)
نوٹ | پِیٹون 2 | پطرون 3 |
---|---|---|
① | نقشہ ((ایک_فنکشن، |
فہرست ((نقشہ ((ایک_فنکشن، |
② | نقشہ ((کوئی نہیں، |
فہرست (( |
③ | نقشہ ((لامبڈا ایکس: x+1، رینج ((42)) | [x + 1 کے لئے x میں رینج ((42)] |
④ | نقشے میں i کے لئے ((a_function، a_sequence): | کوئی تبدیلی نہیں |
⑤ | [i کے لئے ایک نقشہ ((a_function,a_sequence) ] | کوئی تبدیلی نہیں |
1 ، فلٹر کے ساتھ اسی طرح کا سلوک کرتا ہے ، اور سب سے آسان صورت میں ، 2to3 ایک فہرست () فنکشن کے ساتھ نقشہ () کو کال کرنے کے لئے پیک کرتا ہے۔ 2、 مخصوص نقشہ ((None،...) کے لئے، فلٹر ((None،...) کی طرح، 2to3 اسے استعمال کرتے ہوئے فہرست (((کے برابر کال میں تبدیل کرے گا 3، اگر نقشہ کا پہلا پیرامیٹر ایک لیمبڈا فنکشن ہے، تو 2to3 اس کو فہرست کے حل میں تبدیل کرتا ہے۔ 4، اس سلسلے میں پورے سلسلے پر چلنے والے for loops کے لئے کوئی تبدیلی کی ضرورت نہیں ہے۔ 5، ایک بار پھر، یہاں کوئی ترمیم کرنے کی ضرورت نہیں ہے کیونکہ فہرست کا تجزیہ پورے سیریز میں ہوتا ہے، اور یہ کام کرتا ہے یہاں تک کہ اگر نقشہ () کی واپسی کی قدر ایک آریٹر ہے اور فہرست نہیں ہے۔
پیتھون 3 میں، کم کریں () فنکشن کو عالمی ناموں کی جگہ سے ہٹا دیا گیا ہے اور اب اسے fucntools ماڈیول میں رکھا گیا ہے۔
نوٹ | پِیٹون 2 | پطرون 3 |
---|---|---|
① | کم کریں ((a، b، c) | سے functools درآمد کم کم ((a، b، c) |
پیتھون 2 میں ایک گلوبل فنکشن ہے جس کا نام apply (() ہے ، جو ایک فنکشن f اور ایک فہرست [a ، b ، c] کو بطور پیرامیٹر استعمال کرتا ہے ، اور اس کی واپسی کی قیمت f ((a ، b ، c) ہے۔ آپ اس فنکشن کو براہ راست کال کرکے بھی ایسا ہی کرسکتے ہیں ، اس فہرست کے سامنے ایک ستارہ (*) بطور پیرامیٹر پاس کرتے ہیں۔ پیتھون 3 میں ، apply (() فنکشن اب موجود نہیں ہے؛ ستارہ ٹیگ کا استعمال کرنا ضروری ہے۔
نوٹ | پِیٹون 2 | پطرون 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) |
③ | لاگو کریں ((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]) ۔ یہ پیتھون 2 میں اطلاق () کے برابر ہے۔ 2، پیتھون 2 میں، اطلاق () فعل اصل میں 3 پیرامیٹرز لے سکتے ہیں: ایک تقریب، ایک پیرامیٹرز کی فہرست، اور ایک نامی دلیلوں کی لغت.), لغت نام دینے والے پیرامیٹرز سے پہلے دو ستارے ((**) شامل کرنے سے ایک ہی اثر حاصل ہوتا ہے۔ 3، آپریٹر + یہاں ایک منسلک فہرست کی تقریب کے طور پر استعمال کیا جاتا ہے، اس کی ترجیح آپریٹر سے زیادہ ہے، لہذا اس کے ارد گرد اضافی بریکٹ شامل کرنے کی ضرورت نہیں ہے a_list_of_args + z. 4، 2to3 اسکرپٹ پیچیدہ اطلاق () کالوں کو تبدیل کرنے کے لئے کافی ذہین ہے، بشمول ماڈیول میں درآمد افعال کو کال کرنے کے لئے.
پیتھون 2 میں، آپ کو ایک سٹرنگ پر اندرونی فعل کا استعمال کر سکتے ہیں، جس میں کارکردگی کو بہتر بنانے کے لئے اندرونی فعل کو محدود کیا جاسکتا ہے۔ پیتھون 3 میں، اندرونی فعل کو sys ماڈیول میں منتقل کیا گیا ہے۔
نوٹ | پِیٹون 2 | پطرون 3 |
---|---|---|
① | intern ((aString) | sys.intern ((aString) |
جیسا کہ پرنٹ کا بیان پیتھون 3 میں ایک فنکشن بن جاتا ہے ، اسی طرح ایک ایگزیکٹو بیان بھی ہے۔ ؛exec () فنکشن کسی بھی قسم کے پیتھون کوڈ پر مشتمل کسی بھی سٹرنگ کو بطور پیرامیٹر استعمال کرتا ہے ، اور پھر اسے کسی ایگزیکٹو بیان یا اظہار کی طرح انجام دیتا ہے۔ ؛exec () اورeval () کے مترادف ہے ، لیکن exec () زیادہ مضبوط اور زیادہ ہنر مند ہے۔ ؛(eval () فنکشن صرف ایک ہی اظہار کو انجام دے سکتا ہے ، لیکن exec () متعدد جملے انجام دے سکتا ہے ، درآمد ، درآمد ، اور فنکشن کا اعلان کرتا ہے۔
نوٹ | پِیٹون 2 | پطرون 3 |
---|---|---|
① | exec کوڈString | exec (کوڈ) |
② | exec codea_global_namespace میں سٹرنگ | exec ((کوڈString, a_global_namespace) |
③ | exec codea_global_namespace،a_local_namespace میں تار | exec ((کوڈسٹرنگ، a_global_namespace،a_local_namespace) |
1، اس کی سب سے آسان شکل میں، کیونکہ exec ((() اب ایک فعل ہے، نہ کہ ایک جملہ، 2to3 اس سٹرنگ کی شکل میں کوڈ کو قوسین کے ساتھ گھیر لے گا۔ 2، پیتھون 2 میں exec بیان نام کی جگہ کی وضاحت کر سکتے ہیں، اور کوڈ کو اس نجی جگہ پر پرائیویٹ جگہ پر عملدرآمد کیا جائے گا. پیتھون 3 میں بھی ایسا ہی کام کرتا ہے؛ آپ کو صرف نام کی جگہ کو دوسرے پیرامیٹر کے طور پر عملدرآمد کرنے کی ضرورت ہے. مزید حیرت انگیز بات یہ ہے کہ پیتھون 2 میں exec بیان ایک مقامی نام کی جگہ (مثلاً ایک تقریب میں بیان کردہ متغیر) کی وضاحت بھی کرسکتا ہے۔
جیسا کہ پچھلے exec بیانات میں، پیتھون 2 میں execfile بیانات کو بھی استعمال کیا جا سکتا ہے ایک تار کے طور پر پیتھون کوڈ کو انجام دینے کے لئے؛ فرق یہ ہے کہ exec ایک تار کا استعمال کرتا ہے جبکہ execfile ایک فائل کا استعمال کرتا ہے۔ پیتھون 3 میں، execfile بیانات کو ہٹا دیا گیا ہے. اگر آپ واقعی میں ایک فائل میں پطرون کوڈ کو چلانے کے لئے چاہتے ہیں ((لیکن آپ اسے درآمد نہیں کرنا چاہتے ہیں) ، آپ کو اس فائل کو کھولنے کی طرف سے کر سکتے ہیں، اس کے مواد کو پڑھیں، اور اس کے بعد کال کریں compile) عالمی تقریب ((پیتون تشریح کوڈ کو مرتب کرنے کے لئے مجبور کریں، اور پھر نئے exec فنکشن کو کال کریں)).
نوٹ | پِیٹون 2 | پطرون 3 |
---|---|---|
① | execfile (( |
exec(compile(open( |
پیتھون 2 میں ، کسی بھی اعتراض کی سٹرنگ کی نمائندگی کرنے کے لئے ، کسی طرح اعتراض کو انٹرسکوٹس میں لپیٹنا ہے (مثلا))x
) کا خصوصی نحو ہے۔ یہ صلاحیت اب بھی پائتھون 3 میں موجود ہے ، لیکن آپ کو اس سلسلے کی نمائندگی کرنے کے لئے اینٹی کوٹیشن کا استعمال نہیں کر سکتے ہیں۔ آپ کو گلوبل فنکشن repr استعمال کرنے کی ضرورت ہے۔
نوٹ | پِیٹون 2 | پطرون 3 |
---|---|---|
① | `x` | repr ((x) |
② | ` |
repr (( |
1، یاد رکھیں، x کچھ بھی ہو سکتا ہے
اس کے علاوہ، ہم نے اس بات کا یقین کیا ہے کہ ہم اس کے بارے میں بات کر رہے ہیں، اور ہم اس کے بارے میں بات کر رہے ہیں.
نوٹ | پِیٹون 2 | پطرون 3 |
---|---|---|
① | کوشش: درآمد mymodule سوائے درآمدError، e پاس |
کوشش کریں: درآمد mymodule کے علاوہ درآمدError کے طور پر ای: پاس |
② | کوشش کریں: درآمد mymodule سوائے (RuntimeError، درآمدError) ، e پاس |
کوشش کریں: درآمد mymodule سوائے (RuntimeError، درآمدError) کے طور پر e: پاس |
③ | کوشش کریں: درآمد mymodule سوائے درآمدError: پاس |
کوئی تبدیلی نہیں |
④ | کوشش کریں: درآمد mymodule سوائے: پاس |
کوئی تبدیلی نہیں |
1، جب کہ پیتھون 2 میں غیر معمولی اقسام کے بعد کوما شامل کیا جاتا ہے، پیتھون 3 میں ایک نیا کلیدی لفظ استعمال کیا جاتا ہے، جیسا کہ؛ 2، کلیدی لفظ as کو ایک ہی وقت میں متعدد قسم کے غیر معمولی حالات کو پکڑنے کے لئے بھی استعمال کیا جاسکتا ہے۔ 3، اگر آپ کو ایک غیر معمولی پکڑا جاتا ہے، لیکن غیر معمولی اعتراض کو خود تک رسائی حاصل کرنے کے لئے تیار نہیں ہیں، تو Python 2 اور Python 3 کے لئے نحو ایک ہی ہے. 4، اسی طرح، اگر آپ تمام استثناءات کو پکڑنے کے لئے ایک حفاظتی طریقہ کار استعمال کرتے ہیں تو، پیتھون 2 اور پیتھون 3 میں نحو ایک جیسی ہے. 5، جب ماڈیول (یا زیادہ تر دیگر معاملات) درآمد کرتے ہو تو آپ کو اس طریقہ کار کو یقینی طور پر استعمال نہیں کرنا چاہئے (مذکورہ بالا فال بیک کا حوالہ دیتے ہوئے) ؛ ورنہ ، پروگرام غیر معمولی طور پر گرفت میں لے سکتا ہے جیسے کی بورڈ انٹروٹ (اگر صارف Ctrl-C پر پروگرام کو روکتا ہے) ، جس سے ڈیبگنگ زیادہ مشکل ہوجاتی ہے۔
پیتھون 3 میں، اپنی مرضی کے مطابق غیر معمولی نحو کو پھینکنے کے لئے معمولی تبدیلیاں ہیں۔
نوٹ | پِیٹون 2 | پطرون 3 |
---|---|---|
① | MyException کو بلند کریں | تبدیل نہیں ہوا |
② | MyException، |
raise MyException (( |
③ | raise MyException, |
raise MyException (( |
④ | غیر معاون |
1، غیر معمولی غلطیوں کو چھوڑنا جو صارف کی اپنی مرضی کے مطابق غلط معلومات کے ساتھ نہیں آتے ہیں، اس کی سب سے آسان شکل میں، نحو تبدیل نہیں ہوتا ہے۔ 2، جب آپ صارف کی اپنی مرضی کے مطابق غلطی کے ساتھ ایک غیر معمولی کو پھینکنے کے لئے چاہتے ہیں تو، تبدیلی واضح ہے؛ پیتھون 2 غیر معمولی اور غلط معلومات کو ایک کوما کے ساتھ الگ کرتا ہے؛ پیتھون 3 غیر معمولی کو ایک پیرامیٹر کے طور پر غلط معلومات کو منتقل کرتا ہے۔ 3، پیتھون 2 ایک زیادہ پیچیدہ نحو کی حمایت کرتا ہے جو صارف کی اپنی مرضی کے مطابق ریورس (اسٹیک ٹریس، اسٹیک ٹریکنگ) کے ساتھ ایک غیر معمولی چیز کو پھینک دیتا ہے۔ آپ پیتھون 3 میں بھی ایسا کرسکتے ہیں، لیکن نحو بالکل مختلف ہے۔ 4، پیتھون 2 میں، آپ کو ایک غیر معمولی قسم کے ساتھ ایک غیر معمولی پیغام کے ساتھ ایک غیر معمولی قسم کو پھینک سکتے ہیں. پیتھون 3 میں، یہ شکل اب معاون نہیں ہے. 2to3 آپ کو انتباہ کرے گا کہ یہ خود کار طریقے سے اس نحو کو ٹھیک نہیں کرسکتا.
پیتھون 2 میں ، جنریٹر میں ایک پھینک (() طریقہ ہے۔ a_generator.throw (() کو کال کرنے سے جب جنریٹر کو روک دیا جاتا ہے تو ایک غیر معمولی پھینک دیا جاتا ہے ، اور پھر جنریٹر فنکشن کے ذریعہ حاصل کردہ اگلی قیمت کو واپس کردیا جاتا ہے۔ پیتھون 3 میں ، یہ فنکشن اب بھی دستیاب ہے ، لیکن نحوی طور پر تھوڑا سا مختلف ہے۔
نوٹ | پِیٹون 2 | پطرون 3 |
---|---|---|
① | a_generator.throw ((MyException) | کوئی تبدیلی نہیں |
② | a_generator.throw ((MyException, |
a_generator.throw(MyException( |
③ | a_generator.throw (( |
غیر معاون |
1، اس کی سب سے آسان شکل میں، جنریٹر غیر معمولی طور پر غیر معمولی طور پر غیر معمولی طور پر غیر معمولی طور پر غیر معمولی طور پر غیر معمولی طور پر غیر معمولی طور پر غیر معمولی طور پر غیر معمولی طور پر غیر معمولی طور پر غیر معمولی طور پر غیر معمولی طور پر غیر معمولی طور پر غیر معمولی طور پر غیر معمولی طور پر غیر معمولی طور پر غیر معمولی طور پر غیر معمولی طور پر غیر معمولی طور پر غیر معمولی طور پر غیر معمولی طور پر غیر معمولی طور پر غیر معمولی طور پر غیر معمولی طور پر غیر معمولی طور پر غیر معمولی طور پر غیر معمولی طور پر غیر معمولی طور پر غیر معمولی طور پر غیر معمولی طور پر غیر معمولی طور پر غیر معمولی طور پر غیر معمولی طور پر غیر معمولی طور پر غیر معمولی طور پر غیر معمولی طور پر غیر معمولی طور پر غیر معمولی طور پر غیر معمولی طور پر غیر معمولی طور پر غیر معمولی طور پر غیر معمولی طور پر غیر معمولی طور پر غیر معمولی طور پر غیر معمولی طور پر غیر معمولی طور پر غیر معمولی طور پر غیر معمولی طور پر غیر معمولی طور پر غیر معمولی طور پر غیر معمولی طور پر غیر معمولی طور پر غیر معمولی طور پر غیر معمولی طور پر غیر معمولی طور پر غیر معمولی طور پر غیر معمولی طور پر غیر معمولی طور پر غیر معمولی طور پر غیر معمولی طور پر غیر معمولی 2، اگر جنریٹر نے صارف کی اپنی مرضی کے مطابق غلطی کے ساتھ ایک استثناء کو پھینک دیا ہے تو، آپ کو اس غلطی کے پیغام کی سٹرنگ (error string) کو غیر معمولی کلاس میں منتقل کرنے کی ضرورت ہے تاکہ اسے مثال کے طور پر استعمال کیا جاسکے۔ 3، پیتھون 2 صرف غیر معمولی پیغامات کے ساتھ غیر معمولی پھینکنے کی بھی حمایت کرتا ہے۔ پیتھون 3 اس نحو کی حمایت نہیں کرتا ہے، اور 2to3 ایک انتباہی پیغام دکھاتا ہے جو آپ کو بتاتا ہے کہ آپ کو دستی طور پر اس کوڈ کو ٹھیک کرنے کی ضرورت ہے۔
پیتھون 2 میں ، ایک مخصوص حد تک اعداد حاصل کرنے کے دو طریقے ہیں: رینج ((() ، جو ایک فہرست واپس کرتا ہے ، اور رینج ((() ، جو ایک آریٹر واپس کرتا ہے۔ پیتھون 3 میں ، رینج ((() آریٹر واپس کرتا ہے ، اور xrange (()) اب موجود نہیں ہے۔
نوٹ | پِیٹون 2 | پطرون 3 |
---|---|---|
① | xrange ((10) | رینج ((10) |
② | a_list = رینج ((10) | a_list = فہرست (ریجن) |
③ | [i کے لئے اندر xrange ((10) ] | [i کے لئے اندرونی رینج ((10) ] |
④ | رینج میں i کے لئے: | کوئی تبدیلی نہیں |
⑤ | رقم ((مجموعہ)) | کوئی تبدیلی نہیں |
1، سب سے آسان صورت میں، 2to3 صرف xrange ((() کو range ((() میں تبدیل کرے گا۔ اگر آپ کا پیتھون 2 کوڈ range کا استعمال کرتا ہے تو ، 2to3 کو معلوم نہیں ہے کہ کیا آپ کو فہرست کی ضرورت ہے ، یا یہ کہ آیا ایک آریٹر بھی چلتا ہے۔ احتیاط کے طور پر ، 2to3 غلطیوں کا سامنا کرسکتا ہے ، اور پھر list کا استعمال کرتے ہوئے ، range کی واپسی کی قیمت کو فہرست کی قسم میں تبدیل کرنا چاہئے۔ 3، اگر فہرست تجزیہ میں xrange () فنکشن موجود ہے تو ، اس کی واپسی کی قدر کو فہرست میں تبدیل کرنے کی ضرورت نہیں ہے ، کیونکہ فہرست تجزیہ ایک بار بار کرنے والوں کے لئے بھی موثر ہے۔ 4، اسی طرح، for loop بھی آریٹرز پر کام کرتا ہے، لہذا یہاں بھی کچھ نہیں بدلتا ہے۔ 5، فنکشن sum () آریٹرز پر کام کرتا ہے، لہذا 2to3 یہاں بھی کوئی تبدیلی نہیں کرتا ہے۔ جیسے کہ ویو () کے بجائے فہرست کے لئے ایک لغت کے طریقہ کار کے طور پر واپسی کی قدر، یہ بھی من () ، میکس () ، رقم () ، فہرست () ، ٹپل () ، سیٹ () ، ترتیب () ، کسی بھی () ، تمام () کے لئے لاگو ہوتا ہے۔
پائتھون 2 میں دو گلوبل افعال ہیں جو کمانڈ لائن پر صارف کے ان پٹ کی درخواست کرنے کے لئے استعمال ہوتے ہیں۔ پہلا ان پٹ کہا جاتا ہے ، جو صارف کو پائتھون کے ایک اظہار میں داخل ہونے کا انتظار کرتا ہے اور پھر نتائج واپس کرتا ہے۔ دوسرا راؤ ان پٹ کہا جاتا ہے ، جو بھی صارف داخل کرتا ہے وہ واپس کرتا ہے۔ یہ ابتدائیوں کے لئے بہت الجھن کا باعث ہے ، اور یہ وسیع پیمانے پر پائتھون زبان کے لئے ایک گندگی کی چٹنی کے طور پر دیکھا جاتا ہے ((wart)) ؛ پائتھون 3 نے اس گندگی کو ان پٹ کے نام سے تبدیل کرکے اس کو ختم کردیا ہے ، لہذا اب ان پٹ بالکل اسی طرح کام کرتا ہے جس طرح سب نے ابتدائی طور پر توقع کی تھی۔
نوٹ | پِیٹون 2 | پطرون 3 |
---|---|---|
① | raw_input() | ان پٹ ((() |
② | raw_input (( |
ان پٹ (( |
③ | ان پٹ ((() | eval(input()) |
1، سب سے آسان شکل میں، raw_input (()) کو input (()) کے ساتھ تبدیل کیا جاتا ہے۔ 2، پیتھون 2 میں، raw_input () فنکشن ایک اشارے کو بطور پیرامیٹر متعین کرسکتا ہے۔ 3، اگر آپ واقعی میں صارف کو ایک پیتھون اظہار میں داخل کرنے کی درخواست کرنا چاہتے ہیں تو، نتائج کا حساب لگایا جا سکتا ہے، ان پٹ () فنکشن کو کال کرکے اور eval () کو واپس آنے والی قدر کو منتقل کر سکتے ہیں.
پیتھون 2 میں، فنکشن کے اندر کا کوڈ فنکشن کی اپنی خصوصی خصوصیات تک رسائی حاصل کرتا ہے۔ پیتھون 3 میں، مستقل مزاجی کے لئے، ان خصوصی خصوصیات کو دوبارہ نامزد کیا گیا ہے۔
نوٹ | پِیٹون 2 | پطرون 3 |
---|---|---|
① | a_function.func_name | a_function._نام_ |
② | a_function.func_doc | a_function._ڈاکٹر_ |
③ | a_function.func_defaults | a_function._ڈیفالٹس_ |
④ | a_function.func_dict | a_function._dict_ |
⑤ | a_function.func_closure | a_function._بندش_ |
⑥ | a_function.func_globals | a_function._گلوبل_ |
⑦ | a_function.func_code | a_function._کوڈ_ |
1،__name__ وصف ((اصل func_name) میں فنکشن کا نام شامل ہے۔ 2،__doc__ پراپرٹی ((اصل funcdoc) آپ کے ذریعہ کوڈ میں بیان کردہ دستاویز سٹرنگ ((docstring) پر مشتمل ہے 3،__defaults__ وصف (پہلے سے func_defaults) ایک عنصر سیٹ ہے جس میں پیرامیٹرز کی ڈیفالٹ اقدار محفوظ ہیں۔ 4،__dict__ وصف ((اصل func_dict) ایک نامیاتی جگہ ہے جو کسی بھی فنکشن کی وصف کی حمایت کرتی ہے۔ 5،__closure__ خاصیت (پہلا func_closure) ایک جزو سیٹ ہے جو سیل آبجیکٹ پر مشتمل ہے جس میں مفت متغیر پر فنکشن کی پابندیاں شامل ہیں۔ 6،__globals__ وصف ((اصل func_globals) ایک ماڈیول گلوبل نام کی جگہ کا حوالہ ہے جس میں فنکشن خود کو اس نام کی جگہ میں بیان کیا گیا ہے۔ 7،__code__ وصف (اصل میں func_code) ایک کوڈ اعتراض ہے جو مرتب شدہ فنکشنل جسم کی نمائندگی کرتا ہے۔
پیتھون 2 میں ، فائل آبجیکٹ کا ایک xreadlines () طریقہ ہے ، جو ایک بار میں ایک بار فائل کو پڑھنے کے لئے ایک آریسر کو واپس کرتا ہے۔ یہ خاص طور پر فور لوپ میں مفید ہے۔ در حقیقت ، پیتھون 2 کے بعد کے ورژن نے فائل آبجیکٹ کو خود ہی اس طرح کی خصوصیت شامل کردی ہے۔
پیتھون 3 میں ، xreadlines ()) طریقہ اب دستیاب نہیں ہے۔ 2to3 سادہ حالات کو حل کرسکتا ہے ، لیکن کچھ کنارے کے معاملات میں دستی مداخلت کی ضرورت ہوتی ہے۔
نوٹ | پِیٹون 2 | پطرون 3 |
---|---|---|
① | a_file.xreadlines میں لائن کے لئے: | a_file میں لائن کے لئے: |
② | a_file.xreadlines(5) میں لائن کے لئے: | کوئی تبدیلی نہیں (ٹوٹا ہوا) |
1، اگر آپ نے پہلے بغیر کسی پیرامیٹر کے xreadlines کو بلایا تھا، 2to3 اسے فائل کے آبجیکٹ میں تبدیل کر دیتا ہے۔ پیتھون 3 میں، اس طرح کے تبدیل شدہ کوڈ کو پہلے کی طرح کام کرنا پڑتا ہے: ایک بار فائل کی ایک لائن پڑھنا، اور پھر لوپ کے لئے لوپ کو انجام دینا۔
2، اگر آپ نے پہلے ایک پیرامیٹر ((ہر بار پڑھی جانے والی لائنوں کی تعداد) کو xreadlines کو بلایا ہے ، 2to3 آپ کے لئے Python 2 سے Python 3 میں تبادلوں کو مکمل نہیں کرسکتا ہے ، تو آپ کا کوڈ اس طرح ناکام ہو جائے گا: AttributeError:
پیتھون 2 میں، آپ ایک نامعلوم لیمبڈا فنکشن (anonymous lambda function) کی وضاحت کر سکتے ہیں، جس سے یہ فنکشن دراصل متعدد پیرامیٹرز کو قبول کرنے کے قابل ہو جائے گا، کیونکہ آپ نے اس عنصر کے عناصر کی تعداد کو بطور پیرامیٹرز متعین کیا ہے۔ دراصل، پیتھون 2 کے تشریح کار اس عنصر کو نامعلوم پیرامیٹرز کے طور پر غیر پیک کرتے ہیں، اور پھر آپ انہیں لیمبڈا فنکشن میں نام کے ذریعہ حوالہ دیتے ہیں۔ پیتھون 3 میں، آپ اب بھی ایک یونٹ گروپ کو لیمبڈا فنکشن کے پیرامیٹرز کے طور پر پاس کر سکتے ہیں، لیکن پیتھون تشریح کار اسے نامعلوم پیرامیٹرز کے طور پر تجزیہ نہیں کرے گا۔ آپ کو ہر پیرامیٹر کو پوزیشن انڈیکس کے ذریعہ حوالہ دینے کی ضرورت ہے۔
نوٹ | پِیٹون 2 | پطرون 3 |
---|---|---|
① | لیمبڈا (x،): x+ f ((x) | لیمبڈا x1: x1[0]+f(x1[0]) |
② | لیمبڈا (x، y): x+f(y) | لیمبڈا x_y: x_y[0]+f(x_y[1]) |
③ | لیمبڈا (x،(y،z)): x+ y+ z | لیمبڈا x_y_z: x_y_z[0]+x_y_z[1][0]+ x_y_z[1][1] |
④ | لیمبڈا x، y، z: x+y + z | تبدیل نہیں ہوا |
1، اگر آپ نے ایک لیمبڈا فنکشن کی وضاحت کی ہے، تو یہ ایک عنصر پر مشتمل اجزاء کا استعمال کرتا ہے جس میں ایک عنصر ہے، اور پیتھون 3 میں، یہ ایک لیمبڈا فنکشن میں تبدیل کیا جاتا ہے جس میں x1[0] کے حوالہ جات شامل ہیں. x1 ایک 2to3 اسکرپٹ ہے جو اصل اجزاء میں نام کے پیرامیٹرز کی بنیاد پر خود بخود پیدا ہوتا ہے. 2، دو عناصر پر مشتمل ایک جزو ((x، y) کو بطور پیرامیٹر استعمال کرتے ہوئے ، لیمبڈا فنکشن کو x_y میں تبدیل کیا جاتا ہے ، جس میں دو پوزیشن پیرامیٹرز ہیں ، یعنی x_y [0] اور x_y [1]؛ 3، 2to3 اسکرپٹ یہاں تک کہ نمبڈا افعال کے طور پر نمبڈا افعال کا استعمال کرتے ہوئے نمبڈ نامہ کے لئے نمبڈا افعال کا استعمال کرسکتے ہیں۔ اس کے نتیجے میں پیدا ہونے والا کوڈ تھوڑا سا مشکل ہے، لیکن یہ پیتھون 3 میں وہی اثر ہے جو پیتھون 2 میں اصل کوڈ میں ہے۔ 4، آپ ایک لامبڈا فنکشن کو متعدد پیرامیٹرز کا استعمال کرتے ہوئے بیان کرسکتے ہیں۔ اگر پیرامیٹرز کے ارد گرد کوئی قوس و قوس نہیں ہے تو ، پیتھون 2 اسے ایک لامبڈا فنکشن کے طور پر پیش کرے گا جس میں متعدد پیرامیٹرز ہوں گے۔ اس لامبڈا فنکشن کے جسم میں ، آپ نام کے ذریعہ ان پیرامیٹرز کا حوالہ دیتے ہیں ، جیسا کہ دوسرے قسم کے افعال میں ہوتا ہے۔ یہ نحو پیتھون 3 میں بھی کام کرتا ہے۔
پیتھون 2 میں ، کلاس کے طریقوں کو ان کی کلاس آبجیکٹ (class object) کی وضاحت کرنے تک رسائی حاصل ہے ، اور طریقہ کار آبجیکٹ (method object) تک بھی رسائی حاصل ہے۔ im_self کلاس کا مثال کا اعتراض ہے؛ im_func فنکشن کا اعتراض ہے ، اور im_class کلاس خود ہے۔ پیتھون 3 میں ، ان خصوصیات کا نام تبدیل کردیا گیا ہے تاکہ دیگر خصوصیات کے ناموں کے معاہدے پر عمل کیا جاسکے۔
نوٹ | پِیٹون 2 | پطرون 3 |
---|---|---|
① | aClassInstance.aClassMethod.im_func | aClassInstance.aClassMethod._ ایک کلاس کی مثال.funk_ |
② | aClassInstance.aClassMethod.im_self | aClassInstance.aClassMethod._ ایک کلاس کی مثال.خود_ |
③ | aClassInstance.aClassMethod.im_class | aClassInstance.aClassMethod._ ایک کلاس کی مثال.خود_._کلاس_ |
پیتھون 2 میں، آپ اپنی کلاسیں بنا سکتے ہیں اور انہیں بولیسی سیاق و سباق میں استعمال کر سکتے ہیں۔ مثال کے طور پر، آپ اس کلاس کو مثال کے طور پر استعمال کرسکتے ہیں اور اس مثال کے اعتراض کو ایک اگر بیان میں استعمال کرسکتے ہیں۔ اس مقصد کے لئے، آپ کو ایک خاص_غیر صفر_() طریقہ، جس کی واپسی کی قدر True یا False ہے، اس طریقہ کو بلایا جاتا ہے جب مثال کے طور پر اعتراض Boolean کے سیاق و سباق میں ہے.بول_()。
نوٹ | پِیٹون 2 | پطرون 3 |
---|---|---|
① | کلاس A: def _غیر صفر_(خود): پاس |
کلاس A: def _بول_(خود): پاس |
② | کلاس A: def _غیر صفر_(خود، ایکس، وائی): پاس |
کوئی تبدیلی نہیں |
1، جب بول کے سیاق و سباق میں ایک کلاس اعتراض استعمال کیا جاتا ہے، پائتن 3 کال کرتا ہے_بول_(،) کے بجائے _غیر صفر_() ◄ 2، تاہم، اگر آپ کے پاس ایک تعریف ہے جس میں دو پیرامیٹرز استعمال ہوتے ہیںغیر صفر_() طریقہ، 2to3 اسکرپٹ یہ فرض کرتا ہے کہ آپ نے جس طریقہ کو بیان کیا ہے اس کا کوئی اور استعمال ہے، لہذا کوڈ میں کوئی تبدیلی نہیں کی جائے گی۔
پیتھون 2 اور پیتھون 3 کے درمیان ، آٹھ عددی (اوکٹال) نمبر کی تعریف کے نحو میں معمولی تبدیلی آئی ہے۔
نوٹ | پِیٹون 2 | پطرون 3 |
---|---|---|
① | x = 0755 | x = 0o755 |
چونکہ لمبے اور پورے سائز کو ایک ساتھ ضم کیا گیا ہے ، لہذا sys.maxint مستقل درست نہیں ہے۔ لیکن چونکہ یہ قدر مخصوص پلیٹ فارم کی جانچ پڑتال کی صلاحیتوں کے لئے مفید ہے ، لہذا اس کو پائتھون 3 نے برقرار رکھا اور اس کا نام تبدیل کردیا۔ sys.maxsize.
نوٹ | پِیٹون 2 | پطرون 3 |
---|---|---|
① | سے sys importmaxint | sys importmaxsize سے |
② | a_function ((sys.maxint) | a_function ((sys.maxsize) |
1، maxint کو maxsize کردیا گیا ہے۔ 2، تمام sys.maxint sys.maxsize میں تبدیل ہوگئے ہیں۔
پیتھون 2 میں، آپ کو عالمی فنکشن کا استعمال کر سکتے ہیں callable () چیک کرنے کے لئے کہ آیا ایک اعتراض کو بلایا جا سکتا ہے (callable، مثال کے طور پر ایک تقریب) ؛ پیتھون 3 میں، یہ عالمی فنکشن منسوخ کر دیا گیا ہے.کال_() کی موجودگی۔
نوٹ | پِیٹون 2 | پطرون 3 |
---|---|---|
① | بلایا جا سکتا ہے ((کچھ بھی) | کچھ بھی نہیں ہے، |
پیتھون 2 میں ، گلوبل فنکشن زپ ((() بطور پیرامیٹر کسی بھی متعدد سیریز کا استعمال کرسکتا ہے ، جو اجزاء پر مشتمل فہرست واپس کرتا ہے۔ پہلا اجزاء ہر سیریز کا پہلا عنصر رکھتا ہے۔ دوسرا اجزاء ہر سیریز کا دوسرا عنصر رکھتا ہے۔ اس کے بعد آگے بڑھتا ہے۔ پیتھون 3 میں ، زپ ((() ایک آریٹر ، فہرست نہیں لوٹاتا ہے۔
نوٹ | پِیٹون 2 | پطرون 3 |
---|---|---|
① | zip ((a، b، c) | فہرست ((زپ ((ا، ب، ج)) |
② | d.join ((zip ((a، b، c)) | کوئی تبدیلی نہیں |
سب سے آسان شکل میں، آپ zip () فنکشن کے پچھلے فنکشن کو واپس کرنے کے لئے list () فنکشن کو زپ () فنکشن کو کال کرکے واپس کرسکتے ہیں، list () فنکشن اس زپ () فنکشن کو واپس کرنے والے آریٹر میں گھومتا ہے، اور پھر نتائج کی فہرست کو واپس کرتا ہے۔ سیریز کے تمام عناصر کو پہلے ہی گھومنے والے سیاق و سباق کے ماحول میں (مثال کے طور پر یہاں join () کے طریقہ کار کو کال کرنے کے لئے) ، zip () واپس آنے والا آریٹر کام کرتا ہے۔ 2to3 اسکرپٹ ان حالات کا پتہ لگاتا ہے اور آپ کے کوڈ میں کوئی تبدیلی نہیں کرتا ہے۔
پیتھون 2 میں ، معیاری غلطی تمام دیگر اندرونی غیر معمولی بنیادی کلاسوں کے علاوہ ، اسٹاپ آئٹریشن ، جنریٹر ایگزٹ ، کی بورڈ انٹروپٹ ، سسٹم ایگزٹ ہے۔ پیتھون 3 میں ، معیاری غلطی کو ختم کردیا گیا ہے۔ استثناء کا استعمال کریں۔
نوٹ | پِیٹون 2 | پطرون 3 |
---|---|---|
① | x = معیاری غلطی() | x = استثناء |
② | x = معیاری غلطی ((a، b، c) | x = استثناء ((a، b، c) |
types ماڈیول میں مختلف قسم کے مستقلات ہیں جو آپ کو کسی شے کی قسم کا تعین کرنے میں مدد کرتے ہیں۔ پیتھون 2 میں اس میں مستقلات شامل ہیں جو تمام بنیادی ڈیٹا کی اقسام کی نمائندگی کرتے ہیں ، جیسے ڈکٹ اور انٹ۔ پیتھون 3 میں ، یہ مستقلات پہلے ہی ختم کردیئے گئے ہیں۔ صرف بنیادی قسم کے نام کا استعمال کرکے ان کی جگہ لینا ضروری ہے۔
نوٹ | پِیٹون 2 | پطرون 3 |
---|---|---|
types.UnicodeType | str | |
types.StringType | بائٹس | |
types.DictType | ڈکٹ | |
types.IntType | int | |
types.LongType | int | |
types.ListType | فہرست | |
types.NoneType | قسم ((کوئی نہیں) | |
types.BooleanType | بول | |
types.BufferType | میموری ویو | |
types.ClassType | قسم | |
types.ComplexType | پیچیدہ | |
types.EllipsisType | قسم ((ایلپسیس) | |
types.FloatType | فلوٹ | |
types.ObjectType | چیز | |
types.NotImplementedType | قسم ((عمل میں نہیں لایا گیا) | |
types.SliceType | ٹکڑا | |
types.TupleType | ٹپل | |
types.TypeType | قسم | |
types.XRangeType | حد |
types.StringType کو بائٹس کے طور پر میپ کیا گیا ہے ، نہ کہ اسٹر ، کیونکہ پائتھون 2 میں تھریڈ سٹرنگ ٹائپ (غیر یونیکوڈ انکوڈڈ سٹرنگ ، یعنی عام سٹرنگ) دراصل بائٹس کی ایک ترتیب ہے جو کسی قسم کے کردار کے ساتھ انکوڈڈ ہے۔
isinstance () فنکشن چیک کرتا ہے کہ آیا کوئی اعتراض کسی خاص قسم کا ہے یا قسم کا ہے۔ پطرون 2 میں ، آپ کسی قسم کی قسم سے بنا ہوا ایک عنصر پطرون کو پاس کرسکتے ہیں ، اور اگر یہ اعتراض کسی بھی قسم کا ہے تو ، فنکشن سچ واپس کرتا ہے۔ پطرون 3 میں ، آپ پھر بھی ایسا کرسکتے ہیں ، لیکن اس کی سفارش نہیں کی جاتی ہے کہ آپ ایک قسم کو بطور پیرامیٹر دو بار پاس کریں۔
نوٹ | پِیٹون 2 | پطرون 3 |
---|---|---|
isinstance(x،(int،float،int)) | isinstance ((x، ((int، float)) |
پائتھون 2 میں دو قسم کے اسٹرنگز ہیں: یونیکوڈ انکوڈڈ سٹرنگز اور غیر یونیکوڈ انکوڈڈ سٹرنگز۔ لیکن اصل میں ایک اور قسم بھی ہے ، جس کا نام بیسٹرنگ ہے۔ یہ ایک تجریدی ڈیٹا ٹائپ ہے ، جو کہ str اور یونیکوڈ ٹائپ کی ایک سپر کلاس ہے۔ اسے براہ راست نہیں بلایا جاسکتا ہے یا مثال کے طور پر نہیں بنایا جاسکتا ہے ، لیکن آپ اسے بطور مثال استعمال کرسکتے ہیں تاکہ یہ معلوم کیا جاسکے کہ آیا کوئی شے یونیکوڈ سٹرنگ ہے یا غیر یونیکوڈ سٹرنگ۔ پائتھون 3 میں ، صرف ایک ہی قسم کی سٹرنگ ہے ، لہذا بیسٹرنگ کی ضرورت نہیں ہے۔
نوٹ | پِیٹون 2 | پطرون 3 |
---|---|---|
isinstance ((x، بیس سٹرنگ) | isinstance ((x، str) |
پیتھون 2.3 میں itertools ماڈیول متعارف کرایا گیا ہے، جس میں گلوبل فنکشنز zip،map،filter کے متغیرات (variants) کی وضاحت کی گئی ہے، جن کی واپسی کی اقسام لسٹ کے بجائے آریٹرز ہیں۔ پیتھون 3 میں، کیونکہ ان گلوبل فنکشنز کی واپسی کی اقسام اصل میں آریٹرز ہیں، لہذا ان itertools میں ان متغیر افعال کو ختم کر دیا گیا ہے۔
نوٹ | پِیٹون 2 | پطرون 3 |
---|---|---|
① | itertools.izip (a، b) | zip ((a، b) |
② | itertools.imap ((a، b) | نقشہ (a، b) |
③ | itertools.ifilter ((a، b) | فلٹر (a، b) |
④ | سے itertools درآمد imap، izip، foo | سے itertools درآمد foo |
1، عالمی سطح پر استعمال کیا جاتا ہے zip ((() تقریب کے بجائے itertools.izip ((() ‖ 2、 itertools.imap کے بجائے map استعمال کریں۔ 3،itertools.ifilter ((() filter ((() میں تبدیل ہو گیا ہے۔ 4،itertools ماڈیول اب بھی پیتھون 3 میں موجود ہے، یہ صرف ان افعال کو شامل نہیں کرتا ہے جو عالمی نام کی جگہ میں منتقل ہوگئے ہیں۔ 2to3 اسکرپٹ ان درآمداتی بیانات کو ختم کرنے کے لئے کافی ذہین ہے جو اب مفید نہیں ہیں، جبکہ دیگر درآمداتی بیانات کی سالمیت کو برقرار رکھتے ہیں.
غیر معمولی معاملات سے نمٹنے کے لئے ، آپ کو sys ماڈیول میں تین متغیرات تک رسائی حاصل ہے: sys.exc_type ، sys.exc_value ، sys.exc_traceback ؛ (اصل میں ، یہ پیتھون 1 کے دور میں موجود تھے۔) پیتھون 1.5 کے بعد سے ، نئے sys.exc_info کی وجہ سے ، ان تینوں متغیرات کا استعمال کرنے کی سفارش نہیں کی جاتی ہے ، جو کہ ان تینوں عناصر پر مشتمل ایک مجموعہ ہے۔
نوٹ | پِیٹون 2 | پطرون 3 |
---|---|---|
sys.exc_type | sys.exc_info (() [0] | |
sys.exc_value | sys.exc_info (() [1] | |
sys.exc_traceback | sys.exc_info (() [2] |
پیتھون 2 میں، اگر آپ کو ایک فہرست کا تجزیہ لکھنے کی ضرورت ہے جس میں اجزاء کی تعداد میں اضافہ ہوتا ہے، تو آپ کو اجزاء کی قدر کے ارد گرد قوسین شامل کرنے کی ضرورت نہیں ہے۔ پیتھون 3 میں، یہ قوسین ضروری ہیں۔
نوٹ | پِیٹون 2 | پطرون 3 |
---|---|---|
[i کے لئے 1,2] | [i کے لئے iin(1,2)] |
پیتھون 2 میں os.getcwd () نامی ایک فنکشن ہے جو موجودہ ورک ڈائرکٹری کو بطور ((غیر یونیکوڈ انکوڈڈ) اسٹرنگ لوٹاتا ہے۔ چونکہ جدید فائل سسٹم ڈائرکٹری ناموں سے نمٹنے کے قابل ہیں جو کتنے حروف کوڈت ہیں ، لہذا پیتھون 2.3 میں os.getcwdu () فنکشن متعارف کرایا گیا ہے۔ os.getcwdu () فنکشن موجودہ ورک ڈائرکٹری کو یونیکوڈ انکوڈڈ اسٹرنگ کے ساتھ لوٹاتا ہے۔
نوٹ | پِیٹون 2 | پطرون 3 |
---|---|---|
os.getcwdu (() | os.getcwd (() |
پیتھون 2 میں، آپ کلاس کے بیان میں میٹاکلاس کے پیرامیٹرز کی وضاحت کرکے یا کسی خاص کلاس کی سطح پر __میٹاکلاس__ کی خاصیت کی وضاحت کرکے میٹاکلاس تشکیل دے سکتے ہیں۔
نوٹ | پِیٹون 2 | پطرون 3 |
---|---|---|
① | کلاس C ((میٹا کلاس=پاپایا میٹا): پاس |
تبدیل نہیں ہوا |
② | کلاس وِپ:میٹا کلاس_= پاپایا میٹا | class Whip ((metaclass=PapayaMeta): پاس |
③ | کلاس C ((ویپپر، بیٹر): _میٹا کلاس_= پاپایا میٹا |
کلاس C ((ویپر،بیٹر،میٹا کلاس=پپایا میٹا): پاس |
1، کلاس کے اعلان کے وقت میٹا کلاس کے متبادل کا اعلان کریں، جو کہ پیتھون 2 اور پیتھون 3 دونوں میں درست ہے، وہ ایک جیسے ہیں۔ 2، کلاس کی تعریف میں بیان کیا گیا ہے کہ __metaclass__ صفات پیتھون 2 میں درست ہیں، لیکن پیتھون 3 میں درست نہیں ہیں۔ 3، 2to3 ایک قابل اطلاق کلاس بیان کی تعمیر کر سکتے ہیں، یہاں تک کہ اگر یہ کلاس کئی والدین سے وراثت میں ہے.
مندرجہ ذیل اصلاحات بنیادی طور پر حقیقی اصلاحات نہیں ہیں۔ اس کا مطلب یہ ہے کہ وہ صرف کوڈ کے انداز کی چیزیں ہیں ، جو کوڈ کی نوعیت سے متعلق نہیں ہیں۔ تاہم ، پیتھون کے ڈویلپرز کو کوڈ کے انداز کو زیادہ سے زیادہ یکساں بنانے میں بہت دلچسپی ہے۔ اس کے لئے ، ایک خصوصی سرکاری گائیڈ ہے جس میں پیتھون کوڈ کے انداز کی وضاحت کی گئی ہے۔
پیتھون 2 میں، ایک لفظی سیٹ کی وضاحت کرنے کا واحد طریقہ سیٹ کو کال کرنا ہے۔ پیتھون 3 میں یہ اب بھی کام کرتا ہے، لیکن نئے لٹریل نوٹیشن کا استعمال: بڑے قوسین کا استعمال کرتے ہوئے ایک واضح طریقہ ہے۔ یہ طریقہ خالی سیٹ کے علاوہ بھی کام کرتا ہے، کیونکہ لغت بھی بڑے قوسین کا استعمال کرتی ہے، لہذا {} ایک خالی لغت کی نمائندگی کرتا ہے، نہ کہ ایک خالی سیٹ۔
2to3 اسکرپٹ ڈیفالٹ کی طرف سے set() لٹریل ویلیو کو ٹھیک نہیں کرتا ہے۔ اس کو چالو کرنے کے لئے ، کمانڈ لائن پر 2to3 کو کال کرتے وقت -f set_literal پیرامیٹر کی وضاحت کریں۔
نوٹ | پہلے | کے بعد |
---|---|---|
سیٹ (([1,2,3]) | {1,2,3} | |
سیٹ (((1,2,3)) | {1,2,3} | |
سیٹ (([i کے لئے iin a_sequence]) | {i کے لئے iin a_sequence} |
C میں لاگو کیا گیا ایک پیتھون آبجیکٹ ایک بُفیر انٹرفیس (بفر انٹرفیس) نکال سکتا ہے جو دوسرے پیتھون کوڈ کو براہ راست میموری کے ایک ٹکڑے کو پڑھنے اور لکھنے کی اجازت دیتا ہے۔ یہ آواز بہت طاقتور ہے ، اور یہ بھی اتنا ہی خوفناک ہے۔) پیتھون 3 میں ، بفر (بفر) کو میموری ویو کا نام دیا گیا ہے۔ (حقیقی ترمیم زیادہ پیچیدہ ہے ، لیکن آپ ان اختلافات کو تقریبا ignore نظرانداز کرسکتے ہیں۔)
2to3 اسکرپٹ ڈیفالٹ کی طرف سے buffer (() تقریب کو ٹھیک نہیں کرتا ہے۔ اس تقریب کو چلانے کے لئے ، کمانڈ لائن پر 2to3 کو کال کرتے وقت -f buffer پیرامیٹر کی وضاحت کریں۔
نوٹ | پہلے | کے بعد |
---|---|---|
x = بفر ((y) | x = میموری ویو ((y) |
اگرچہ پیتھون میں انڈینٹنگ اور آؤٹ ڈینٹنگ کے لئے خالی جگہوں کے بارے میں سخت تقاضے ہیں ، لیکن دوسرے پہلوؤں میں خالی جگہوں کا استعمال کرنے کے لئے پیتھون بہت آزاد ہے۔ فہرستوں ، اجزاء ، مجموعوں اور لغات میں ، خالی جگہوں کو کوما کے سامنے یا پیچھے ظاہر کیا جاسکتا ہے ، جس سے کوئی برا اثر نہیں پڑتا ہے۔ تاہم ، پیتھون کوڈ اسٹائل گائیڈ میں بتایا گیا ہے کہ کوما سے پہلے کوئی خالی جگہ نہیں ہوسکتی ہے ، اور کوما کے بعد ایک خالی جگہ شامل ہونی چاہئے۔ اگرچہ یہ محض ایک جمالیاتی لحاظ سے غور کرنے والا کوڈ ہے جو اب بھی ٹھیک کام کرسکتا ہے ، پیتھون 2 اور پیتھون 3 میں بھی ، لیکن 2to3 اسکرپٹ آپ کے لئے دستی معیار کے مطابق اس کی مرمت کرسکتا ہے۔
2to3 اسکرپٹ ڈیفالٹ کی طرف سے کوما کے ارد گرد خالی جگہوں کی مرمت نہیں کرتا ہے۔ اس خصوصیت کو چالو کرنے کے لئے، کمانڈ لائن پر 2to3 کو کال کرنے پر -f wscomma کی وضاحت کی گئی ہے۔
نوٹ | پہلے | کے بعد |
---|---|---|
a،b | a، b | |
{a:b} | {a: b} |
پیتھون کمیونٹی میں بہت سے اصول قائم کیے گئے ہیں۔ مثال کے طور پر ، جبکہ 1: لوپ ، جو پیتھون 1 کی طرف جاتا ہے ؛ ((پائتھون میں پیتھون 2.3 تک کوئی حقیقی معنی کی بول ٹائپ نہیں تھی ، لہذا ڈویلپرز نے پہلے 1 اور 0 کے متبادل کا استعمال کیا تھا۔) جدید پیتھون پروگرامرز کو ان اصولوں کا استعمال کرنے کے لئے اپنے دماغ کو ورزش کرنا چاہئے۔
2to3 اسکرپٹ ڈیفالٹ کی طرف سے ان طریقوں کو ٹھیک نہیں کرتا ہے۔ اس خصوصیت کو چالو کرنے کے لئے ، کمانڈ لائن پر 2to3 کو کال کرتے وقت -f idioms پیرامیٹر کی وضاحت کریں۔
نوٹ | پہلے | کے بعد |
---|---|---|
جبکہ 1: do_stuff() |
جبکہ True: do_stuff() |
|
قسم ((x) == T | مثال ((x، T) | |
قسم ((x) T ہے | مثال ((x، T) | |
a_list = list ((a_sequence) | a_list = sorted ((a_sequence) | |
a_list.sort() | do_stuff ((a_list) | |
do_stuff ((a_list) |
کا ترجمہسی ایس ڈی این بلاگ
اس کے بارے میں کہ پیتھون 2.x کوڈ کو پیتھون 3.x کوڈ میں کیسے تبدیل کیا جائے۔ پیتھون 2.x کوڈ کو پیتھون 3.x کوڈ میں تبدیل کرنے کا طریقہ
یہ بہت زیادہ نہیں ہے، اگر یہ صرف چند افعال جیسے پرنٹ وغیرہ سے متعلق ہے.
اگر آپ کو یہ پسند نہیں ہے تو ، آپ کو اپنے کوڈ کو تبدیل کرنے کی ضرورت ہے۔
پِیَتھُن 2.x ورژن، جیسے پِیَتھُن 2.7.2 جو میں نے انسٹال کیا ہے، ونڈوز ڈاؤن لوڈ کرنے کے بعد انسٹال ہونے کے بعد کچھ مفید ٹولز کے ساتھ آتا ہے۔
其中一个叫做2to3.pyآپ کو اس کے لئے استعمال کیا جا سکتا ہے، اور آپ کو اس کے لئے استعمال کیا جا سکتا ہے، اور آپ کو اس کے لئے استعمال کیا جا سکتا ہے.
اس کا مقام ہے: جڑ ڈائرکٹری جہاں Python نصب کیا جاتا ہے\Python27\Tools\Scripts\2to3.py
【如何利用2to3.py، کوڈ کو Python 2.x میں تبدیل کرنے کے لئے کوڈ کو Python 3.x میں تبدیل کرنے کا عمل مثال کے طور پر، میرے پاس ایک پائتن اسکرپٹ ہے جو پائیٹن 2.x پر چلتا ہے:
D:\tmp\tmp_dev_root\python\python2_to_python3\34563264_data_from_site.py
اب، ہم اسے پطرون 3.x کوڈ میں تبدیل کرنا چاہتے ہیں۔
ونڈوز کے cmd کو کھول کر اسکرپٹ کو تبدیل کرنے کے لئے اسکرپٹ کے نیچے منتقل کر سکتے ہیں اور پھر اسے چلائیں
D:\tmp\WordPress\DevRoot\Python27\Tools\Scripts\2to3.py -w 34563264_data_from_site.py
اگر آپ نے کامیابی کے ساتھ تبدیل کیا ہے تو ، اس کے نتیجے میں:
D:\tmp\tmp_dev_root\python\python2_to_python3>D:\tmp\WordPress\DevRoot\Python27\Tools\Scripts\2to3.py -w 34563264_data_from_site.py
RefactoringTool: Skipping implicit fixer: buffer
RefactoringTool: Skipping implicit fixer: idioms
RefactoringTool: Skipping implicit fixer: set_literal
RefactoringTool: Skipping implicit fixer: ws_comma
RefactoringTool: Refactored 34563264_data_from_site.py
--- 34563264_data_from_site.py (original)
+++ 34563264_data_from_site.py (refactored)
@@ -18,7 +18,7 @@
import time;
import codecs;
import logging;
-import urllib;
+import urllib.request, urllib.parse, urllib.error;
from datetime import datetime,timedelta;
from optparse import OptionParser;
from string import Template,replace;
@@ -90,7 +90,7 @@
foundPhone = eachItemSoup.find(attrs={"class":"phone"});
logging.debug("foundPhone=%s", foundPhone);
if(foundPhone):
- foundPhoneUni = unicode(foundPhone);
+ foundPhoneUni = str(foundPhone);
logging.debug("foundPhoneUni=%s", foundPhoneUni);
# case 1:
#<p class="phone"><strong>phone:</strong> 800.206.7886<br />
@@ -122,7 +122,7 @@
foundWeb = eachItemSoup.find(attrs={"class":"web"});
logging.debug("foundWeb=%s", foundWeb);
if(foundWeb):
- foundWebUni = unicode(foundWeb);
+ foundWebUni = str(foundWeb);
logging.debug("foundWebUni=%s", foundWebUni);
# <p class="web"><strong>e-mail:</strong> <a href="#">sales@cinesysinc.com</a><br />
@@ -151,7 +151,7 @@
foundAddr = eachItemSoup.find(attrs={"class":"addr"});
logging.debug("foundAddr=%s", foundAddr);
if(foundAddr):
- foundAddrUni = unicode(foundAddr);
+ foundAddrUni = str(foundAddr);
# <p class="addr">
# <strong>address:</strong> 740 SW 21st Ave, Suite #310<br />
RefactoringTool: Files that were modified:
RefactoringTool: 34563264_data_from_site.py
اس وقت، آپ کو پہلے 34563664_data_from_site.py نظر آئے گا، جو کہ اب پیتھون 3.x کا ورژن بن گیا ہے۔
فینگ بیbotvs کے لئے استعمال کیا جا رہا ہے؟
ایجاد کاروں کی مقدار - خواببوٹ وی ایس کے ریٹرن سرورز پیئٹن ورژن 2.7 کا استعمال کرتے ہیں ، جو بوٹ وی ایس پلیٹ فارمز پیئٹن 2 اور پیئٹن 3 کی حمایت کرتے ہیں۔