Hver er munurinn á Python 3 og 2.7?


svara 1:

Eins og er er Python heiminum aðallega skipt í tvö brot, annan sem er enn að vinna á Python 2.7 og sá sem er byrjaður að flytja yfir í 3.x eða notar 3.x án þekkingar eða reynslu í 2.7

Python 2.7 verður engu að síður stutt í framtíðinni og verður brátt úreltur. Python 2,7 niðurtalning

Svo spurningin um hver munurinn á 3.x og 2.7 er er brennandi spurning, því ólíkt öðrum uppfærslum hefur Python 3.x ekki aðeins nýja eiginleika, heldur breytir hún einnig heimspeki og hönnun. Og það væri betra að kalla Python 3.x þroskað Python tungumál en bara að uppfæra úr 2.7

Hér eru nokkur lykilmunur á 2.7 og 3.x.

  1. Takast á við str og Unicode:

Í Python 2.7 eru venjulegir strengir, bætastrengir og Unicode strengir. Reyndar eru bætir og venjulegir í meginatriðum það sama í Python 2.7.

my_str = 'dæmi' byte_str = b'example 'uni_str = u'example' prentun (gerð (my_str) # skilar frá prentun (gerð (byte_str) # skilar frá prentun (gerð (uni_str) # skilar út

Það er ekkert betra en bætategundin. Með öðrum orðum, venjulegur streng hegðar sér eins og dulkóðaðri gerð með aðeins ASCII stöfum. Dæmi (Python 2.7)

>>> my_str = 'fyrir' # sértákn og umlaut, enginn ASCII stafur >>> Meine_str 'f \ xfcr' >>> prentun (my_str) skinn

Í dæminu hér að ofan er stafurinn sem ekki er ASCII í my_str breyttur í ascii bleikju í bakgrunni, en prenta (my_str) hefur prentað réttan streng. Það gerist vegna þess að Python 2.7 kóðar innra með mér_str. Svo þú getur ekki hringt í umritunaraðferð fyrir my_str eða python2.7 str. En hægt er að hringja í umskráningu vegna þess að Python er þegar umritaður í dulkóðun.

my_str.encode ('latin-1') vekur upp UnicodeDecodeError vegna þess að my_str er þegar umritaður í dulkóðun. my_str.decode ('latin-1') # skilar Unicode streng.

Í Python 3.x er Unicode vísað til strengs (str gerð) og bætis sem bætategundar. Þetta þýðir að allir strengir eru Unicode strengir sjálfgefið og það er enginn venjulegur strengur. Aðeins Unicode og Bytes eru strengjategundirnar í Python 3.

my_str = 'dæmi' byte_str = b'example 'uni_str = u'example' prentun (gerð (my_str) # skilar frá prentun (gerð (byte_str) # skilar frá prentun (gerð (uni_str) # skilar út

Þetta þýðir að sjálfgefið geturðu slegið inn eða haldið öðrum stafum en ASCII stöfum með gerðinni str / unicode. Öfugt við python2.7 kóðar python3.x ekki strenginn innbyrðis og meðhöndlar persónuna í samræmi við Unicode stílinn. Til dæmis

>>> my_str = 'fyrir' # sértákn og umlaut, enginn ASCII stafur >>> my_str 'skinn' >>> prentun (my_str) skinn >>> b'for '# reynir að skrifa bæti streng með non-ASCII Að eiga persónur. Vekur upp villu við að segja að bæti geti aðeins innihaldið ASCII stafi. Hins vegar geturðu afkóða eða slegið það með því að bjóða upp á kóðunarskipulag >>> s1 = bæti (my_str, 'utf-8') >>> s2 = mein_str.encode ('utf-8') >>> s1 b'f \ xfcr '>>> s2 b'f \ xfcr' # Sama niðurstaða >>> s1.decode ('utf-8') 'fyrir' # Unicode strengur

2. Í Python 3.x er næstum allt rafall

Mikilvægasta og stærsta breytingin á Python 3.x miðað við Python 2.7 er að allt er orðið rafall. Rafalar í Python hafa þann kost að árangursríkur minni notkun. Af hverju að eyða minni með n þætti þegar þú getur fengið einn þátt í einu?

Í python2.7 eru aðferðir svið og xrange, þar sem xrange er rafall og svið inniheldur lista yfir þætti.

>>> Svið (5) [1, 2, 3, 4, 5] >>> xrange (5) xrange (5) # endurtekningarhlutur sem býr til tölu ef þess er krafist

Það er ekkert XRange í Python 3.x, Range sjálft hegðar sér eins og XRange frá Python 2.7

Sömuleiðis er öllum hringingum eða hlutum sem skilar lista yfir þátta í python2.7 í Python 3.x skipt út fyrir rafall mótmæla

Dæmi

Python 2.7 >>> svið (5) [1, 2, 3, 4, 5] Python 3.x >>> svið (5) svið (5) # rafall mótmæla Python 2.7 >>> zip ([1,2,3 ], [4,5,6]) [(1, 4), (2, 5), (3, 6)] Python 3.x >>> zip ([1,2,3], [4,5 , 6]) zip hlut # zip rafall mótmæla Python 2.7 >>> kort (Lambda x: x * x, [1,2,3,4,5]) [1, 4, 9, 16, 25] Python 3. x >>> kort (Lambda x: x * x, [1,2,3,4,5]) korts mótmæla # korts rafall mótmæla Python 2.7 >>> d1 = {'a': 1, 'b': 2, 'c ': 3} >>> d1.items () [(' a ', 1), (' b ', 2), (' c ', 3)] Python 3.x >>> d1 = {' a ' : 1, 'b': 2, 'c': 3} >>> d1.items () dict_items object # dict_items rafall mótmæla # svipaðir hlutir einnig fyrir d1.values ​​() og d1.keys ()

Þessar og næstum allar gerðir af aðgerðum sem skiluðu lista í Python 2.7 skila nú rafallhlutnum í Python 3.6

Ólíkt Python 2.7, sem inniheldur þætti í orðabókinni í óraðri röð, inniheldur Python 3.6 orðabókin einnig gildið í röð.

3. Skilgreindu aðgerðir með væntanlegri gerð breytu gagna og skila gerð gagna í Python 3.x.

def myfunc (num: int) -> int: exist

Þessi ráðstefna kemur ekki inn í gildi þitt. Það er bara samningur til að sýna fram á að gert er ráð fyrir ákveðinni gagnategund. Engar villur eða undantekningar eru þó vaknar fyrir öðru gildi.

Fyrir frekari upplýsingar um þetta atriði, sjá hitt svarið mitt undir Vivek Keshores svari við Hvernig fæ ég inn sterka gerð breytu í Python 3?

4. Alheimsnafnrými í Python2.7

Við skulum skilja alþjóðlegt nafnrýmisleka með því að nota dæmi.

>>> i = 10 >>> prenta i 10 >>> l1 = [i fyrir i á svæði (5)] >>> prenta l1 >>> [0, 1, 2, 3, 4] >>> i 4. mál

Í dæminu hér að ofan er hægt að sjá að alheimsbreytunni „i“ er breytt í staðbundnu samhengi listaskilningsins, sem helst ætti ekki að gerast.

Þó að það sé enginn alþjóðlegur nafnrýmisleka í Python 3.x. Breytu með sama nafni í staðbundnu samhengi hefur engin áhrif á alþjóðlega breytu með sama nafni.

>>> i = 10 >>> prenta i 10 >>> l1 = [i fyrir i á svæði (5)] >>> prenta l1 >>> [0, 1, 2, 3, 4] >>> i 10. mál

Fyrir utan allar þessar breytingar eru nokkrar smávægilegar breytingar, svo sem

  • prenta yfirlýsingu (2.7) og prenta () aðferð (3.x) inntak () & raw_input () í 2.7 og aðeins inntak () í 3. niðurstöðu skiptingar '/' rekstraraðila í 2.7 og 3.xuse af 'sem' á meðan Meðferð á undantekningunni í 3.6, eins og að undanskildum ValueError sem erBanker námundun í 3.x öfugt við 2,7, til dæmis í 2,7 umferð (14,5) -> 15 og umferð (15,5) -> 16, en í Python 3.x. Umferð (14.5) -> 15 og einnig umferð (15.5) -> 15

svara 2:

Til að læra meira um muninn á Python 3 og Python 2.7 skaltu fara á Python Software Foundation Wiki Server, þar sem greint er frá mismun á Python 2.7 og 3.3. Það fer raunverulega eftir því hvað þú vilt ná. Ályktun: "Python 2.x er arfur, Python 3.x er nútíð og framtíð tungumálsins."

Það er lúmskur munur á þessu tvennu. Stærsti munurinn er þó tjáningin.

Hvað er öðruvísi við PRINT STATEMENT

Frá umræðum um staflaflóð,

„Sýnilegasti (munurinn) er líklega hvernig„ prenta “staðhæfingin virkar. Það er nógu mismunandi að sama handrit geti ekki keyrt á báðum útgáfunum á sama tíma, en veldu eina og þér munar það ekki. „Þú getur lært meira um það með því að ganga í góðan forritunarskóla sem heitir Holberton School og komast að meira um Python útgáfur og önnur helstu forritunarmál. „Helsti kosturinn við 3.x er að hann er uppfærður, þannig að allir nýir eiginleikar eru útfærðir þar í stað þess að bæta við 2.x. Hitt sem þú gætir viljað íhuga er að það er algengur python framtíðarinnar. Svo ef þú horfir nokkrum árum seinna, þá verður þetta þroskaða greinin sem fólk fer til. "


svara 3:

Til að læra meira um muninn á Python 3 og Python 2.7 skaltu fara á Python Software Foundation Wiki Server, þar sem greint er frá mismun á Python 2.7 og 3.3. Það fer raunverulega eftir því hvað þú vilt ná. Ályktun: "Python 2.x er arfur, Python 3.x er nútíð og framtíð tungumálsins."

Það er lúmskur munur á þessu tvennu. Stærsti munurinn er þó tjáningin.

Hvað er öðruvísi við PRINT STATEMENT

Frá umræðum um staflaflóð,

„Sýnilegasti (munurinn) er líklega hvernig„ prenta “staðhæfingin virkar. Það er nógu mismunandi að sama handrit geti ekki keyrt á báðum útgáfunum á sama tíma, en veldu eina og þér munar það ekki. „Þú getur lært meira um það með því að ganga í góðan forritunarskóla sem heitir Holberton School og komast að meira um Python útgáfur og önnur helstu forritunarmál. „Helsti kosturinn við 3.x er að hann er uppfærður, þannig að allir nýir eiginleikar eru útfærðir þar í stað þess að bæta við 2.x. Hitt sem þú gætir viljað íhuga er að það er algengur python framtíðarinnar. Svo ef þú horfir nokkrum árum seinna, þá verður þetta þroskaða greinin sem fólk fer til. "