2013-08-12 13 views
5

Jedes Mal, wenn ich versuche, einen Bereich zu einer Variablen zuzuweisen, wie so:Vergeben Sie einen Bereich einer Variablen (Python)

Var1 = range(10, 50) 

Dann versuchen Sie die Variable drucken:

Var1 = range(10, 50) 
print(Var1) 

Es einfach druckt " Bereich (10, 50) 'anstelle aller Nummern in der Liste. Warum ist das?

+0

Ist das Python 3? –

+0

@ David Z Ja. Es ist. – Justin

Antwort

11

Das ist, weil range ein Range-Objekt in Python gibt es 3 in list setzen, um es, was Sie wollen auszukommen:

>>> Var1 = range(10, 50) 
>>> print(list(Var1)) 
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 
32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49] 
>>> 
+0

Ok. Vielen Dank. Das funktioniert. Ich denke also, Sie müssen den Zahlenbereich als Liste darstellen, damit er richtig drucken kann. – Justin

+0

Ja. In Python 2.x hat 'range' eine Liste wie gewünscht zurückgegeben. In 3.x wurde ein Bereichsobjekt zurückgegeben. – iCodez

-1

Dies ist etwas, das in Python 3.0 geändert wurde. Sie könnten eine ähnliche Funktion in Python 2.7 wie so,

def range(low, high=None): 
    if high == None: 
    low, high = 0, low 
    i = low 
    while i < high: 
    yield i 
    i += 1 

Der Vorteil dieser neu ist, dass die Liste nicht vor seiner verwendet erstellt werden muss.

for i in range(1,999999): 
    text = raw_input("{}: ".format(i)) 
    print "You said {}".format(text) 

die wie folgt funktioniert:

1: something 
You said something 
2: something else 
You said something else 
3: another thing 
You said another thing 

In Python 3.X, wenn wir nie zu Ende unserer Schleife (999.997 Iterationen) erhalten, es wird nie alle Elemente berechnen. In Python 2.7 muss zunächst der gesamte Bereich erstellt werden. In einigen älteren Python-Implementierungen war dies sehr langsam.

7

Sie sollten wahrscheinlich ein wenig verstehen, was unter der Haube passiert.

In Python 3 gibt range ein range Objekt zurück, nicht eine Liste wie Sie vielleicht erwartet haben. (N. B. Python 3 ist range ist Python 2 des xrange)

#python 2 
>>> type(range(5)) 
<type 'list'> 

#python 3 
>>> type(range(5)) 
<class 'range'> 

Was bedeutet das? Nun, das Bereichsobjekt ist einfach ein Iterator - Sie müssen es zwingen, zu iterieren, um seinen Inhalt zu erhalten. Das mag für das Neugeborene lästig klingen, aber es erweist sich als ziemlich nützlich.

>>> import sys 
>>> sys.getsizeof(range(5)) 
24 
>>> sys.getsizeof(range(1000000)) 
24 

Der größte Vorteil der Dinge auf diese Weise: konstanter (winziger) Speicherbedarf. Aus diesem Grund, viele Dinge in der Standard-Bibliothek einfach Iteratoren zurückgeben. Der Nachteil ist, dass, wenn Sie einfach den iterierten Bereich möchten, müssen Sie es zwingen, zu iterieren. Das am häufigsten verwendete Idiom ist list(range(n)). Es gibt auch Comprehensions, for Schleifen und esoterische Methoden. Iteratoren sind ein großer Teil von Python lernen, also gewöhnen Sie sich an sie!

Verwandte Themen