鱼C论坛

 找回密码
 立即注册
查看: 2317|回复: 3

[已解决]python 47讲

[复制链接]
发表于 2019-7-31 09:22:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
请问47讲这段代码中:
class CountList:
    def __init__(self, *args):
        self.values = [x for x in args]
        self.count = {}.fromkeys(range(len(self.values)), 0)

    def __len__(self):
        return len(self.values)

    def __getitem__(self, key):
        self.count[key] += 1
        return self.values[key]

这句代码:self.count = {}.fromkeys(range(len(self.values)), 0)
中的:range(len(self.values))是什么意思?range不是表示范围,len表示长度吗?
例子中的c1 = CountList(1,3,5,7,9)
那么range(len(self.values))不应该是range(5)吗?
为何会把列表c1.values传递进去啊?
最佳答案
2019-7-31 11:05:05
首先呢,定义self.value时定义的是列表表达式,那么self.value就是列表就有长度了啊,然后range一个数字你应该知道啥意思的吧?range(n)这个东西,你可以试试到底会输出啥啊,然后不就知道了?后面那个问题是在这样,你没看到在定义__init__后面的参数前面有一个*号?这是可变参数,也就是说,c1列表的元素以一个一个作为参数进入类中,所以你得搞清楚到底程序的每一步都是什么意思(但愿我表达的和你想问的是一个意思,对你有所帮助)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-7-31 11:05:05 | 显示全部楼层    本楼为最佳答案   
首先呢,定义self.value时定义的是列表表达式,那么self.value就是列表就有长度了啊,然后range一个数字你应该知道啥意思的吧?range(n)这个东西,你可以试试到底会输出啥啊,然后不就知道了?后面那个问题是在这样,你没看到在定义__init__后面的参数前面有一个*号?这是可变参数,也就是说,c1列表的元素以一个一个作为参数进入类中,所以你得搞清楚到底程序的每一步都是什么意思(但愿我表达的和你想问的是一个意思,对你有所帮助)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-7-31 11:19:22 | 显示全部楼层
本帖最后由 长衫罩子龙 于 2019-7-31 11:22 编辑
MMM啊 发表于 2019-7-31 11:05
首先呢,定义self.value时定义的是列表表达式,那么self.value就是列表就有长度了啊,然后range一个数字你 ...


这个len(self.values)结果应该是5啊,range(5)就是range(0,5).
{}.fromkeys(range(len(self.values)), 0)结果不应该是{0: 0, 1: 0, 2: 0, 3: 0, 4: 0}吗?
我专门敲了以下代码实验了一下,不在本体环境下,输出结果就是我说的这样:
>>> seq = ['Google', 'Runoob', 'Taobao']
>>> {}.fromkeys(range(len(seq)),0)
{0: 0, 1: 0, 2: 0}

这里面seq和self.value一样,都是个列表。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-7-31 11:23:46 | 显示全部楼层
我反应过来了。。。。我看错了,我以为是把列表数值作为字典的键。。现在才发现是以列表下标作为键。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-13 02:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表