Type/to search
8
Follow
1370
Followers
Python 2.x.x اور Python 3.x.x کے درمیان تبدیلیاں اور Python 2.x.x کو Python 3.x.x میں تبدیل کرنے کا طریقہ
Tutorials
Created 2016-10-09 12:36:49  Updated 2017-10-11 10:18:05
 2
 5674

python2 اور python3 کے گرامر میں فرق اور تبدیلی

تقریباً تمام پیتھون 2 پروگراموں کو پیتھون 3 کے ماحول میں مناسب طریقے سے چلانے کے لئے کچھ ترمیم کی ضرورت ہوتی ہے۔ اس تبدیلی کے عمل کو آسان بنانے کے لئے ، پیتھون 3 میں ایک 2to3 افادیت اسکرپٹ ہے جو آپ کے پیتھون 2 پروگرام کے ماخذ فائلوں کو بطور ان پٹ لیتا ہے ، اور پھر اسے خود بخود پیتھون 3 میں تبدیل کرتا ہے۔ کیس اسٹڈی: چارڈٹ کو پیتھون 3 میں پورٹ کرنا () اس اسکرپٹ کو چلانے کا طریقہ بیان کرتا ہے ، اور پھر کچھ ایسی صورتوں کی نمائش کرتا ہے جہاں یہ خود کار طریقے سے مرمت نہیں کرسکتا ہے۔ یہ اپینڈکس اس کی وضاحت کرتا ہے جو خود بخود مرمت کرسکتا ہے۔

  • print جملہ

پیتھون 2 میں ، پرنٹ ایک جملہ ہے۔ آپ جو کچھ بھی آؤٹ پٹ کرنا چاہتے ہیں ، صرف اس کو پرنٹ کی ورڈ کے پیچھے رکھیں۔ پیتھون 3 میں ، پرنٹ () ایک فنکشن ہے۔ دوسرے فنکشنوں کی طرح ، پرنٹ () آپ کو اس کے لئے پیرامیٹرز کے طور پر جو کچھ آپ آؤٹ پٹ کرنا چاہتے ہیں اس کو منتقل کرنے کی ضرورت ہے۔

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۔ ایک خالی لائن کو آؤٹ پٹ کرنے کے لئے ، آپ کو بغیر کسی پیرامیٹر کے پرنٹ کو کال کرنے کی ضرورت ہے۔
2، ایک علیحدہ قدر کو آؤٹ پٹ کرنے کے لئے، اس قدر کو پرنٹ () کے طور پر استعمال کرنے کی ضرورت ہے.
3، ایک خالی جگہ کے ساتھ علیحدہ دو اقدار کو آؤٹ پٹ کے لئے استعمال کریں، دو پیرامیٹرز پرنٹ () کو کال کریں.
4، اس مثال میں کچھ چالیں ہیں۔ پیتھون 2 میں ، اگر آپ کو ایک کوما (() استعمال کرتے ہیں ، تو یہ پرنٹ کے جملے کے اختتام کے طور پر ایک خالی جگہ کے ساتھ نتائج کو الگ کرے گا ، اور پھر ایک پیچھے آنے والی خالی جگہ ((trailing space) کو آؤٹ پٹ کرے گا ، اس کے بجائے کہ وہ گاڑی واپس کرے ((carriage return)) ۔ پیتھون 3 میں ، اسی طرح کا اثر حاصل کیا جاسکتا ہے end = ' ' بطور ایک کلیدی الفاظ کے پیرامیٹرز پرنٹ پر منتقل کریں۔ عددی پیرامیٹر کی ڈیفالٹ '\n' ہے ، لہذا آخر میں پیداوار کے نشان کو ختم کرنے کے لئے ، عددی پیرامیٹر کی قدر کو دوبارہ ترتیب دیں۔
5۔ پیتھون 2 میں، آپ >>pipe_name نحو کا استعمال کرتے ہوئے آؤٹ پٹ کو ایک پائپ لائن میں ری ڈائریکٹ کر سکتے ہیں، جیسے sys.stderr۔ پیتھون 3 میں، آپ پائپ لائن کو پرنٹ پرنٹ پر منتقل کرکے اسی طرح کی تقریب انجام دے سکتے ہیں۔ پیرامیٹر فائل کی ڈیفالٹ std.stdout ہے، لہذا اس کی قدر کو دوبارہ ترتیب دینے سے پرنٹ پرنٹ کو ایک اور پائپ لائن میں آؤٹ پٹ کرے گا۔

  • یونیکوڈ سٹرنگ

پطرون 2 میں دو قسم کے سٹرنگ ٹائپ ہیں:یونیکوڈ سٹرنگاورغیر یونیکوڈ سٹرنگپیتھون 3 میں صرف ایک ہی قسم ہے:یونیکوڈ سٹرنگ

NotesPython 2Python 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 میں موجود نہیں ہے۔)

NotesPython 2Python 3
unicode(anything)str(anything)
  • long لمبی شکل

پیتھون 2 میں int اور long قسمیں ہیں جو غیر فلوٹینٹ نمبروں کے لئے تیار ہیں۔ int قسم کی زیادہ سے زیادہ قیمت sys.maxint سے زیادہ نہیں ہوسکتی ہے ، اور یہ زیادہ سے زیادہ قیمت پلیٹ فارم سے متعلق ہے۔ آپ کو اعداد کے آخر میں ایک L شامل کرکے لمبی انٹیگریٹ کی وضاحت کی جاسکتی ہے ، ظاہر ہے کہ یہ انٹیگریٹ کی نمائندگی کرنے والے عددی حد سے زیادہ ہے۔ پیتھون 3 میں ، صرف ایک انٹیگریٹ قسم int ہے ، اور زیادہ تر معاملات میں ، یہ پیتھون 2 کی لمبی انٹیگریٹ کی طرح ہے۔ چونکہ انٹیگریٹ کی دو اقسام اب موجود نہیں ہیں ، لہذا ان کو الگ کرنے کے لئے خصوصی لسانیات کا استعمال کرنے کی ضرورت نہیں ہے۔

مزید پڑھنے: پی ای پی 237: متحد لمبی اور مکمل شکل <unk>

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)

