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

334

    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. Nainen kokki autossa kammottavan kuoleman sähköauto-Teslan syttyessä tuleen.

      https://www.is.fi/autot/art-2000011652873.html Näin vaarallisia sähköautopalot voivat olla.
      Maailman menoa
      84
      5157
    2. Persuja ei aluevaltuustoissa näy

      Ei tunnu persuja paljon paikalliset asiat kiinnostavan, vaan ainoastaan ulkomaalaiset, joku Israel ja Trumpin fanitus.
      Maailman menoa
      25
      3480
    3. Päivän Riikka: Uudenkaupungin autotehdas hiljeni

      Näin ne 100 000 uutta pysyvää ei-tempputyötä yksityiselle sektorille tämän hallituksen ansiosta syntyy. Työntekijöille j
      Maailman menoa
      38
      2828
    4. Riikka vie Suomen kohta ykköseksi työttömyyskisassa

      Espanja: 10,5 % Suomi: 10,3 % Ruotsi: 9,3 % Kisa on tiukkaa, mutta Riikalla hyvä draivi päällä. Vasemmistolaisen päämin
      Maailman menoa
      9
      1972
    5. Kerro kaivattusi nimi tai nimikirjaimet

      🌠 Tähdenlento! Kirjoittamalla kaivattusi nimen tai nimikirjaimet tähän, saattaa toiveesi toteutua.
      Ikävä
      58
      1820
    6. Miksi pitäisit enemmän

      Minusta kuin siitä toisesta?
      Ikävä
      47
      1586
    7. Alkuvuodesta poistuu työttömyyskorvaus kaikilta joilla on säästössä rahaa

      Tippuu korvaukselta iso määrä työttömiä.
      Maailman menoa
      263
      1476
    8. Mitä meidän välillä

      Tulee tapahtumaan vai tuleeko mitään?
      Ikävä
      94
      1382
    9. Tämmönen höpsö

      Höpönassu mä olen. En mikään erikoinen…hölötän välillä ihan levottomia. Tykkäisit varmasti jos olisin siellä sun vieress
      Suhteet
      44
      1356
    10. Hiljaisuus

      Tarkoittaa välinpitämättömyyttä, henkistä väkivaltaa ja kiusaamista. Olet valinnut hiljaisuuden.
      Ikävä
      73
      1078
    Aihe