Python != Python .... Versiot ???

Python_2.7 ok

Onko Python 2.7 ja Python 3 täysin eri kieli ?

Python 3 siis tarkoittaa joko 3.1.2 tai 3.2.3.

Alimpana copypastettu python -koodi, joka laskee 2000 piin hexadesimaalia.

Netistä löytyi tällainen:

http://ideone.com/

Tässä täysin toimiva: http://ideone.com/cxReD7

Ja tämä: http://ideone.com/P80NBI

taas EI toimi, vaan antaa virheilmoituksen " AttributeError: 'generator' object has no attribute 'next' "

Erona se, että toimiva käyttää Python 2.7, ja hyvin toimii.

Ja ei-toimiva käyttää Python 3.1.2, ja sille siis sama koodi EI kelpaa.

Omalla koneellani on Python 3.2.3, ja se antaa myös saman virheilmoituksen:
" AttributeError: 'generator' object has no attribute 'next' ".

Pitäisikö siis poistaa tuo 3.2.3 -asennus ja asentaa 2.7 tilalle ?

Onko tämä yleensäkin skriptikielille tyypillistä, että kun tulee uusi versio tulkista, niin vanha koodi ei sille enää kelpaakaan? Muistanpa nähneeni toimimattomia web -kauppoja, ja syynä se, että joko PHP tai joku muu vastaava tulkattava kieli, jolla web -kauppa oli tehty, niin kun ei pyöri kauppiaan omalla palvelimella, vaan webhotellista vuokratulla, niin kun webhotellin yläpito päivitti uuteen PHP -versioon, niin webkauppa lakkasi toimimasta.

Sitä sopii miettiä: miksi web -kauppiaat usein ajavat skriptikielellä tehtyä web -kauppasovellusta webhotellilta vuokratussa tilassa siten, että kuitenkin webhotellin ylläpito päättää skriptitulkin (esim. PHP tai Python) päivityksestä, eli kauppias EI päätä. Eikö tuo ole varma tapa ongelmiin, ennemmin tai myöhemmin ?

Tässä vielä Python -koodia piin laskemiseksi, joka siis toimii Python 2.7:lla, mutta ei 3- sarjan Pythonilla:

----------------------------------------

def pi():
N = 0
n, d = 0, 1
while True:
xn = (120*N**2 151*N 47)
xd = (512*N**4 1024*N**3 712*N**2 194*N 15)
n = ((16 * n * xd) (xn * d)) % (d * xd)
d *= xd
yield 16 * n // d
N = 1


pi_gen = pi()
import sys
sys.stdout.write("pi = 3.")
for i in range(2000):
sys.stdout.write("0123456789ABCDEF"[pi_gen.next()])
if (((i 1) % 64) == 0):
sys.stdout.write(" \n")
sys.stdout.write("\n")

3