پیتھون 2 میں اعشاریہ لمبی عددی شکل کو پیتھون 3 میں اعشاریہ عام عددی شکل میں تبدیل کیا گیا ہے۔
پیتھون 2 میں سولہ ہندسوں کی لمبی عددی شکل کو پیتھون 3 میں سولہ ہندسوں کی عام عددی شکل میں تبدیل کیا گیا ہے۔
اس کے علاوہ، Python 3 میں، طویل اور مکمل شکلیں اب موجود نہیں ہیں، لہذا آپ کو ان کو تبدیل کرنے کی ضرورت ہے.قدرتی طور پر اصل long () فنکشن بھی نہیں ہے۔ ایک متغیر کو انٹیگریٹ میں تبدیل کرنے کے لئے ، int () فنکشن کا استعمال کیا جاسکتا ہے
چیک کریں کہ آیا ایک متغیر عددی ہے ، اس کی ڈیٹا ٹائپ حاصل کریں ، اور اس کا موازنہ int ٹائپ ((طویل نہیں) کے ساتھ کریں۔
آپ اعداد و شمار کی قسم کی جانچ پڑتال کے لئے insinstance () فنکشن بھی استعمال کرسکتے ہیں۔ ایک بار پھر ، انٹیگر کی قسم کی جانچ پڑتال کے لئے int ، نہیں ، استعمال کریں۔

  • <> موازنہ آپریٹر

پیتھون 2 کی حمایت <> بطور! = کا مترادف ہے۔ پیتھون 3 صرف! = کی حمایت کرتا ہے ، اب اس کی حمایت نہیں کی جاتی ہے۔

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

1۔ صرف موازنہ کریں۔
2، نسبتا پیچیدہ تین اقدار کے درمیان موازنہ <unk>

  • لغت کی قسم کا طریقہ has_key()

پیتھون 2 میں ، لغت آبجیکٹ کے has_key() طریقہ یہ جانچنے کے لئے کہ کیا لغت میں کوئی خاص کلید موجود ہے ((key) <unk> Python 3 اب اس طریقہ کی حمایت نہیں کرتا <unk> آپ کو استعمال کرنے کی ضرورت ہے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)

1، سب سے آسان شکل۔
2۔ آپریٹر or کی ترجیح آپریٹر in سے کم ہے، اس لیے یہاں قوسین شامل کرنے کی ضرورت نہیں ہے۔
3، دوسری طرف، اسی وجہ سے or کی ترجیح in سے کم ہے، یہاں قوسین شامل کرنے کی ضرورت ہے۔۔۔۔۔۔ نوٹ: یہاں کا کوڈ پچھلی لائن سے بالکل مختلف ہے۔۔۔پھیتھون پہلے x یا y کی تشریح کرے گا، اور نتیجہ x ہو گا۔۔۔۔۔ اگر x بل پر متن میں صحیح ہے) یا y۔ پھر پھیتھون چیک کرے گا کہ یہ نتیجہ a ہے یا نہیں_dictionary کی ایک چابی <unk>)
4، آپریٹر in کی ترجیح آپریٹر + سے کم ہے، لہذا کوڈ میں اس شکل کو تکنیکی طور پر قوسین کی ضرورت نہیں ہے، لیکن 2to3 کو شامل کیا گیا ہے.
5، اس شکل میں قوسین کی ضرورت ہوتی ہے کیونکہ in کی ترجیح + <unk> سے کم ہے۔

  • لغت کلاس کے طریقوں کی فہرست واپس کریں

پیتھون 2 میں ، لغت کے بہت سے طریقوں کی واپسی فہرست ہے۔ ان میں سے سب سے زیادہ استعمال ہونے والے طریقوں میں چابیاں ، اشیاء اور اقدار ہیں۔ پیتھون 3 میں ، ان تمام طریقوں کی واپسی متحرک نقطہ نظر میں تبدیل کردی گئی ہے۔ کچھ سیاق و سباق کے ماحول میں ، اس تبدیلی کا کوئی اثر نہیں ہوگا۔ اگر ان طریقوں کی واپسی کی قیمتوں کو فوری طور پر کسی دوسرے فنکشن میں منتقل کیا جاتا ہے ، اور یہ کہ یہ فنکشن پوری ترتیب میں چلتا ہے ، تو مندرجہ بالا طریقوں کی واپسی فہرست یا نقطہ نظر میں ہوگی اور اس سے کوئی فرق نہیں پڑے گا۔

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

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 تک ، معیاری کیوری کے کچھ ماڈیولز کا نام تبدیل کردیا گیا ہے۔ اور کچھ باہمی وابستہ ماڈیولز کو بھی جوڑا یا دوبارہ منظم کیا گیا ہے تاکہ اس وابستگی کو زیادہ منطقی بنایا جاسکے۔

  • http
    پیتھون 3 میں ، متعدد متعلقہ HTTP ماڈیولز کو ایک علیحدہ پیکیج میں جوڑا جاتا ہے ، http <unk> .
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 ہیڈر Set-Cookie کے ذریعہ بھیجے گئے کوکیز کو حاصل کرنے کے لئے ایک پیتھونک انٹرفیس فراہم کرتا ہے
عام طور پر استعمال ہونے والے مقبول براؤزر کوکیز کو فائلوں کی شکل میں ڈسک پر محفوظ کرتے ہیں ، اور http.cookiejar ماڈیول ان فائلوں پر کارروائی کرسکتا ہے۔
http.server ماڈیول ایک بنیادی HTTP سرور کو لاگو کرتا ہے

  • urllib
    پیتھون 2 میں کچھ ماڈیولز ہیں جو URL کو تجزیہ ، کوڈ اور حاصل کرنے کے لئے استعمال کیے جاتے ہیں ، لیکن یہ ماڈیولز ایک دوسرے پر چوہے کی کھال کی طرح اوورلیپ ہوتے ہیں۔ پیتھون 3 میں ، ان ماڈیولز کو ایک الگ پیکیج ، 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

پیتھون 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 درآمد کے جملے اور فنکشن کالز کو ایک ساتھ تبدیل کرے گا۔

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
    تمام ڈی بی ایم کلون اب ایک علیحدہ پیکیج ، ڈی بی ایم میں ہیں۔ اگر آپ کو ان میں سے کسی خاص قسم کی ضرورت ہو ، جیسے GNUDBM ، تو آپ ڈی بی ایم پیکیج میں موزوں ماڈیول درآمد کرسکتے ہیں۔
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
    XML-RPC ایک ہلکا پھلکا طریقہ ہے جو HTTP پروٹوکول کے ذریعے ریموٹ RPC کالز انجام دیتا ہے۔ کچھ XML-RPC کلائنٹ اور XML-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

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 کی ایک کلاس کی ضرورت ہے۔ آپ کیا کریں گے؟

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

