Python 洗牌参数

Python 洗牌参数,python,Python,我是Python的乞丐,我在读一本书 这是一个模仿range()的函数 def间隔(开始、停止=无,步骤=1): '模拟步骤>0的范围()' 如果停止为无: 开始,停止=0,开始#这是如何计算的? 结果=[] i=开始 当我停下来时: 结果.追加(i) i+=阶跃 返回结果 我的问题是:如何评估: start,stop=0,start零件 因为我知道参数的计算应如下所示: 5,stop=0,5(我知道我错了,但我需要你告诉我这部分是如何计算的)如果你调用interval(10),那么start

我是Python的乞丐,我在读一本书

这是一个模仿range()的函数

def间隔(开始、停止=无,步骤=1):
'模拟步骤>0的范围()'
如果停止为无:
开始,停止=0,开始#这是如何计算的?
结果=[]
i=开始
当我停下来时:
结果.追加(i)
i+=阶跃
返回结果
我的问题是:如何评估:

start,stop=0,start
零件

因为我知道参数的计算应如下所示:

5,stop=0,5
(我知道我错了,但我需要你告诉我这部分是如何计算的)

如果你调用
interval(10)
,那么
start=0
stop=10
。调用
间隔(5,10)
时,则
start=5
stop=10


start,stop=0,start
相当于
stop=start;开始=0

这称为元组解包

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

In [25]: print(x)
0

In [26]: print(y)
1
您可以对任何序列执行此操作。在上面的例子中,您使用(0,1)内联指定一个元组。例如,您还可以打开iterable:

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
但是您必须确保您提供的解包参数的数量是合理的

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
形式

x, y = a, b
是一个多重赋值,它是。我举的简单例子相当于

x = a
y = b
或者在您的示例中
start,stop=0,start

stop = start
start = 0
注意我是如何重新排列作业顺序的;这是多重分配的一个优点。在这种情况下,如果希望获得相同的效果,则必须添加一个临时变量:

temp = start
start = 0
stop = temp 

a、 b=c,d等于a=c和b=d

。这叫做元组或序列解包。为什么是等价的?我看不出stop从何处获取startPython的值展开它。您可以使用dis模块并进行检查。
stop = start
start = 0
temp = start
start = 0
stop = temp