2

私は Python の初心者で、本を読んでいました。

これはrange()を模倣した関数です

def interval(start, stop=None, step=1):
    'Imitates range() for step > 0'
    if stop is None: 
        start, stop = 0, start      # How is this evaluated?
    result = []
    i = start 
    while i < stop:
        result.append(i)
        i += step
    return result

ここでの私の質問は次のとおりです。

start, stop = 0, start部?

パラメータは次のように評価する必要があることを理解しているためです。

5, stop = 0, 5 (私が間違っていることはわかっていますが、この部分がどのように評価されているか教えてください)

4

4 に答える 4

3

フォーム

x, y = a, b

よく(しかし鈍く)文書化されている複数の割り当てです。私が与えた簡単な例は、

x = a
y = b

またはあなたの例の場合start, stop = 0, start

stop = start
start = 0

割り当てをどのように並べ替えたかに注意してください。これは、複数代入の利点の 1 つです。この場合、同じ効果が必要な場合は、一時変数を追加する必要があります。

temp = start
start = 0
stop = temp 
于 2013-08-10T19:02:09.123 に答える
2

を呼び出すinterval( 10 )と、start = 0stop = 10. がinterval( 5, 10 )呼び出されると、start = 5stop = 10.

start, stop = 0, startと同等stop = start; start = 0です。

于 2013-08-10T18:55:21.177 に答える
1

これは、タプルのアンパックと呼ばれます。

In [24]: x,y = 0,1

In [25]: print(x)
0

In [26]: print(y)
1

これは、任意のシーケンスに対して行うことができます。上記では、(0,1) のタプルをインラインで指定しています。たとえば、イテラブルをアンパックすることもできます。

In [28]: a,b,c = range(3)

In [29]: a
Out[29]: 0

In [30]: b
Out[30]: 1

In [31]: c
Out[31]: 2

ただし、unpack に指定する引数の数が適切であることを確認する必要があります。

In [32]: a,b = range(3)
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
/home/ben/<ipython-input-32-ec703b8346af> in <module>()
----> 1 a,b = range(3)

ValueError: too many values to unpack (expected 2)

In [33]: a,b,c,d = range(3)
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
/home/ben/<ipython-input-33-16ef42f82877> in <module>()
----> 1 a,b,c,d = range(3)

ValueError: need more than 3 values to unpack

(そして、これはあなたを混乱させると思われる部分です) 右側が左側より先に評価されることに注意してください。これにより、一般的な慣用句が可能になります。

In [34]: x = 0

In [35]: y = 1

In [36]: x,y = y,x 
于 2013-08-10T18:59:38.267 に答える
1

a、b = c、d は、a = c および b = d と同等です。

于 2013-08-10T19:03:04.713 に答える