鱼C论坛

 找回密码
 立即注册
查看: 970|回复: 9

[已解决]求助

[复制链接]
发表于 2020-6-7 17:04:36 | 显示全部楼层 |阅读模式

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

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

x


class Countlist:
    def __init__(self,*args):                                       这里*args没明白
        self.values = [x for x in args]                           这里为什么是 x for x in args ,我知道是想获取一个列表来存放,之前不都是 for x in 什么吗,
        self.count = {}.fromkeys(range(len(self.values)),0)       这句话也有点难懂,,,朦朦胧胧的,似懂非懂,,
    def __len__(self):
        return len(self,value)
    def __getitem__(self,key):
        self.count[key]+=1                 
        return self.values[key]
最佳答案
2020-6-7 17:12:29
def __init__(self,*args):               这里*args没明白

参数前面加个 * 号就可以填入任意参数个数,然后以元组形式给 args

self.values = [x for x in args]    这里为什么是 x for x in args ,我知道是想获取一个列表来存放,之前不都是 for x in 什么吗,

这个是列表推导式,举个例子 [x for x in range(10)] 就是遍历 range 0~9 加入列表中去,所以你这就是把元素 一个个拿出来放进列表

self.count = {}.fromkeys(range(len(self.values)),0)       这句话也有点难懂,朦朦胧胧的,似懂非懂

fromkeys(seq,value) 就是把 seq 作为键,把 value 作为 值整到列表中去,这里就是把 range(len(self.values))作为键 把 0 作为值都加到字典中去 赋值给 self.count
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-6-7 17:12:29 | 显示全部楼层    本楼为最佳答案   
def __init__(self,*args):               这里*args没明白

参数前面加个 * 号就可以填入任意参数个数,然后以元组形式给 args

self.values = [x for x in args]    这里为什么是 x for x in args ,我知道是想获取一个列表来存放,之前不都是 for x in 什么吗,

这个是列表推导式,举个例子 [x for x in range(10)] 就是遍历 range 0~9 加入列表中去,所以你这就是把元素 一个个拿出来放进列表

self.count = {}.fromkeys(range(len(self.values)),0)       这句话也有点难懂,朦朦胧胧的,似懂非懂

fromkeys(seq,value) 就是把 seq 作为键,把 value 作为 值整到列表中去,这里就是把 range(len(self.values))作为键 把 0 作为值都加到字典中去 赋值给 self.count
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-7 17:12:45 | 显示全部楼层
本帖最后由 WangJS 于 2020-6-7 17:15 编辑
这里*args没明白

这就是可以传无数个参数
  1. >>> def s(*s):
  2.         print(s)

  3.        
  4. >>> s(1,2,3,4)
  5. (1, 2, 3, 4)
复制代码

这里为什么是 x for x in args ,我知道是想获取一个列表来存放,之前不都是 for x in 什么吗,

就像上面的例子,args是一个元组,for x in args就是遍历这个元组

self.count = {}.fromkeys(range(len(self.values)),0)

就是插入键和值,
键:从0到len(values)-1的数字
值:都是0
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-7 17:17:11 | 显示全部楼层
和大佬抢最佳
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-7 17:20:52 | 显示全部楼层
Twilight6 发表于 2020-6-7 17:12
参数前面加个 * 号就可以填入任意参数个数,然后以元组形式给 args

self.count[key]+=1                 
        return self.values[key]
这两句呢,count已经是个字典了,现在这个count[key]是什么意思,下面的返回值是什么
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-7 17:21:32 | 显示全部楼层
*args 在变量名之前使用一个星号,就是让变量接受任意多的值,也就是 args会变成一个列表(讲的不是很清楚,记得以前小甲鱼说过)
x for x in args 不就是以前学过的列表推导式吗?相当于
  1. list1 = []
  2. for x in args:
  3.     list.append(x)
复制代码

{}.fromkeys(range(len(self.values)),0)   是创建一个字典
相当于emmm
  1. for each in range(len(self.values)):
  2.       dict1[each] = 0
复制代码
这样子吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-7 17:22:24 | 显示全部楼层
沐羽尘 发表于 2020-6-7 17:21
*args 在变量名之前使用一个星号,就是让变量接受任意多的值,也就是 args会变成一个列表(讲的不是很清楚 ...

嗯嗯,这两个点明白了,上面有解释,懂了,谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-7 17:23:27 | 显示全部楼层
大佬好快
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-7 17:25:01 | 显示全部楼层
l919329189 发表于 2020-6-7 17:22
嗯嗯,这两个点明白了,上面有解释,懂了,谢谢


  1. self.count[key]+=1                 
  2.         return self.values[key]
复制代码

这个就是统计被读取次数的,因为 self.count = {}.fromkeys(range(len(self.values)),0)
已经把分别的键值初始化对应了,所以你每次访问相应 的 key 次数统计就 +1  
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-7 17:26:16 | 显示全部楼层
l919329189 发表于 2020-6-7 17:22
嗯嗯,这两个点明白了,上面有解释,懂了,谢谢

然后返回的是被读取的参数
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-21 10:31

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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