を割り当てます。は、変数の範囲(パイソン)
Var1 = range(10, 50)
次に変数を印刷しよう:
Var1 = range(10, 50)
print(Var1)
それは単に「印刷します範囲内のすべての数字の代わりに範囲(10、50) 'を入力します。どうしてこれなの?
を割り当てます。は、変数の範囲(パイソン)
Var1 = range(10, 50)
次に変数を印刷しよう:
Var1 = range(10, 50)
print(Var1)
それは単に「印刷します範囲内のすべての数字の代わりに範囲(10、50) 'を入力します。どうしてこれなの?
ザッツrange
は、それはあなたがやりたいことにするlist
に入れてのPython 3の範囲オブジェクトを返すので:
>>> 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]
>>>
これはPython 3.0で変更されたものです。あなたは
def range(low, high=None):
if high == None:
low, high = 0, low
i = low
while i < high:
yield i
i += 1
、そのようにはPython 2.7でこの利点を同様の機能を再作成することができ、リストは、その使用の前に作成する必要がないことです。このように動作します
for i in range(1,999999):
text = raw_input("{}: ".format(i))
print "You said {}".format(text)
:Pythonの3.Xで
1: something
You said something
2: something else
You said something else
3: another thing
You said another thing
我々はループ(999997回のイテレーション)の最後に取得することはありませんならば、それはすべての項目を計算することはありません。 Python 2.7では、最初は範囲全体を構築する必要があります。古いPython実装の中には、これは非常に遅いものでした。
おそらく、ボンネットの下で何が起こっているのか分かります。
python 3では、range
は、あなたが期待していたようなリストではなく、range
オブジェクトを返します。
#python 2
>>> type(range(5))
<type 'list'>
#python 3
>>> type(range(5))
<class 'range'>
それは何を意味するのでしょうか?(n.b.のpython 3のrange
は2のxrange
パイソンですか)さて、レンジオブジェクトは単にイテレータにすぎません。コンテンツを取得するには反復処理を強制する必要があります。それは新生児に迷惑をかけるかもしれませんが、それは非常に有用であることが判明しています。
>>> import sys
>>> sys.getsizeof(range(5))
24
>>> sys.getsizeof(range(1000000))
24
このようにすることの最大の利点は、一定の(小さな)メモリフットプリントです。この理由から、多くの標準ライブラリのはイテレータを返すだけです。トレードオフは、単ににする場合は、反復範囲であるを参照してください。反復範囲を強制する必要があります。これを行う最も一般的なイディオムはlist(range(n))
です。また、理解、for
ループ、およびより難解な方法があります。イテレータは、Pythonを学ぶ上で非常に重要な部分ですので、慣れてください!
これはPython 3ですか? –
@David Zはい。そうです。 – Justin