199

    Vastaukset

    Anonyymi (Kirjaudu / Rekisteröidy)
    5000
    • diibamies

      "Onko Python 2.7 ja Python 3 täysin eri kieli ?"
      Kyllä ja ei. 3 versiossa kielestä poistettiin paljon menneisyyden painolastia ja sitä siistittiin.

      Ehkäpä ne näkyvimmät erot python2 ja python3 välillä:
      * python3:ssa print on funktio, kun taas python2 se oli lause (statement)
      * python3:ssa kaikki merkkijonot on natiivina unicodea joka järkeistää merkkijonojen käyttöä. Vanhan merkkijonon tilalle tyli byte tyyppi.

      Ehkä näkyvimmät erot 3:n ja 3:n välillä on siinä että python3:ssa print on funktio kun 2:ssa se oli vielä lause ja että python3:ssa kaikki merkkijonot on natiivina unicode. Uutena asiana tuli sitten bytes tyyppi jolla voi käsitellä tietoja tavuittain.

      Täältähän niitä eroja sitten löytää
      http://docs.python.org/3.0/whatsnew/3.0.html

      Laitamasi esimerkki korjaantuu kun korjaat tuon yhden rivin tällaiseksi
      sys.stdout.write("0123456789ABCDEF"[next(pi_gen)])

      No varmasti ongelmia tulee ennenpitkää jos itse ei voi vaikuttaa käytettävään tulkkiin. Onneksi näin ei pitäisi kyllä kovin usein olla. Esim. pythonin kanssa on hyvin helppo käyttää useita eri rinnakkaisversioita samalla palvelimella joilla jokaisella on omat kirjastonsa jne. käyttäen virtualenviä (http://pypi.python.org/pypi/virtualenv). Ongelmaa ei synny kun ei käytä sellaista palvelintarjoajaa joka haluaa määrätä kaiken :)

      Ja pythonihan tarjoaa 2to3 apuvälineen porttaamaan 2.x koodin automaattisesti kolmoeen. Ihan kaikesta se ei selviä mutta kun tekee koodin suositusten mukaisesti niin sama koodi toimii käytännössä molemmissa
      http://docs.python.org/2/library/2to3.html
      (veikkaan että esimerkkisi korjaantuisi tuolla mutta en jaksa testata)

      "Pitäisikö siis poistaa tuo 3.2.3 -asennus ja asentaa 2.7 tilalle ?"
      Asenna python 3.3, siinä tuli kaikkea kivaa. Python 2.x ei kannata enää juurikaan käyttää muutoin kuin erityisestä pakosta kuten vanhan koodin ylläpitoa, riippuvaisuus päivittämättömään kirjastoon jne.

      • diibamies

        ttu.. olis pitänyt lukea kertaalleen :) editoin sitten tuossa jo kesken kirjoitusta ja tuli väliin sama asiaa kahteen kertaan erilailla.. no ehkäpä se sit tulee paremmin selväksi!


    • Ei hyvä

      "Onko tämä yleensäkin skriptikielille tyypillistä, että kun tulee uusi versio tulkista, niin vanha koodi ei sille enää kelpaakaan?"

      Ei todellakaan. Tuo on tyypillistä open sourcelle. Siinä muutellaan ohjelmia ihan turhaan ja sotketaan siten käyttäjien ohjelmat, kuten nyt taas valitettavasti jouduit huomaamaan.

    Ketjusta on poistettu 0 sääntöjenvastaista viestiä.

    Luetuimmat keskustelut

    1. Naiset miltä kiihottuminen teissä tuntuu

      Kun miehellä tulee seisokki ja ja sellainen kihmelöinti sinne niin mitä naisessa köy? :)
      Sinkut
      66
      4623
    2. Haistoin ensin tuoksusi

      Käännyin katsomaan oletko se todellakin sinä , otin askeleen taakse ja jähmetyin. Moikattiin naamat peruslukemilla. Tu
      Ikävä
      14
      2259
    3. Olet sä kyllä

      ihme nainen. Mikä on tuo sun viehätysvoiman salaisuus?
      Ikävä
      25
      1784
    4. Hiljaiset hyvästit?

      Vai mikä on :( oonko sanonut jotain vai mitä?
      Ikävä
      12
      1518
    5. Teuvo Hakkaraisesta tulee eurovaalien ääniharava

      Persuissa harmitellaan omaa tyhmyyttä
      Maailman menoa
      28
      1448
    6. Miksi kohtelit minua kuin tyhmää koiraa?

      Rakastin sinua mutta kohtelit huonosti. Tuntuu ala-arvoiselta. Miksi kuvittelin että joku kohtelisi minua reilusti. Hais
      Särkynyt sydän
      5
      1308
    7. Turha mun on yrittää saada yhteyttä

      Oot mikä oot ja se siitä
      Suhteet
      10
      1227
    8. Näkymätöntä porukkaa vai ei

      Mon asuu yksin. Mitas mieltä ootte ?
      Ikävä
      13
      1146
    9. SOSIALI DEMOKRATIA

      AATE , JOKA ETENEE.
      Suomen sosialidemokraattinen puolue
      23
      1092
    10. Martinasta kiva haastattelu Iltalehdessä

      Hyvän mielen haastattelu ja Martina kauniina ja raikkaan keväisenä kuvissa.
      Kotimaiset julkkisjuorut
      291
      1014
    Aihe