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

248

    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. Aivosyöpää sairastava Olga Temonen TV:ssä - Viimeinen Perjantai-keskusteluohjelma ulos

      Näyttelijä-yrittäjä Olga Temonen sairastaa neljännen asteen glioomaa eli aivosyöpää, jota ei ole mahdollista leikata. Hä
      Maailman menoa
      80
      2809
    2. Pelotelkaa niin paljon kuin sielu sietää.

      Mutta ei mene perille asti. Miksi Venäjä hyökkäisi Suomeen? No, tottahan se tietenkin on jos Suomi joka ei ole edes soda
      Maailman menoa
      295
      1626
    3. Mikä saa ihmisen tekemään tällaista?

      Onko se huomatuksi tulemisen tarve tosiaan niin iso tarve, että nuoruuttaan ja tietämättömyyttään pilataan loppuelämä?
      Sinkut
      246
      1527
    4. Minkä merkkisellä

      Autolla kaivattusi ajaa? Mies jota kaipaan ajaa Mersulla.
      Ikävä
      87
      1371
    5. IL - VARUSMIEHIÄ lähetetään jatkossa NATO-tehtäviin ulkomaille!

      Suomen puolustuksen uudet linjaukset: Varusmiehiä suunnitellaan Nato-tehtäviin Puolustusministeri Antti Häkkänen esittel
      Maailman menoa
      401
      1349
    6. Nyt kun Pride on ohi 3.0

      Edelliset kaksi ketjua tuli täyteen. Pidetään siis edelleen tämä asia esillä. Raamattu opettaa johdonmukaisesti, että
      Luterilaisuus
      396
      1273
    7. Esko Eerikäinen tatuoi kasvoihinsa rakkaan nimen - Kärkäs kommentti "Ritvasta" lävähti somessa

      Ohhoh! Esko Eerikäinen on ottanut uuden tatuoinnin. Kyseessä ei ole mikä tahansa kuva minne tahansa, vaan Eerikäisen tat
      Suomalaiset julkkikset
      38
      1027
    8. Kiitos nainen

      Kuitenkin. Olet sitten ajanmerkkinä. Tuskin enää sinua näen ja huomasitko, että olit siinä viimeisen kerran samassa paik
      Tunteet
      2
      999
    9. Hyväksytkö sinä sen että päättäjämme ei rakenna rauhaa Venäjän kanssa?

      Vielä kun sota ehkäpä voitaisiin välttää rauhanponnisteluilla niin millä verukkeella voidaan sanoa että on hyvä asia kun
      Maailman menoa
      329
      854
    10. Miksi Purra-graffiti ei nyt olekkaan naisvihaa?

      "Pohtikaapa reaktiota, jos vastaava graffiti olisi tehty Sanna Marinista", kysyy Tere Sammallahti. Helsingin Suvilahden
      Maailman menoa
      254
      832
    Aihe