snippsat Skrevet 30. mars 2011 Del Skrevet 30. mars 2011 (endret) Tviler på at det er noen forskjell på minnebruken på de to. Begge kodene er jo så og si identiske, bytt ut yield med print så er det akkurat samme kode. Jo det er en klar forskjell,"yield" gjør at det lages et generator object. Skal gi en rask forklaring hvordan dette virker eller så er det bare og lese mere om dette. En av fordelene med en generator er at den ikke lagere alle elementer i en loop til minne. >>> def num(n): ... for i in range(n): ... yield i ... >>> num(10) <generator object num at 0x052AB350> >>> #Vi har nå et generator object som må loopes over eller bruke next() >>> n = num(10) >>> n.next() 0 >>> n.next() 1 >>> for i in n: ... print i ... 2 3 4 5 6 7 8 9 >>> #Fordelen med denne løsning er at for hver loop blir kun et og et element lagret i minne. Nå er vi litt off topic,så beklager det. Endret 30. mars 2011 av SNIPPSAT Lenke til kommentar
FraXinuS Skrevet 31. mars 2011 Del Skrevet 31. mars 2011 Hadde koden vært noe slik som nedenfor, så hadde generatoren hatt en fordel. def fib1(max): x,y,l=0,1,[] while y<max: l.append(x) x,y=y,x+y return l for n in fib1(1000000000000000000000000**100): print n # VS def fib2(max): x,y=0,1 while y<max: yield x x,y=y,x+y for n in fib2(1000000000000000000000000**100): print n Men koden du postet: x,y=0,1 while y<1000000000000000000000000**100:print x;x,y=y,x+y Denne er ikke noe dårligere enn generator versjonen. Den vil ikke bruke noe mer minne, siden den bare printer ut tallene, men ikke lagrer dem. Lenke til kommentar
Gjest Slettet+9871234 Skrevet 31. mars 2011 Del Skrevet 31. mars 2011 (endret) Men dette er ikke kode i golf standaren,hvor stygg kode med alle triks som finnes stort sett er best. Hvor finner jeg den? Tideligere i tråden? http://www.phpgolf.org/ Interessant prosjekt The term comes from Perl Golf where the point is to solve programming challenges with as few bytes as possible. Just like in real golf where players aspire to get the ball in the hole with as few strokes as possible. This is not a place to learn about good programming practice, this is just for fun. for de som har tid til det. Nå er jo såvel Python som PHP tolket kode. Python er som nevnt en C løkke og PHP preprosessoren er også skrevet i C om jeg husker riktig. For å komme på toppen av den listen må man muligens grave seg ned i bytekode og enda lavere til assembly (1 - 1 relasjon med binær maskin kode) og sammenligne assembly koden som genereres av ulike funksjoner. Det er, om man har en moderne C kompilator, enkelt nok (i hvertfall om funksjonen skrives direkte i C): http://www.oopschool.com/phpBB3/viewtopic.php?f=5&t=159 Men å forbedre (her i betydningen bit / byte redusere) den koden krever kunnskaper og kreativitet de ferreste har tid til å lære seg: https://www.diskusjon.no/index.php?showtopic=633431 Se også: https://www.diskusjon.no/index.php?showtopic=958029 Personer med et konkurranseinnstinkt som Marit Bjørgen og Petter Northug, går kanskje veien om assembly for å finne forslag til forbedringer og minimalistiske løsninger. Selv en moderne optimalisert C kompilator kan ta omveier ut i eller i minnet. Avansert optimalisert programmering med flekjerneprosessorer gjør ikke dette enklere. Det kan ta år å beherske dette. Men man vil nok lære mye av det. Noen flere ressurser: http://www.kjellbleivik.com/Books/#assembly God introduksjons bok http://www.kjellbleivik.com/Books Boken av Alex Varanese /GameDevelopment.php#gamescripting side 24 og spesielt kapittel 12 "Compiler Theory". En klassisk mursteinsbok som gjør dette enkelt og interessant og som er viktig for de som vil lære å utvikle avanserte spill der man integrerer skripts med C / C++. Lykke til og fortsett tråden så lenge forumet lever. Jeg leser med interesse nye bidrag, men har ikke selv tid til å gå mer i dybden. Endret 31. mars 2011 av Slettet+9871234 Lenke til kommentar
AlecTBM Skrevet 31. mars 2011 Forfatter Del Skrevet 31. mars 2011 Er en del gale løsninger på bit nivået. Men jeg trur det å lære seg assembly (eller C/C++) ikke vil komme deg noen vei. Bit forståelsen kan jo hjelpe, men år på baken er også viktig. Er nok mer på forståelsen på hvordan ting fungerer enn å lære seg andre språk (som i praksis har liten eller ingen innvirkning på phpkoden) Lenke til kommentar
Gjest Slettet+9871234 Skrevet 3. april 2011 Del Skrevet 3. april 2011 (endret) Her package main // fib returns a function that returns // successive Fibonacci numbers. func fib() func() int { a, b := 0, 1 return func() int { a, b = b, a+b return b } } func main() { f := fib() // Function calls are evaluated left-to-right. println(f(), f(), f(), f(), f()) } er en Fibonacci løsning i Googles relativt nye Go språk: http://golang.org/ lansert som språket der Pythom meets C++ Guido van Rossum http://www.python.org/~guido/ som lagde Python jobber nå for Google. Endret 3. april 2011 av Slettet+9871234 Lenke til kommentar
AlecTBM Skrevet 4. april 2011 Forfatter Del Skrevet 4. april 2011 Tja, da kan vi jo sette stopp for python, C/C++, Go(?) i denne tråden. Denne tråden skal handle om PHP Lenke til kommentar
Gjest Slettet+9871234 Skrevet 4. april 2011 Del Skrevet 4. april 2011 Denne tråden skal handle om PHP Det skulle du muligens nevnt tidligere i denne tråden. PHP er jo mitt favoritt skripting språk for web applikasjoner, ikke minst fordi: PHP 6 nærmer seg et fullgodt OO språk med navnerom, utf-8 støtte samt ORM muligheter etc. Intet språk er så tett integrert med (X)HT(ML) som PHP. En rekke "frameworks" som det lite kjente Ulysses og en rekke andre http://www.phpframeworks.com/ med ORM støtte. Kjent grensesnitt for de som bruker C++Builder og Delphi (Object Pascal):http://www.embarcadero.com/images/dm/technical-papers/delphi-php-in-action-technote-qadram-software.pdf Men det var nok også utenomsnakk . Skal nevne C++ / Python og php utenomsnakk mer i denne tråden. Kos dere med oppgaven og vær konsekvent med tråd modereringen . Lenke til kommentar
Sk!ppy Skrevet 4. april 2011 Del Skrevet 4. april 2011 Denne tråden skal handle om PHP Det skulle du muligens nevnt tidligere i denne tråden. Nevnt tidligere? Tittelen på tråden er phpGolf, jo. Hvordan kan det missforstås? Lenke til kommentar
Gjest Slettet+9871234 Skrevet 4. april 2011 Del Skrevet 4. april 2011 Nevnt tidligere? Tittelen på tråden er phpGolf, jo. Hvordan kan det missforstås? Enig i det. Går du tilbake i tråden, så burde det vært slått ned på utenomsnakk straks det oppstod. Tilbake til emnet Lenke til kommentar
AlecTBM Skrevet 8. april 2011 Forfatter Del Skrevet 8. april 2011 Hehe, ja burde vell kanskje det. For andre språk så har man blant annet perlGolf og codeGolf Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå