Python 3 жана 2,7 ортосунда кандай айырма бар?


жооп 1:

Учурда, Python дүйнө негизинен 2,7 эки топтор, бири дагы Python 2.7 иштеп, билим, тажрыйбасы бар же жок бир 3.x же 3.x көчүп баштады колдонулат бөлүнөт

Python 2.7 мындан ары баары келечекте колдоого алынган жана жакында эскирген болуп жатат. Python 2.7 Countdown

3.x жана 2,7 ортосундагы айырма кайсы деп сурашканда, ошондуктан жаңы өзгөчөлүктөрү тууралуу башка жакшыртууларды айырмаланып Python 3.x гана эмес, анткени, күйүп жаткан суроо бар, бирок ошондой эле киргизилген карашыбызды жана стили өзгөртөт. Ал эми 2,7 эле өркүндөтүүгө караганда Python жетилген тили катары Python 3.x чакыруу үчүн жакшы болмок

төмөнкүлөр 2,7 3.x. айрым маанилүү айырмачылыктар бар

  1. көч менен Юникод менен иш алып баруу:

Python 2.7-жылы кадимки струны, байт Саптар жана Юникод эмес саптар бар. Чынында эле, Python 2.7-жылы байт жана нормалдуу негизинен бирдей.

my_str = "үлгү" byte_str = b'example 'uni_str = u'example "басып чыгаруу (түрү (my_str) # көрсөтөт басып чыгаруу (түрү (byte_str) # чыгарат Басып чыгаруу (түрү (uni_str) # Prints чейин

жакшы түрү байт караганда, эч нерсе жок. Башка сөз менен айтканда, бир ИП түрү сыяктуу кадимки сап гана ASCII каармандар менен кыймылдайт. Мисал (Python 2.7)

>>> my_str = 'үчүн' # атайын белгилердин жана umlauts, эч ASCII каармандар >>> meine_str "е \ xfcr" >>> басып чыгаруу (my_str) Fur

Жогорудагы мисалда, азык-ASCII белгиден ASCII Исахар, басып чыгаруу (my_str) менен алкагында my_str өзгөргөн болот, бирок, туура сапты басып калды. Бул Python 2.7 ички my_str коддоо себеби болот. Ошондуктан коддоо-ыкмасы my_str же python2.7 көч деп атай албайт. Бирок расшифровкалоо мурунтан эле Python тарабынан коддолгон, анткени, деп атоого болот.

my_str.encode (латын-1 ") my_str эле коддолгон бери Unico Деде Ката коду тирилтет. my_str.decode (латын-1 ") # бир Юникод сап болуп эсептелет.

Python бир сап (көч-түрү) сыяктуу Unicode 3.x жана байт түрү деп аталат байт. Бардык саптар Юникод эмес саптарды Стандарттыка Бул каражаттар жок жөнөкөй сап бар болуп саналат. Бир гана Юникод эмес жана байт дун сап түрлөрү болуп саналат. 3

my_str = "үлгү" byte_str = b'example 'uni_str = u'example "басып чыгаруу (түрү (my_str) # көрсөтөт басып чыгаруу (түрү (byte_str) # чыгарат Басып чыгаруу (түрү (uni_str) # Prints чейин

Бул каражаттар сиз ASCII Юникод түрү к / демейки менен кирип, же кармап алып, башка ар кандай каармандардын кол алышат. python2.7 код python3.x эмес, сап ички жана качан айырмаланып белгиден Юникод стили боюнча. Мисалы,

>>> my_str = # атайын белгилердин "үчүн" жана umlauts, эч ASCII каармандар >>> meine_str "тери" >>> басып чыгаруу (my_str) Fur >>> b'für '# эмес ASCII менен байт жипти аракет мүнөзгө ээ болот. байт ASCII белгиден гана болушу мүмкүн экенин айтып, ката баштайсыз. Бирок, аны же код схемасын >>> s1 = байт менен камсыз өрнөккө чечмелей алат (my_str, UTF-8) >>> S2 = mein_str.encode (UTF-8) >>> s1 b'f \ xfcr ">>> S2 b'f \ xfcr '# эле жыйынтык >>> s1.decode (UTF-8) # Юникод сап" үчүн "

