Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  5 1035
Jeg holder på å forkorte kjøretiden til en python-algortime, og har lest gjennom https://wiki.python.org/moin/PythonS...erformanceTips

Her blir det nevnt at referanser (objekt.referanse) tar tid å kalkulere, og hvis du har en for-løkke som dette:

Kode

for i in tekst:
    array.append(i)
vil man spare tid på å helle skrive

Kode

arrayAppend=array.append
for i in tekst:
    arrayAppend(i)
Dette har betydelig kortet kjøretiden min. Men det jeg lurer på er om en objektreferanse som er i selve for-loopen. Som dette:

Kode

for i in tekst.temp:
    print("42")
tekst.temp kalkuleres hver gang for-løkka kjører, eller kjøres dem bare én gang?

Min stoppeklokke er ikke nøyaktig nok til å se noen forskjell.
Sist endret av olli408; 5. september 2013 kl. 10:39.
NOOOOOOOOOOOOOOOOOO-
robhol's Avatar
Jeg vil - uten å ha peiling på python spesielt - tro det er sannsynlig at det er "smart" nok laget til å bare evaluere det én gang. Ellers kan du jo for eksempel kjøre den snutten en million ganger og se om du ser noen forskjell da.
Sist endret av robhol; 5. september 2013 kl. 11:01.
Når jeg hadde Python på skole, kunne vi legge inn en kodebit som printet kjøretid.

Husker ikke nøyaktig hva, men den er ihvertfall mer nøyaktig enn stoppeklokka
Man bruker ikke en fysisk stoppeklokke for å kalkulere kjøretid

Kode

import time

start = time.time()

for i in tekst.temp:
    print("42")

print time.time() - start
Sist endret av raze; 5. september 2013 kl. 11:09.
Sitat av raze Vis innlegg
Man bruker ikke en fysisk stoppeklokke for å kalkulere kjøretid

Kode

import time

start = time.time()

for i in tekst.temp:
    print("42")

print time.time() - start
Vis hele sitatet...
Stoppeklokken min er metaforisk. Programmet blir evaluert av en server som tester forskjellige nesten-tilfeldige inputs, så å teste tiden på én spesifikk inputt virker dårlig fordi det kan være marginalt raskere på noe, samtidig som det er veldig treigt på noe annet.

Men det er sikkert en grei pekepinn, så takk for tipset.
Bruk timeit for og kalkulere tid.
Kan vise litt med første eksempel.

Koden kjøres 10000000 ganger og vi får gjennomsnitt tid tilbake.

Kode

import timeit

list_append_test = '''
tekts = 'Hello world'
array = []
for i in tekts:
    array.append(i)
'''

print timeit.Timer(list_append_test).timeit(number=10000000) #13.19 sec
Skrive koden med list comprehension gjør den raskere.

Kode

import timeit

list_comprehension = '''
tekts = 'Hello world'
[i for i in tekts]
'''

print timeit.Timer(list_comprehension).timeit(number=10000000) #7.78 sec
Kjøre samme kode med PyPy og tid blir 1.2 sec.
vil man spare tid på å helle skrive
Vis hele sitatet...
Nei det gir ingen mening.

Må tekst.temp kalkuleres hver gang for-løkka kjører, eller kjøres dem bare én gang?
Vis hele sitatet...
Du looper over "tekst.temp" en gang.
Hvor mange ganger blir 42 printet her,når jeg looper over tekst.temp?
Prøve tenke ut svaret uten og kjøre koden.

Kode

class Foo():
    @property
    def temp(self):
        return 'Foo Bar'

tekst = Foo()
for i in tekst.temp:
    print ('42') #?
Sist endret av snippsat; 5. september 2013 kl. 13:43.