Kann es sein das Python IF's automatisch optimiert?
Code: Alles auswählen
a = 0
b = 1
c = 1
if ( a and b and c )
lg tlb
p.s. der code tag ist praktisch
Code: Alles auswählen
a = 0
b = 1
c = 1
if ( a and b and c )
Hi!thelittlebug hat geschrieben:Nun wird er in meinem Beispiel b und c niemals auf true prüfen. Hab ich das richtig erkannt?Code: Alles auswählen
a = 0 b = 1 c = 1 if ( a and b and c )
Code: Alles auswählen
>>> a = 0
>>> b = 1
>>> c = 2
>>> a and b and c
0
>>> b and c
2
>>>
Das ist aber was ganz anderes. Generatoren sind zum beispiel lazy evaluated, da ihre Werte erst dann zur Verfügung stehen wenn sie gebraucht werden, nicht schon vorher. Vergleiche range() mit xrange().keppla hat geschrieben:Auch recht häufig gehört: "Lazy evaluation".
Code: Alles auswählen
def f(x):
return x**0.4+2*x
liste = [f(x) for x in range(100)]
print liste[50]
Ui! Dann koenntest du nebenbei eventuell noch den Abel-Preis fuer Mathematik einheimsen, weil du der erste waerest, der eine Formel zur Berechnung von Primzahlen gefunden hat.Joghurt hat geschrieben:Dort kannst du auch ohne Probleme unendlich große Listen, z.B. die Liste aller Primzahlen definieren.
Also ranhalten, Leute!Wikipedia hat geschrieben:Für den ersten Primzahlbeweis einer Zahl mit mehr als 10 Millionen Dezimalstellen hat die Electronic Frontier Foundation einen Preis von 100.000 US-Dollar ausgeschrieben.
Man kann aber problemlos mathematisch bzw. in Haskell eine Liste mit allen Primzahlen definieren. Und nur das hat Joghurt behauptet. Nicht das er eine effiziente Formel zur direkten Berechnung der n-ten Primzahl hat.Rebecca hat geschrieben:Das, was Eratosthenes gemacht hat, war ein besonders schlauer Algorithmus, aus einem endlichen Intervall [2, n] alle Primzahlen rauszufinden, indem man nach und nach alle nicht-Primzahlen ausschliesst. Es ist die etwas schlauere Variante zu "Teste bei jeder Zahl, ob sie durch irgendwas anderes als eins und sich selbst teilbar ist". Das ganze nennt sich Sieb des Erastosthenes. Es ist aber keine Formel zur Berechnung neuer Primzahlen, und man kann somit nicht unendlich viele Primzahlen angeben (nur beliebig viele).
Code: Alles auswählen
sieve (x:xs) = x : sieve [n | n <- xs, mod n x /= 0]
sieve _ = []
all_primes = sieve [2..]
Code: Alles auswählen
$ ghci primes.hs
___ ___ _
/ _ \ /\ /\/ __(_)
/ /_\// /_/ / / | | GHC Interactive, version 6.4.1, for Haskell 98.
/ /_\\/ __ / /___| | http://www.haskell.org/ghc/
\____/\/ /_/\____/|_| Type :? for help.
Loading package base-1.0 ... linking ... done.
Compiling Main ( prime.hs, interpreted )
Ok, modules loaded: Main.
*Main> sieve [2..100]
[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97]
*Main> all_primes
[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,
83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,
163,167,173,179,181,191,193,197,199,211,223,227,229,233,
239,241,251,257,263,269,271,277,281,283,293,307,311,313,
317,331,337,347,349,353,359,367,373,379,383,389,397,401,
409,419,421,431,433,439,443,449,457,461,463,467,479,487,
...
In diesem beispiel nicht, aber da hast du ja auch keine Baumstruktur zugrunde liegen, afaikJa, aber gerade das macht Python nicht
Code: Alles auswählen
print (False or True) or doCalculation