Python中random.shuffle的'in place'含义?为何返回None?
为什么random.shuffle返回None?怎么理解「in-place」打乱?
先搞懂为什么print(random.shuffle(b))输出None
random.shuffle这个函数的设计逻辑是直接修改你传入的列表,而不是返回一个新的打乱后的列表。在Python里,很多这类“直接改原对象”的函数,执行完后都会返回None——这就好比你让店员帮你把奶茶摇匀,店员不会再给你一杯新奶茶,而是直接把你手里的这杯摇匀,然后啥也不用递回给你,所以函数返回None。
你的代码里直接打印函数的返回值,自然就输出None了。正确的用法应该是先调用random.shuffle(b)修改原列表,再单独打印b:
import random b = [object(), object()] random.shuffle(b) # 这里直接把b的顺序打乱了 print(b) # 现在打印就能看到打乱后的列表
再解释「in-place」到底是什么意思
「in-place」翻译成大白话就是**“在原地修改”**,用生活化的例子说:
- 假设你有一叠扑克牌,放在桌上的一个牌盒里。
- 普通的“非in-place”操作:会给你一个新牌盒,把原来的牌打乱后放进新盒子里给你,原来的牌盒里的牌顺序不变。
- 而
random.shuffle的“in-place”操作:直接把你桌上那个牌盒里的牌打乱顺序,牌还是那些牌,盒子还是原来的盒子,只是顺序变了,不会给你新盒子。
简单说,就是函数直接改动你传进去的那个列表本身,不会生成新的列表对象。
内容的提问来源于stack exchange,提问作者Junk Mail
相关产品推荐
相关产品推荐