2. Python 3.x, дээрлик баары бир генератор болуп саналат

Python 2.7 салыштырганда Python 3.x маанилүү жана зор өзгөрүү ал баары бир генератор болуп саналат. Дун Generators натыйжалуу эс пайдалануу артыкчылыгына ээ. Эгер ар бир нерсени кабыл ала албайт, эмне н элементтери менен эс текке?

python2.7 жылы xrange генератор жана заттар тизмеси камтыйт диапазону жерде ыкмасы диапазону жана xrange бар.

>>> Жыйынтыгында номенклатура боюнча (5) [1, 2, 3, 4, 5] >>> xrange (5) зарыл болгон учурларда xrange (5) # жараша түзүлгөн кайталагыч объект, бир катар

Python 3.x-жылы эч кандай XRange жок, Range өзү Python 2.7 XRange сыяктуу кыймылдайт

Ошо сыяктуу эле, python2.7 заттар тизмесин кайра ар бир чалуу же ар бир объект дун бир генератор объектисинин менен алмаштырылсын 3.x

мисалы,

Python 2.7 >>> Жыйынтыгында номенклатура боюнча (5) [1, 2, 3, 4, 5] Python 3.x >>> Жыйынтыгында номенклатура боюнча (5) Жыйынтыгында номенклатура боюнча (5) # объект генератор Python 2,7 >>> индекс ([1,2,3 ], [4,5,6]) [(1, 4), (2, 5), (3, 6)] Python 3.x >>> индекс ([1,2,3], [4.5 6]) айтыс менчик # индекс генератордук объект Python 2.7 >>> карта (лямбда х:. х х *, [1,2,3,4,5]) [1, 4, 9, 16, 25] Python 3 х >>> карта (лямбда х: X * X, [1,2,3,4,5]) карта объект # карта генератордук объект Python 2.7 >>> d1 = { "бир", 1 "б": 2 "с ': 3} >>> d1.items () [( "а", 1), ( "б", 2), ( "с", 3)] Python 3.x >>> d1 = { "а" 1, "б": 3} >>> d1.items () dict_items каршы # dict_items d1.values ​​мүлктү # окшош касиеттери генератордун () жана d1.keys (): 2 "с",

Бул жана Python 2.7 кайра дээрлик тизмесин бар иш-милдеттерди жүзөгө ашыруунун бардык түрлөрү, азыр Python 3.6 генератор объект кайра берүү

Python 2.7 айырмаланып, эч кандай өзгөчө тартипте сөздүк элементтерди камтыйт, Python 3.6 сөздүк да буйрук катарда наркын камтыйт.

3. Python 3.x. күтүлүүчү параметр маалыматтар түрү жана кайра маалыматтар түрү менен иш аныктоо

Постту myfunc (Сан: INT) -> Инт: турат

Бул жыйын абдан баасы эмес. Ал белгилүү бир тиби күтүлүүдө экенин көрсөтүү үчүн бир жыйын болот. башка эч бир мааниси, бирок эч кандай каталар же өзгөчө ташталган болсок.

Дагы бул маселе боюнча мен Python 3 күчтүү түрү параметр менен бирге кантип үчүн Vivek Keshores жооп астында башка жооп көрүүгү болот?

4. python2.7 менен Global аат агып

Биз бир мисал менен дүйнөлүк Аталыштардын жоготуусу түшүнө көр.

>>> >>> мен = 10 10 мен басылмалары >>> l1 = [мен аралыгында мен үчүн (5)] >>> >>> басып l1 [0, 1, 2, 3, 4] >>> мен 4

Жогорудагы мисалда, сиз глобалдык өзгөрмө "мен" идеалдуу болушу керек эмеспи тизме менен түшүнүү, жергиликтүү контексте өзгөрдү деп табышы мүмкүн.

3.x дун жатканда пайда болгон эч кандай эл аралык ат агып. жергиликтүү контексте эле аты бар өзгөрмө бир аты менен дүйнөлүк өзгөрмөнүн эч кандай таасир тийгизбейт.

