Python变量的变化

2024-04-25 06:47:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我最近正在学习如何在Python中使用random.shuffle,我很惊讶地看到该函数在不返回任何内容的情况下将变量进行适当的乱序处理。这在函数中是如何实现的?查看随机库的源代码没有得到答案。在

如何编写自己的函数来在不重新分配的情况下更改变量?在


Tags: 函数答案内容源代码情况randomshuffle乱序
2条回答

我是因为列表是可变的。不能重新分配任何变量,因为它将是新变量。不能修改不可变类型变量。您可以修改可变变量。在

所以:

>>> def addone(x):
...     x += 1
>>> a = 2
>>> addone(a)
>>> a
2
>>> def addone(x):
...     x.append(1)
... 
>>> l=[2]
>>> addone(l)
>>> l
[2, 1]
>>> def addone(x):
...     x = x + [1]
... 
>>> li=[2]
>>> addone(li)
>>> li
[2]

好吧,看看random.shuffle的实现。在一个名为random.py的文件中找到它,它是一个纯python实现,非常简单——只使用赋值循环(使用元组解包)。在

def shuffle(self, x, random=None, int=int):
    """x, random=random.random -> shuffle list x in place; return None.

    Optional arg random is a 0-argument function returning a random
    float in [0.0, 1.0); by default, the standard random.random.

    Do not supply the 'int' argument.
    """

    if random is None:
        random = self.random
    for i in reversed(xrange(1, len(x))):
        # pick an element in x[:i+1] with which to exchange x[i]
        j = int(random() * (i+1))
        x[i], x[j] = x[j], x[i]

相关问题 更多 >