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")
Python != Python .... Versiot ???
3
248
Vastaukset
- 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
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ä802809Pelotelkaa 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 soda2951626Mikä 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ä?2461527- 871371
IL - VARUSMIEHIÄ lähetetään jatkossa NATO-tehtäviin ulkomaille!
Suomen puolustuksen uudet linjaukset: Varusmiehiä suunnitellaan Nato-tehtäviin Puolustusministeri Antti Häkkänen esittel4011349Nyt kun Pride on ohi 3.0
Edelliset kaksi ketjua tuli täyteen. Pidetään siis edelleen tämä asia esillä. Raamattu opettaa johdonmukaisesti, että3961273Esko 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 tat381027Kiitos nainen
Kuitenkin. Olet sitten ajanmerkkinä. Tuskin enää sinua näen ja huomasitko, että olit siinä viimeisen kerran samassa paik2999Hyvä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 kun329854Miksi Purra-graffiti ei nyt olekkaan naisvihaa?
"Pohtikaapa reaktiota, jos vastaava graffiti olisi tehty Sanna Marinista", kysyy Tere Sammallahti. Helsingin Suvilahden254832