>>> >>> мен = 10 10 мен басылмалары >>> l1 = [мен аралыгында мен үчүн (5)] >>> >>> басып l1 [0, 1, 2, 3, 4] >>> мен 10

Мындан тышкары, бардык бул өзгөрүүлөр, кээ бир майда-чүйдө өзгөрүүлөр бар эле

  • Басып чыгаруу жөнүндө арыз (2.7) жана басып чыгаруу () ыкмасы (3.x) киргизүү () жана raw_input () 2,7 жана киргизүү () бөлүштүрүүнүн 3.xresult жылы '/' 'деп, 2,7 жана 3.xuse оператор, ал эми 2,7 каршы ValueError erBanker катары тегеректөө 3.x кошпогондо 3,6 башка дарылоо, мисалы 2,7 туру (14,5) -> 15, жана тегерек (15,5) -> 16, ал эми Python 3.x. менен тегерек (14,5) -> 15, ошондой эле тегерек (15,5) -> 15

жооп 2:

Python 3 Python 2.7 ортосундагы айырмачылык тууралуу көбүрөөк билүү үчүн, Python Software Foundation тартып уики Server барып, Python ортосундагы айырмачылыктарды майда-чүйдөсүнө чейин баяндалат 2.7 жана 3.3. Бул жетүү чындап түшүп келгенде келбейт. Корутунду: "Python 2.x Legacy, Python бар 3.x жана тилдин келечеги болуп саналат."

эки мамлекеттин ортосунда тымызын айырмачылыктар бар. Бирок, ири айырма билдирет.

Эмне ЧЫГАРУУ жөнүндө ар кандай

StackOverflow боюнча талкууга алынган,

басылбайт "ачык (айырма), балким, көрсөтмө иши" ". Бул кол жазма ар түрдүү жетиштүү бир эле учурда эки түрү боюнча иштетүү мүмкүн эмес, ал эми бирин тандап, аны сага бир нерсе кылат. "Сен Holberton мектеби деп аталган бир жакшы программалоо мектепке кирүү менен жөнүндө билүүгө жана Python котормолорунда жана башка маанилүү программалоо тилдердин биле аласыз. Анын ордуна 2.x. кошулуп жаткан "деген 3.x негизги артыкчылыгы болуп бардык жаңы өзгөчөлүктөр үчүн күнгө чейин ишке ашырылды, бул Эгер эске алышыбыз керек, башка нерсе, балким, бул жалпы Python келечеги болуп саналат. Сиз бир нече жыл өткөндөн кийин Ошентип, карап көрсөк, бул элди коё турган жетилген тармагы болуп калат. "


жооп 3:

Python 3 Python 2.7 ортосундагы айырмачылык тууралуу көбүрөөк билүү үчүн, Python Software Foundation тартып уики Server барып, Python ортосундагы айырмачылыктарды майда-чүйдөсүнө чейин баяндалат 2.7 жана 3.3. Бул жетүү чындап түшүп келгенде келбейт. Корутунду: "Python 2.x Legacy, Python бар 3.x жана тилдин келечеги болуп саналат."

эки мамлекеттин ортосунда тымызын айырмачылыктар бар. Бирок, ири айырма билдирет.

Эмне ЧЫГАРУУ жөнүндө ар кандай

StackOverflow боюнча талкууга алынган,

басылбайт "ачык (айырма), балким, көрсөтмө иши" ". Бул кол жазма ар түрдүү жетиштүү бир эле учурда эки түрү боюнча иштетүү мүмкүн эмес, ал эми бирин тандап, аны сага бир нерсе кылат. "Сен Holberton мектеби деп аталган бир жакшы программалоо мектепке кирүү менен жөнүндө билүүгө жана Python котормолорунда жана башка маанилүү программалоо тилдердин биле аласыз. Анын ордуна 2.x. кошулуп жаткан "деген 3.x негизги артыкчылыгы болуп бардык жаңы өзгөчөлүктөр үчүн күнгө чейин ишке ашырылды, бул Эгер эске алышыбыз керек, башка нерсе, балким, бул жалпы Python келечеги болуп саналат. Сиз бир нече жыл өткөндөн кийин Ошентип, карап көрсөк, бул элди коё турган жетилген тармагы болуп калат. "