1۔ جب آپ کو پیکج کے کسی اور حصے سے پورے ماڈیول کو درآمد کرنے کی ضرورت ہو تو ، نئے from .import نحو کا استعمال کریں۔ یہاں جملہ نمبر (((.) موجودہ فائل (((universaldetector.py) اور آپ جس فائل کو درآمد کرنا چاہتے ہیں (((constants.py) کے مابین متعلقہ راستے کی نشاندہی کرتا ہے۔ اس مثال میں ، یہ دونوں فائلیں ایک ہی ڈائرکٹری میں ہیں ، لہذا ایک ہی جملہ استعمال کیا گیا ہے۔ آپ پیرنٹ ڈائرکٹری (((from ..import anothermodule) یا ذیلی ڈائرکٹری سے بھی درآمد کرسکتے ہیں۔
2۔ کسی خاص کلاس یا فنکشن کو دوسرے ماڈیول سے براہ راست اپنے ماڈیول کے نام کی جگہ میں درآمد کرنے کے لئے ، ماڈیول کے نام میں جس میں درآمد کرنے کی ضرورت ہے اس میں رشتہ دار راستہ شامل کریں ، اور آخری سلاچ کو ہٹا دیں ((slash) ۔ اس مثال میں ، mbcharsetprober.py اور universaldetector.py ایک ہی ڈائرکٹری میں ہیں ، لہذا رشتہ دار راستہ کا نام ایک جملہ ہے۔ آپ اسے پیرنٹ ڈائرکٹری ((from .. import anothermodule) یا ذیلی ڈائرکٹری میں بھی درآمد کرسکتے ہیں۔

  • Next ()

پیتھون 2 میں، iterator کے پاس ایک next () طریقہ ہے جو تسلسل میں اگلی شق کو واپس کرتا ہے۔ یہ پیتھون 3 میں بھی کام کرتا ہے، لیکن اب ایک نیا عالمی فنکشن next () ہے جو ایک iterator کو بطور پیرامیٹر استعمال کرتا ہے۔

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، سب سے آسان مثال، آپ اب ایک iterator کے next (() طریقہ کار کو کال نہیں کرتے ہیں، اب آپ کو ایک عالمی فنکشن next (()) میں ایک پیرامیٹر کے طور پر iterator کے خود کو منتقل.
2، اگر آپ کے پاس ایک واپسی قدر ہے تو یہ ایک فنکشن ہے جس میں ایک انڈکٹر ہے، اس فنکشن کو کال کریں اور اس کے نتیجے میں اگلے () فنکشن کے لئے پیرامیٹرز کے طور پر بھیجیں. 2 سے 3 اسکرپٹ اس تبدیلی کو صحیح طریقے سے انجام دینے کے لئے کافی ذہین ہے.
3، اگر آپ کو آپ کی اپنی کلاس کی وضاحت، اور پھر ایک iterator کے طور پر اس کا استعمال کرتے ہیں تو، پیتھون 3 میں، آپ کو ایک خاص طریقہ کی وضاحت کر سکتے ہیں__next__() کے لئے.
4، اگر آپ کی تعریف کی کلاس میں صرف ایک next () ہے، یہ ایک یا زیادہ پیرامیٹرز کا استعمال کرتا ہے، 2to3 پر عملدرآمد کے دوران اسے منتقل نہیں کرے گا. یہ کلاس ایک iterator کے طور پر استعمال نہیں کیا جا سکتا، کیونکہ اس کے اگلے () طریقہ کار کے ساتھ پیرامیٹرز ہے.
5، یہ تھوڑا سا پیچیدہ ہے۔ اگر آپ کے پاس ایک مقامی متغیر ہے جس کا نام next ہے تو ، اس کی ترجیح پائیٹن 3 میں عالمی فنکشن next ((() سے زیادہ ہوگی۔ اس صورت میں ، آپ کو ایڈیٹر کے خصوصی طریقہ کار کو کال کرنے کی ضرورت ہوگی۔next() سیریز میں اگلے عنصر کے لئے۔。(یا، آپ کوڈ کو دوبارہ ترتیب دے سکتے ہیں تاکہ اس مقامی متغیر کا نام next نہ ہو، لیکن 2to3 آپ کے لئے یہ کام نہیں کرے گا۔。)

  • گلوبل فنکشن فلٹر

پیتھون 2 میں ، فلٹر () طریقہ ایک فہرست واپس کرتا ہے ، جو ایک فنکشن کے ذریعہ حاصل کیا جاتا ہے جس کی واپسی کی قیمت درست یا غلط ہوتی ہے۔ پیتھون 3 میں ، فلٹر () فنکشن ایک ایڈیٹر واپس کرتا ہے ، اور فہرست نہیں ہے۔

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 ایک فہرست () فنکشن کے ساتھ فلٹر () کو پیک کرتا ہے، جس میں فہرست () فنکشن اس کے پیرامیٹرز کے ذریعے چلتا ہے اور پھر ایک فہرست واپس کرتا ہے.
2، تاہم، اگر filter() کال کو list() میں پیک کیا گیا ہے تو، 2 سے 3 مزید کارروائی نہیں کرے گا، کیونکہ اس صورت میں filter() کی واپسی کی قیمت ایک iterator ہے یا نہیں اس سے کوئی فرق نہیں پڑتا.
3، فلٹر ((None، ...) کے اس مخصوص جملے کو سنبھالنے کے لئے، 2to3 اس کال کو لسانی طور پر برابر سے فہرست تجزیہ میں تبدیل کرے گا۔
4۔ چونکہ فور لوپ پورے سلسلے میں چلتا ہے، اس لیے مزید ترمیم کرنے کی ضرورت نہیں ہے۔
5، جیسا کہ اوپر، کوئی ترمیم کرنے کی ضرورت نہیں ہے، کیونکہ فہرست تجزیہ پورے سلسلہ میں جاتا ہے، یہاں تک کہ اگر فلٹر () ایک iterator کو واپس کرتا ہے، تو یہ پہلے ہی فلٹر () کی طرح کام کرتا ہے جو فہرست واپس کرتا ہے.

  • گلوبل فنکشنل میپ

فلٹر () کی تبدیلی کی طرح ، نقشہ () فنکشن اب ایک 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

1، فلٹر () کے ساتھ اسی طرح کا سلوک ، آسان ترین صورت میں ، 2to3 ایک فہرست () فنکشن کا استعمال کرتا ہے جو نقشہ () کال کو پیک کرتا ہے۔
2، مخصوص نقشے کے لئے ((کوئی نہیں، ...) نحو، فلٹر ((کوئی نہیں، ...) کی طرح، 2to3 اسے ایک استعمال کرنے کے لئے تبدیل کرے گا فہرست ()
3، اگر نقشے کا پہلا پیرامیٹر lambda فنکشن ہے تو ، 2to3 اس کو مساوی طور پر فہرست تجزیہ میں تبدیل کرے گا۔
4، پورے سلسلے میں for لوپ کے لئے، کوئی تبدیلی کرنے کی ضرورت نہیں ہے۔
5، ایک بار پھر، یہاں کوئی ترمیم کرنے کی ضرورت نہیں ہے، کیونکہ فہرست تجزیہ پورے سلسلہ میں چلتا ہے، یہاں تک کہ اگر نقشہ () کی واپسی کی قیمت فہرست کے بجائے ایک ایڈیٹر ہے تو یہ کام کر سکتا ہے.

  • گلوبل فنکشن کو کم کریں ()

پیتھون 3 میں، reduce ((() فنکشن کو عالمی نام کی جگہ سے ہٹا دیا گیا ہے اور اب اسے fucntools ماڈیول میں رکھا گیا ہے۔

NotesPython 2Python 3
reduce(a, b, c)from functools import reduce reduce(a, b, c)
  • گلوبل فنکشن لاگو ہوتا ہے

Python 2 میں ایک گلوبل فنکشن ہے جس کا نام apply () ہے جو ایک فنکشن f اور ایک لسٹ استعمال کرتا ہے[a, b, c] بطور پیرامیٹر ، واپسی کی قیمت f ((a, b, c) <unk> ہے۔ آپ اس فنکشن کو براہ راست کال کرکے فہرست سے پہلے ایک asterisk بھی شامل کرسکتے ہیں (((*) کے طور پر پیرامیٹرز کو اس کے پاس پاس کرنے کے لئے ایک ہی کام انجام دیا گیا ہے۔ پطرون 3 میں، 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] کی طرح) فنکشن کو کال کرنے کے لئے ایک asterisk شامل کریں۔ یہ پیتھون 2 میں apply ((() فنکشن کے برابر ہے۔
2، پیتھون 2 میں، apply() فنکشن دراصل 3 پیرامیٹرز لے سکتا ہے: ایک فنکشن، ایک پیرامیٹرز کی فہرست، اور ایک لغت نامہ پیرامیٹرز ((dictionary of named arguments) ۔ پیتھون 3 میں، آپ پیرامیٹرز کی فہرست سے پہلے ایک ستارہ شامل کر سکتے ہیں (((*), ڈکشنری کے نام کے پیرامیٹرز سے پہلے دو ستارے شامل کریں ((*اس کے نتیجے میں، یہ ایک ہی اثر حاصل کرنے کے لئے استعمال کیا جاتا ہے.
3، آپریٹر + یہاں استعمال کیا جاتا ہے کے طور پر منسلک فہرست کی تقریب، اس کی ترجیح آپریٹرز سے زیادہ ہے
، لہذا a_list_of_args + z کے ارد گرد اضافی قوسین شامل کرنے کی ضرورت نہیں ہے۔
4، 2to3 اسکرپٹ کافی ذہین ہے کہ وہ پیچیدہ apply () کالوں کو تبدیل کرے ، بشمول درآمد ماڈیول میں فنکشن کال کرنا۔

  • گلوبل فنکشن intern)

پیتھون 2 میں ، آپ کو ایک تار پر intern () فنکشن کا استعمال کرتے ہوئے اس کی حد بندی کرنے کی اجازت دی جاسکتی ہے تاکہ اس کی کارکردگی کو بہتر بنایا جاسکے۔ پیتھون 3 میں ، intern () فنکشن کو sys ماڈیول میں منتقل کردیا گیا ہے۔

NotesPython 2Python 3
intern(aString)sys.intern(aString)
  • exec بیانات

    جیسا کہ پرنٹ کے جملے کو پیتھون 3 میں ایک فنکشن میں تبدیل کیا گیا ہے ، اسی طرح ای سی سی کے جملے بھی۔。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)|
1، سب سے آسان شکل میں، کیونکہ exec ((() اب ایک فنکشن ہے، نہ کہ ایک بیان، 2to3 اس سٹرنگ کی شکل میں کوڈ کو قوسین کے ساتھ گھیر لے گا۔
2، پیتھون 2 میں exec بیان نام کی جگہ کی وضاحت کرسکتا ہے ، اور کوڈ اس نجی جگہ پر عمل کرے گا جو عالمی آبجیکٹ پر مشتمل ہے۔ پیتھون 3 میں بھی ایسا ہی ہے۔ آپ کو صرف اس نام کی جگہ کو دوسرے پیرامیٹرز کے طور پر exec () فنکشن میں منتقل کرنے کی ضرورت ہے۔
3۔ اس سے بھی زیادہ حیرت انگیز بات یہ ہے کہ پیتھون 2 میں exec کے بیان میں ایک مقامی نام کی جگہ بھی دی جاسکتی ہے (مثال کے طور پر ایک فنکشن میں اعلان کردہ متغیر) ۔ پیتھون 3 میں ، exec () فنکشن بھی ایسا ہی کام کرتا ہے۔

  • execfile بیانات

پچھلے exec کے جملے کی طرح ، پیتھون 2 میں execfile کے جملے بھی پیتھون کوڈ کو چلانے کی طرح سٹرنگ کا استعمال کرسکتے ہیں۔ اس کے برعکس ، exec سٹرنگ کا استعمال کرتا ہے ، جبکہ exec فائل فائل کا استعمال کرتی ہے۔ پیتھون 3 میں ، execfile کے جملے کو ہٹا دیا گیا ہے۔ اگر آپ واقعی کسی فائل میں موجود پیتھون کوڈ کو چلانا چاہتے ہیں (لیکن آپ اسے درآمد نہیں کرنا چاہتے ہیں) ، تو آپ اس فائل کو کھول کر اس کے مندرجات کو پڑھ سکتے ہیں ، اور پھر اس کو کال کرسکتے ہیں compile () ۔

NotesPython 2Python 3
execfile('a_filename')exec(compile(open('a_filename').read(),'a_filename','exec'))
  • repr (کوئز میں)

پیتھون 2 میں، ایک سٹرنگ کا اظہار کرنے کے لئے جو کسی بھی شے کو ظاہر کرتا ہے، اس میں ایک شے ہے جس میں اشارے کے اندر اندر احاطہ کرتا ہے (جیسےx) کی خصوصی گرامر۔ پیتھون 3 میں ، یہ صلاحیت اب بھی موجود ہے ، لیکن آپ کو اس طرح کی سٹرنگ کے لئے ریٹروکوٹ استعمال کرنے کی ضرورت نہیں ہے۔ آپ کو عالمی فنکشن repr استعمال کرنے کی ضرورت ہے۔

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

1۔ یاد رکھیں، x کچھ بھی ہو سکتا ہے۔ ایک کلاس، فنکشن، ماڈیول، بنیادی ڈیٹا ٹائپ وغیرہ۔
2، پیتھون 2 میں ، ریٹرو کوٹینٹ کو ان پٹ کیا جاسکتا ہے ، جس کے نتیجے میں اس طرح کی الجھن والی (لیکن موثر) اظہار ◄ 2to3 کافی ذہین ہے کہ اس طرح کی ایک پٹ کال کو ریپر () فنکشن میں تبدیل کیا جاسکے ◄

  • try...except جملہ

پیتھون 2 سے پیتھون 3 تک ، غیر معمولی کو پکڑنے کے لئے گرامر میں کچھ تبدیلی آئی ہے۔

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

1، پیتھون 2 میں غیر معمولی قسم کے بعد ایک کمیا شامل کرنے کے مقابلے میں، پیتھون 3 نے ایک نیا کلیدی لفظ استعمال کیا ہے، as。
2، کلیدی لفظ as بھی استعمال کیا جا سکتا ہے جب ایک ہی وقت میں متعدد قسم کے غیر معمولیات پکڑے جائیں۔
3۔ اگر آپ کو ایک غیر معمولی چیز کا پتہ چل گیا ہے لیکن آپ کو اس غیر معمولی چیز تک رسائی حاصل کرنے میں کوئی دلچسپی نہیں ہے تو ، پیتھون 2 اور پیتھون 3 کی ترکیب ایک جیسی ہے۔
4، اسی طرح، اگر آپ تمام غیر معمولی کو پکڑنے کے لئے ایک انشورنس کا طریقہ استعمال کرتے ہیں، تو پطرون 2 اور پطرون 3 میں ایک ہی نحو ہے.
5۔ ماڈیولز کو درآمد کرتے وقت ((یا زیادہ تر دوسرے معاملات میں) ، آپ کو یقینی طور پر اس طریقہ کار کا استعمال نہیں کرنا چاہئے ((مذکورہ بالا فال بیک کا حوالہ دیتے ہوئے)) ۔ ورنہ ، پروگرام کی بورڈ انٹروپٹ ((اگر صارف Ctrl-C کے ذریعہ پروگرام کو روکتا ہے) جیسے غیر معمولی معاملات کو پکڑ سکتا ہے ، جس سے ڈیبگنگ مشکل ہوجاتی ہے۔

  • raise جملہ

پیتھون 3 میں ، اپنی مرضی کے مطابق استثناءات کو پھینکنے کے لئے ایک معمولی تبدیلی کی گئی ہے۔

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

1۔ صارف کے ذریعہ اپنی مرضی کے مطابق غلط پیغامات کے بغیر استثناء کو خارج کردیں ، اس سب سے آسان شکل میں ، گرامر میں کوئی تبدیلی نہیں ہوئی۔
2، جب آپ صارف کے اپنی مرضی کے مطابق غلطی کی معلومات کے ساتھ ایک استثنا کو پھینکنا چاہتے ہیں تو ، تبدیلی واضح ہے۔ Python 2 ایک کمیا کے ساتھ استثنا اور غلطی کو الگ کرتا ہے۔ Python 3 غلطی کی معلومات کو استثنا کے طور پر پیرامیٹرز کے طور پر منتقل کرتا ہے۔
3، پیتھون 2 ایک زیادہ پیچیدہ نحو کی حمایت کرتا ہے جس میں ایک صارف کی اپنی مرضی کے مطابق واپسی کے ساتھ ایک استثنا کو پھینک دیا جاتا ہے۔ آپ اسے پیتھون 3 میں بھی کرسکتے ہیں ، لیکن یہ بالکل مختلف ہے۔
4۔ پطرون 2 میں ، آپ ایک غیر معمولی کو صرف ایک غیر معمولی پیغام کے ساتھ چھوڑ سکتے ہیں۔ پطرون 3 میں ، اس شکل کی اب حمایت نہیں کی جاتی ہے۔ 2to3 آپ کو متنبہ کرے گا کہ یہ اس طرح کی نحو کو خود بخود ٹھیک نہیں کرسکتا ہے۔

  • جنریٹر کا throw طریقہ

پیتھون 2 میں ، جنریٹر کے پاس a_generator.throw () طریقہ ہے۔ a_generator.throw () کال کرنے سے جنریٹر کو روک دیا جاتا ہے اور اس کے بعد جنریٹر فنکشن کے ذریعہ حاصل کردہ اگلی قدر واپس کردی جاتی ہے۔ پیتھون 3 میں ، یہ فنکشن اب بھی دستیاب ہے ، لیکن اس کی نحو میں تھوڑا سا مختلف ہے۔

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

1، سب سے آسان شکل میں، جنریٹر صارف کی اپنی مرضی کے مطابق غلطی کے پیغامات کے بغیر ایک استثناء پھینک دیتا ہے. اس صورت میں، پیتھون 2 سے پیتھون 3 میں کوئی تبدیلی نہیں ہے.
2، اگر جنریٹر صارف کی اپنی مرضی کے مطابق غلطی کا پیغام لے کر ایک استثنا پھینک دیتا ہے، تو آپ کو اس غلطی کا پیغام تار (غلطی سٹرنگ) کو اس کی مثال کے طور پر اس کی مثال کے طور پر منتقل کرنے کی ضرورت ہے.
3، پیتھون 2 میں صرف غیر معمولی معلومات کو خارج کرنے کی بھی حمایت کی جاتی ہے۔ پیتھون 3 میں اس طرح کی گرامر کی حمایت نہیں کی جاتی ہے ، اور 2to3 ایک انتباہی پیغام دکھائے گا جو آپ کو بتائے گا کہ آپ کو دستی طور پر اس کوڈ کو ٹھیک کرنے کی ضرورت ہے۔

  • عالمی فنکشن xrange

پیتھون 2 میں ، اعداد کی ایک مخصوص حد تک پہنچنے کے لئے دو طریقے ہیں: رینج () ، جو ایک فہرست واپس کرتا ہے ، اور رینج () ، جو ایک iterator واپس کرتا ہے۔ پیتھون 3 میں ، رینج () iterator واپس کرتا ہے ، اور ایکس رینج () اب موجود نہیں ہے۔

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

1، سب سے آسان صورت حال میں، 2to3 صرف xrange () کو range () میں تبدیل کرتا ہے۔
2، اگر آپ کا پیتھون 2 کوڈ رینج () کا استعمال کرتا ہے تو ، 2to3 کو معلوم نہیں ہوگا کہ آپ کو فہرست کی ضرورت ہے یا نہیں ، اور نہ ہی یہ کہ ایک ایتھرنیٹر بھی کام کرتا ہے۔ احتیاط کے طور پر ، 2to3 غلطی کی اطلاع دے سکتا ہے ، اور پھر اس کا استعمال کرتا ہے list () رینج () کی واپسی کی قدر کو فہرست کی قسم میں تبدیل کرنے پر مجبور کریں۔
3، اگر فہرست تجزیہ میں xrange () فنکشن ہے، تو اس کی واپسی کی قیمت کو ایک فہرست میں تبدیل کرنے کی ضرورت نہیں ہے، کیونکہ فہرست تجزیہ ایک انڈکٹر کے لئے بھی اسی طرح کام کرتا ہے۔
4، اسی طرح، for سائیکل بھی iterator پر کام کرتا ہے، لہذا یہاں بھی کچھ بھی نہیں بدلتا ہے <unk>
5، فنکشن sum ((() ایڈیٹر پر کام کرتا ہے ، لہذا 2to3 نے یہاں کوئی تبدیلی نہیں کی ہے۔ جیسا کہ لغت کلاس کے طریقوں میں سے ایک ہے جس کی واپسی کی قیمت نظر (((view) ہے اور فہرست نہیں ہے۔ یہ بھی min ((() ، max ((() ، sum ((() ، list ((() ، tuple ((() ، set ((() ، sorted ((() ، any ((() ، all (()) کے لئے ہے۔

  • گلوبل فنکشن raw_input (() اور input (())

پیتھون 2 میں دو گلوبل فنکشنز ہیں جو کمانڈ لائن پر صارف سے ان پٹ کی درخواست کرنے کے لئے استعمال کیے جاتے ہیں۔ پہلا ان پٹ () کہا جاتا ہے ، جو صارف کا انتظار کرتا ہے کہ وہ ایک پیتھون اظہار () داخل کرے اور پھر اس کا نتیجہ واپس کرے۔ دوسرا راؤ ان پٹ () کہا جاتا ہے ، اور صارف جو کچھ بھی داخل کرتا ہے وہ اسے واپس کرتا ہے۔ یہ ابتدائیوں کو بہت الجھن میں ڈالتا ہے ، اور یہ وسیع پیمانے پر دیکھا جاتا ہے کہ یہ پیتھون زبان کا ایک گانٹھ کا ٹکڑا ہے۔

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

1، سب سے آسان شکل، خام_ان پٹ ((() کو ان پٹ ((() کے ساتھ تبدیل کیا گیا ہے۔
2، پیتھون 2 میں، raw_input ((() فنکشن ایک اشارے کو بطور پیرامیٹرز متعین کرسکتا ہے۔ پیتھون 3 میں یہ فنکشن محفوظ ہے۔
3، اگر آپ واقعی میں صارف کو ایک پطرون اظہار میں داخل کرنے کے لئے پوچھنا چاہتے ہیں، تو نتائج کا حساب لگایا جاسکتا ہے، آپ کو ان پٹ () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () () ()

  • فنکشن کی خاصیت function_*

پیتھون 2 میں ، فنکشن کا کوڈ فنکشن کی خصوصی خصوصیات تک رسائی حاصل کرسکتا ہے۔ پیتھون 3 میں ، مستقل مزاجی کے ل these ، ان خصوصی خصوصیات کا نام تبدیل کردیا گیا ہے۔

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 پراپرٹی ((originalfunc_name) میں فنکشن کا نام شامل ہے۔
2、doc پراپرٹی ((originalfuncdoc) میں آپ کے ذریعہ فنکشن کے ماخذ کوڈ میں بیان کردہ دستاویز سٹرنگ ((docstring) شامل ہے
3、defaults پراپرٹی ((اصلfunc_defaults) ایک ایسا اٹوسیٹ ہے جو پیرامیٹرز کی ڈیفالٹ اقدار کو محفوظ کرتا ہے۔
4、dict پراپرٹی ((اصل function_dict) ایک نام کی جگہ ہے جو کسی بھی فنکشن کی پراپرٹیز کی حمایت کرتی ہے۔
5、closure پراپرٹی ((اصل func_closure) ایک سیل آبجیکٹ پر مشتمل ایک ذیلی گروپ ہے جس میں ایک فنکشن کی مفت متغیر ((free variable) پر پابندی ہوتی ہے۔
6、globals پراپرٹی ((اصلfunc_globals) ایک ماڈیول کے عالمی نام کی جگہ کا حوالہ ہے ، اور فنکشن خود اس نام کی جگہ میں بیان کیا گیا ہے۔
7、code پراپرٹی ((اصل فنک_کوڈ) ایک کوڈ آبجیکٹ ہے جو مرتب شدہ فنکشنلٹی کی نمائندگی کرتا ہے۔

  • I/O طریقوں xreadlines

پیتھون 2 میں ، فائل آبجیکٹ میں ایک xreadlines () طریقہ ہے جو ایک iterator واپس کرتا ہے ، ایک بار فائل کی ایک لائن پڑھتا ہے۔ یہ خاص طور پر فور لوپ میں مفید ہے۔ در حقیقت ، پیتھون 2 کے بعد کے ورژن نے فائل آبجیکٹ میں ہی اس طرح کی ایک خصوصیت شامل کی ہے۔

پیتھون 3 میں ، 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)

1، اگر آپ نے پہلے ہی xreadlines () کو بلا لیا ہے جس میں کوئی پیرامیٹر نہیں ہے ، تو 2to3 اسے فائل آبجیکٹ میں تبدیل کرے گا۔ پیتھون 3 میں ، اس تبدیلی کے بعد کا کوڈ وہی کام کرسکتا ہے جو پہلے کیا گیا تھا: فائل کی ایک لائن کو ایک بار پڑھیں ، اور پھر فور لوپ کا لوپ کریں۔
2، اگر آپ نے پہلے xreadlines () کو کال کرنے کے لئے ((ہر بار پڑھنے والی لائنوں کی تعداد)) کا استعمال کیا ہے تو ، 2to3 آپ کے لئے پیتھون 2 سے پیتھون 3 میں منتقلی نہیں کرسکتا ہے ، اور آپ کا کوڈ اس طرح ناکام ہوجائے گا: AttributeError: '_io.TextIOWrapper' object has no attribute 'xreadlines'。 آپ دستی طور پر xreadlines کو readlines میں تبدیل کر سکتے ہیں تاکہ کوڈ Python 3 میں کام کر سکے۔。

  • ایک سے زیادہ پیرامیٹرز کے بجائے ایٹرو گروپ کا استعمال کرتے ہوئے لیمبڈا فنکشن

پیتھون 2 میں، آپ ایک گمنام لیمبڈا فنکشن کی وضاحت کر سکتے ہیں، جس میں آپ اس فنکشن کو ایک سے زیادہ پیرامیٹرز کو قبول کرنے کے قابل بناتے ہیں، جس میں آپ کو ایک عنصر کی تعداد کو ایک پیرامیٹر کے طور پر تفویض کرتے ہیں. دراصل، پیتھون 2 کے تشریح کنندہ نے اس پیرامیٹر کو نامی دلائل میں کھول دیا ہے، اور پھر آپ اسے لیمبڈا فنکشن میں حوالہ دیتے ہیں.

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 فنکشن کی وضاحت کی ہے، جس میں ایک عنصر پر مشتمل ایک ٹیگوریٹ کو پیرامیٹر کے طور پر استعمال کیا جاتا ہے، تو Python 3 میں، یہ x1 پر مشتمل ایک میں تبدیل کیا جائے گا[0] میں حوالہ دیا گیا لامبڈا فنکشن。x1 2to3 اسکرپٹ کے ذریعہ خود بخود تیار کیا گیا ہے جو کہ اصل میٹرو میں نامزد کردہ پیرامیٹرز پر مبنی ہے۔。
2، لامبڈا فنکشن جس میں دو عناصر پر مشتمل ایک ماڈیول ((x، y) استعمال کیا جاتا ہے اس کو x_y میں تبدیل کیا گیا ہے جس میں دو پوزیشن پیرامیٹرز ہیں، یعنی x_y[0] اور x_y[1]。
3، 2to3 اسکرپٹ یہاں تک کہ ایک lambda فنکشن کو پیرامیٹرز کے طور پر استعمال کرنے والے ماڈیولز کے ساتھ کام کرسکتا ہے۔ اس کے نتیجے میں آنے والا کوڈ پڑھنے میں تھوڑا سا مشکل ہے ، لیکن یہ پیتھون 3 کے تحت وہی کام کرتا ہے جو پیتھون 2 کے تحت اصل کوڈ کرتا ہے۔
4۔ آپ ایک سے زیادہ پیرامیٹرز کے ساتھ ایک lambda فنکشن کی وضاحت کر سکتے ہیں۔ اگر پیرامیٹرز کے ارد گرد کوئی قوسین نہیں ہے تو ، پیتھون 2 اسے ایک lambda فنکشن کے طور پر لے گا جس میں متعدد پیرامیٹرز شامل ہیں۔ اس lambda فنکشن باڈی میں ، آپ ان پیرامیٹرز کو نام کے ذریعہ حوالہ دیتے ہیں ، جیسا کہ آپ دوسرے قسم کے افعال میں کرتے ہیں۔ یہ گرامر پیتھون 3 میں بھی کام کرتا ہے۔

  • خصوصی طریقہ کی خصوصیات

پیتھون 2 میں ، کلاس کے طریقوں کو ان کی کلاس آبجیکٹ (class object) کی وضاحت کرنے کے لئے رسائی حاصل کی جاسکتی ہے ، اور طریقہ کار آبجیکٹ (method object) تک رسائی حاصل کی جاسکتی ہے۔ im_self کلاس کا مثال آبجیکٹ ہے۔ im_func فنکشن آبجیکٹ ہے ، اور im_class کلاس خود ہے۔ پیتھون 3 میں ، ان خصوصیات کا نام تبدیل کردیا گیا ہے تاکہ وہ دیگر خصوصیات کے نام کے معاہدے پر عمل کریں۔

NotesPython 2Python 3
aClassInstance.aClassMethod.im_funcaClassInstance.aClassMethod._func_
aClassInstance.aClassMethod.im_selfaClassInstance.aClassMethod._self_
aClassInstance.aClassMethod.im_classaClassInstance.aClassMethod._self_._class_
  • __nonzero_خصوصی طریقہ

پیتھون 2 میں، آپ اپنی کلاسیں بنا سکتے ہیں اور انہیں بولیئن سیاق و سباق میں استعمال کر سکتے ہیں۔ مثال کے طور پر، آپ اس کلاس کو مثال کے طور پر استعمال کر سکتے ہیں اور اس مثال کے اعتراض کو ایک if بیان میں استعمال کر سکتے ہیں۔ اس مقصد کے لئے، آپ کو ایک خاص کی وضاحت__nonzero__() طریقہ، جو True یا False لوٹاتا ہے، جب مثال کے طور پر آبجیکٹ بل پر سیاق و سباق میں ہوتا ہے تو اس طریقہ کو بلایا جاتا ہے۔ Python 3 میں، آپ اب بھی وہی کام کر سکتے ہیں، لیکن اس خاص طریقہ کا نام بدل گیا ہے__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|
1۔ جب بول پر ایک سیاق و سباق میں ایک کلاس آبجیکٹ استعمال کیا جاتا ہے تو ، پیتھون 3 کال کرتا ہے__bool_____ کے بجائے__nonzero__()。
2، تاہم، اگر آپ کے پاس ایک وضاحت ہے جو دو پیرامیٹرز کا استعمال کرتا ہے__nonzero__() طریقہ ، 2to3 اسکرپٹ یہ فرض کرے گا کہ آپ کے ذریعہ متعین کردہ طریقہ کار کا کوئی دوسرا استعمال ہے ، لہذا اس میں کوڈ میں کوئی تبدیلی نہیں کی جائے گی۔

  • آٹھ جہتی قسم

پیتھون 2 اور پیتھون 3 کے مابین ، آٹھ ہندسوں کی تعداد کی تعریف کرنے کی گرامر میں معمولی تبدیلی آئی ہے۔

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)

1، maxint کو maxsize میں تبدیل کر دیا گیا ہے۔
2، تمام sys.maxint sys.maxsize میں تبدیل کردیئے گئے ہیں۔

  • گلوبل فنکشن callable ())

پیتھون 2 میں ، آپ عالمی فنکشن کا استعمال کرسکتے ہیں callable ((() کسی شے کو کال کرنے کے قابل ہونے کی جانچ پڑتال کرنے کے لئے (مثال کے طور پر ، فنکشن) ۔ پیتھون 3 میں ، یہ عالمی فنکشن منسوخ کردیا گیا ہے۔ کسی شے کو کال کرنے کے قابل ہونے کی جانچ پڑتال کرنے کے لئے ، آپ خصوصی طریقوں کی جانچ کرسکتے ہیں__call__() کی موجودگی

NotesPython 2Python 3
callable(anything)hasattr(anything,'_call_')
  • گلوبل فنکشن (zip)

پیتھون 2 میں، گلوبل فنکشن zip() کو کسی بھی ایک سے زیادہ تسلسل کو بطور پیرامیٹر استعمال کیا جاسکتا ہے، جو ایک ٹیول گروپ سے بنی فہرست واپس کرتا ہے۔ پہلا ٹیول گروپ ہر تسلسل کا پہلا عنصر پر مشتمل ہوتا ہے۔ دوسرا ٹیول گروپ ہر تسلسل کا دوسرا عنصر پر مشتمل ہوتا ہے۔ اس کے بعد آگے بڑھتا ہے۔ پیتھون 3 میں، zip() ایک ایڈیٹر واپس کرتا ہے ، فہرست نہیں

NotesPython 2Python 3
zip(a, b, c)list(zip(a, b, c))
d.join(zip(a, b, c))no change

سب سے آسان شکل میں، آپ کو فہرست () فنکشن کو کال کرکے واپس آنے والی قیمت کو بحال کر سکتے ہیں .zip () فنکشن سے پہلے کی تقریب، فہرست () فنکشن اس زپ () فنکشن کو واپس آنے والے ایڈیٹر کے ذریعے جاتا ہے، اور پھر اس کے نتیجے میں فہرست کی واپسی ہوتی ہے.
سیریز کے تمام عناصر پر گزرنے والے سیاق و سباق کے ماحول میں ((مثال کے طور پر یہاں جوائن () طریقہ پر کال کریں) ، زپ () واپس آنے والا ایڈیٹر کام کرسکتا ہے۔ 2to3 اسکرپٹ ان حالات کا پتہ لگائے گا اور آپ کے کوڈ میں کوئی تبدیلی نہیں کرے گا۔

  • StandardError غیر معمولی

پیتھون 2 میں ، معیاری غلطی StopIteration ، جنریٹر ایگزٹ ، کی بورڈ انٹروپٹ ، اور سسٹم ایگزٹ کے علاوہ دیگر تمام بلٹ ان غیر معمولی کی بنیادی کلاس ہے۔ پیتھون 3 میں ، معیاری غلطی کو منسوخ کردیا گیا ہے۔ اس کی جگہ ایک استثنا استعمال کیا گیا ہے۔

NotesPython 2Python 3
x =StandardError()x =Exception()
x =StandardError(a, b, c)x =Exception(a, b, c)
  • types ماڈیول میں مستقل

types ماڈیول میں مختلف قسطیں ہیں جو آپ کو کسی شے کی قسم کا فیصلہ کرنے میں مدد فراہم کرتی ہیں۔ Python 2 میں ، اس میں تمام بنیادی ڈیٹا کی اقسام کی نمائندگی کرنے والی مستقلات شامل ہیں ، جیسے dict اور int۔ Python 3 میں ، یہ مستقلات منسوخ کردیئے گئے ہیں۔ اس کی جگہ صرف بنیادی اقسام کے نام استعمال کرنے کی ضرورت ہے۔

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 میں <unk>string<unk> (غیر یونیکوڈ انکوڈنگ سٹرنگ، یعنی عام سٹرنگ) دراصل صرف کچھ بائٹ کی ترتیب ہے جو کسی خاص حروف کوڈ کا استعمال کرتی ہے (a sequence of bytes) <unk>

  • گلوبل فنکشن کی مثال

isinstance() فنکشن چیک کرتا ہے کہ آیا کوئی آبجیکٹ کسی خاص قسم کی کلاس یا قسم کی مثال ہے۔ پیتھون 2 میں ، آپ ٹائپ (قسم) کی تشکیل والی ایک قسم کو انسٹینس () پر منتقل کرسکتے ہیں ، اور اگر یہ آبجیکٹ اس قسم کی کسی بھی قسم کی ہے تو ، فنکشن واپس آ جاتا ہے سچ۔ پیتھون 3 میں ، آپ اب بھی ایسا کرسکتے ہیں ، لیکن اس کی سفارش نہیں کی جاتی ہے کہ ایک قسم کو بطور پیرامیٹر دو بار منتقل کیا جائے۔

NotesPython 2Python 3
isinstance(x,(int,float,int))isinstance(x,(int,float))
  • basestring ڈیٹا کی قسم

پیتھون 2 میں دو قسم کی سٹرنگز ہیں: یونیکوڈ میں انکوڈ شدہ سٹرنگز اور غیر یونیکوڈ میں انکوڈ شدہ سٹرنگز۔ لیکن دراصل ایک اور قسم ہے ، جس کا نام بیسٹرنگ ہے۔ یہ ایک تجریدی ڈیٹا ٹائپ ہے ، جو اسٹر اور یونیکوڈ ٹائپ کا ایک سپر کلاس ہے۔ اسے براہ راست نہیں بلایا جاسکتا ہے یا اس کی مثال نہیں دی جاسکتی ہے ، لیکن آپ اسے انسٹینس کے بطور استعمال کرسکتے ہیں () اس بات کا پتہ لگانے کے لئے کہ آیا کوئی آبجیکٹ یونیکوڈ سٹرنگ ہے یا غیر یونیکوڈ سٹرنگ ہے۔

NotesPython 2Python 3
isinstance(x, basestring)isinstance(x, str)
  • itertools ماڈیول

پیتھون 2.3 میں itertools ماڈیول متعارف کرایا گیا ہے ، جس میں گلوبل فنکشنز زپ () ، نقشہ () ، فلٹر () کی مختلف شکلیں () کی وضاحت کی گئی ہے ، ان متغیرات کی واپسی کی قسم فہرست کی بجائے انکرن ہے۔ پیتھون 3 میں ، ان 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 () کے بجائے۔
2، نقشے کا استعمال کرتے ہوئے () بجائے itertools.imap () ۔
3،itertools.ifilter ((() سے filter ((() میں تبدیل کر دیا گیا
4۔ itertools ماڈیول پیتھون 3 میں موجود ہے ، اس میں صرف وہ افعال شامل نہیں ہیں جو گلوبل نام کی جگہ میں منتقل ہوگئے ہیں۔ 2to3 اسکرپٹ ان درآمد شدہ جملوں کو ہٹانے کے لئے کافی ذہین ہے جو اب مفید نہیں ہیں ، جبکہ باقی درآمد شدہ جملوں کی سالمیت کو برقرار رکھتے ہیں۔

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

جب آپ غیر معمولی معاملات کو سنبھالتے ہیں تو ، آپ کو سیس ماڈیول میں تین متغیرات تک رسائی حاصل ہوسکتی ہے: 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]
  • ماڈیول کے لئے فہرست تجزیہ

پیتھون 2 میں ، اگر آپ کو ایک پارہ پارہ عنصر کی فہرست تجزیہ لکھنے کی ضرورت ہو تو ، آپ کو عنصر کی قدر کے ارد گرد قوسین شامل کرنے کی ضرورت نہیں ہے۔ پیتھون 3 میں ، یہ قوسین ضروری ہیں۔

NotesPython 2Python 3
[i for iin 1,2][i for iin(1,2)]
  • os.getcwdu () فنکشن

پیتھون 2 میں ایک فنکشن ہے جسے os.getcwd ((() کہا جاتا ہے جو موجودہ ورکنگ ڈائرکٹری کو ایک (((غیر یونیکوڈ انکوڈنگ)) سٹرنگ کے طور پر واپس کرتا ہے۔ چونکہ جدید فائل سسٹم کو جیٹ کوڈ والے ڈائرکٹری کے ناموں کو سنبھالنے کی صلاحیت ہے ، پیتھون 2.3 نے os.getcwdu ((() فنکشن متعارف کرایا ہے۔ os.getcwdu ((() فنکشن موجودہ ورکنگ ڈائرکٹری میں یونیکوڈ انکوڈنگ والے سٹرنگ کو واپس کرتا ہے۔ پیتھون 3 میں ، آپ کو صرف ایک ہی سٹرنگ کی قسم کی ضرورت ہے (یونیکوڈ قسم کی) ، لہذا آپ کو صرف getos.cwd ((() کی ضرورت ہے۔

NotesPython 2Python 3
os.getcwdu()os.getcwd()
  • میٹا کلاس

پیتھون 2 میں ، آپ میٹا کلاس کے پیرامیٹرز کو کلاس کے بیان میں یا کسی خاص کلاس کی سطح کی وضاحت کرکے استعمال کرسکتے ہیں۔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

1۔ کلاس کا اعلان کرتے وقت میٹا کلاس کے پیرامیٹرز کا اعلان کریں ، یہ پیتھون 2 اور پیتھون 3 دونوں میں کام کرتا ہے ، وہ ایک جیسے ہیں۔
2، کلاس کی تعریف میں اعلان کریں کہ metaclass پراپرٹی پیتھون 2 میں درست ہے ، لیکن پیتھون 3 میں اب یہ درست نہیں ہے۔
3، 2to3 ایک درست کلاس ڈیکلیریشن بناتا ہے، یہاں تک کہ اگر یہ کلاس متعدد والدین کلاسوں سے وراثت کرتی ہے۔

  • کوڈ سٹائل کے بارے میں

مندرجہ ذیل طے شدہ اصلاحات بنیادی طور پر حقیقی اصلاحات نہیں ہیں۔ اس کا مطلب یہ ہے کہ وہ صرف کوڈ کے انداز سے متعلق ہیں ، نہ کہ کوڈ کے جوہر سے متعلق۔ لیکن پیتھون کے ڈویلپرز کو کوڈ کے انداز کو ہر ممکن حد تک یکساں بنانے میں بہت دلچسپی ہے۔ اس کے لئے ، پیتھون کوڈ اسٹائل کی ایک خصوصی اور سرکاری ہدایت نامہ ہے۔

  • set{"لفظی قدر"}{"لفظی قدر"}

    پیتھون 2 میں، ایک حرفی قدر مجموعہ ((literal set) کی تعریف کرنے کا واحد طریقہ set ((a_sequence) کو کال کرنا ہے۔ پیتھون 3 میں یہ اب بھی کام کرتا ہے، لیکن نئے نشان زد علامت ((literal notation): بڑے قوسین (({}) کا استعمال ایک زیادہ واضح طریقہ ہے۔ یہ طریقہ خالی سیٹ کے علاوہ بھی کام کرتا ہے، کیونکہ لغت بھی بڑے قوسین کے ساتھ نشان زد ہوتی ہے، لہذا {} ایک خالی لغت کی نمائندگی کرتا ہے، نہ کہ ایک خالی سیٹ۔

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}
  • گلوبل فنکشن buffer (((ظاہری طور پر)

    C کے ساتھ لاگو پیتھون آبجیکٹ ایک پرنٹ کر سکتے ہیں فولڈ بافر انٹرفیس () ، جس میں دیگر پیتھون کوڈ کو براہ راست پڑھنے اور لکھنے کے لئے اجازت دیتا ہے ایک میموری کا ٹکڑا. (یہ بہت طاقتور لگتا ہے ، لیکن یہ بھی خوفناک ہے.)

2to3 اسکرپٹ ڈیفالٹ کے طور پر buffer ((() فنکشن کو درست نہیں کرتا ہے۔ اس فنکشن کو چالو کرنے کے لئے ، کمانڈ لائن پر 2to3 کو کال کرتے وقت -f buffer پیرامیٹرز کی وضاحت کریں۔

NotesBeforeAfter
x =buffer(y)x =memoryview(y)
  • کوما کے ارد گرد خالی جگہ ((ظاہری)

    اگرچہ پیتھون انڈینٹنگ اور آؤٹ ڈینٹنگ کے لئے خالی جگہوں کے بارے میں سخت ہے ، لیکن پیتھون خالی جگہوں کے استعمال کے دیگر پہلوؤں کے لئے آزاد ہے۔ فہرستوں ، ذیلی گروپوں ، مجموعوں اور لغات میں ، خالی جگہیں طومار کے سامنے یا پیچھے آسکتی ہیں ، جس کا کوئی برا اثر نہیں ہوگا۔ تاہم ، پیتھون کوڈ اسٹائل گائیڈ میں کہا گیا ہے کہ طومار سے پہلے خالی جگہ نہیں ہوسکتی ہے ، اور طومار کے بعد ایک خالی جگہ شامل ہونی چاہئے۔ اگرچہ یہ محض ایک جمالیاتی غور ہے۔

2to3 اسکرپٹ طے شدہ طور پر کوما کے ارد گرد خالی جگہوں کو درست نہیں کرے گا۔ اس کو چالو کرنے کے لئے ، کمانڈ لائن پر 2to3 کال کرنے پر -f wscomma پیرامیٹرز کی وضاحت کریں۔

NotesBeforeAfter
a ,ba, b
{a :b}{a: b}
  • روایات ((Common idioms)) ((ظاہری طور پر))

    پیتھون کمیونٹی میں بہت سارے روایات قائم ہیں۔ ان میں سے کچھ ہیں: جبکہ 1: لوپ ، جو پیتھون 1 پر واپس جاتا ہے۔ پیتھون میں پیتھون 2.3 تک حقیقی معنوں میں بل کی قسمیں نہیں تھیں ، لہذا ڈویلپرز پہلے 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)

ٹویٹر پرسی ایس ڈی این بلاگ

پیتھون 2 کوڈ کو پیتھون 3 کوڈ میں تبدیل کرنے کا طریقہ

پیتھون 2.x کوڈ کو پیتھون 3.x کوڈ میں تبدیل کرنے کے بارے میں۔
پیتھون 2.x کوڈ کو پیتھون 3.x کوڈ میں تبدیل کرنے کا طریقہ

  • 1۔ دستی طور پر تبدیل کریں

یہ بہت زیادہ نہیں ہے، اگر یہ صرف چند افعال جیسے پرنٹ وغیرہ سے متعلق ہے.

تو آپ کوڈ کو تبدیل کر سکتے ہیں۔

  • 2۔ پیتھون کے اندرونی (پیتھون اسکرپٹ) ٹولز کا استعمال کرکے خود کار طریقے سے تبدیل کریں۔

Python 2.x ورژن ، جیسے Python 2.7.2 جو میں نے انسٹال کیا ہے ، ونڈوز ڈاؤن لوڈ اور انسٹال کرنے کے بعد کچھ مفید ٹولز کے ساتھ آتا ہے۔

ان میں سے ایک کو 2to3.py کہا جاتا ہے اور یہ آپ کو Python 2.x کو Python 3.x میں تبدیل کرنے میں مدد کرتا ہے۔

اس میں واقع ہے: پطرون انسٹال کی جڑ ڈائرکٹری\Python27\Tools\Scripts\2to3.py

2to3.py کا استعمال کرتے ہوئے پیتھون 2.x کوڈ کو پیتھون 3.x کوڈ میں تبدیل کرنے کا طریقہ
مثال کے طور پر، میرے پاس پیتھون 2.x کے لئے ایک پیتھون اسکرپٹ ہے:

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

اب، کوڈ جو اسے پیتھون 3.x میں تبدیل کرنا چاہتا ہے۔

ونڈوز کے سی ایم ڈی کو کھول کر ، اسکرپٹ کو تبدیل کرنے کے لئے اسکرپٹ کے نیچے ، اور پھر چلائیں

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 کوڈ میں تبدیل ہو گیا ہے۔

اس کے علاوہ، ایک بیک فائل بھی ہے: 34563264_data_from_site.py.bak، دونوں کا موازنہ کریں اور فرق دیکھیں:

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

یہاں صرف چند جملوں کی وضاحت ہے:

(1) اگر مندرجہ بالا -w پیرامیٹرز کو شامل نہیں کیا جاتا ہے تو ، اس کے بجائے صرف موجودہ ونڈو میں تبدیل کرنے کے عمل سے متعلق مختلف مواد کو پرنٹ کیا جائے گا۔

(۲) -w شامل کریں، یعنی تبدیل شدہ مواد کو اصل دستاویز پر واپس لکھ دیں۔

(3) اگر آپ بیک فائل نہیں بنانا چاہتے ہیں تو ، آپ کو -n شامل کرنا پڑے گا۔

(4) اگر آپ ان نتائج کو نہیں دیکھنا چاہتے ہیں تو ، نو ڈفز کے ساتھ ، آپ کر سکتے ہیں۔

اس کے علاوہ، میں نے اس کے بارے میں مزید کچھ نہیں بتایا۔ دلچسپی رکھنے والوں کے لئے، آپ کو اس کے بارے میں مزید معلومات حاصل کرنے کی اجازت ہے۔

مندرجہ بالا 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)