047课堂内容求助
class CountList:def __init__(self,*args):
self.value =
self.count = {}
self.count.fromkeys(range(len(self.value)),0)
def __len__(self):
return len(self.value)
def __getitem__(self,key):
self.count += 1
return self.value
为什么我定义字典的方式在运行中会报错呢?
Traceback (most recent call last):
File "<pyshell#17>", line 1, in <module>
c1
File "D:/Python39/047自定义列表.py", line 13, in __getitem__
self.count += 1
KeyError: 3
改写成书上那样就不报错
self.count={}.fromkeys(range(len(self.value)),0) 因为你的字典是个空字典,取不出数据
class CountList:
def __init__(self,*args):
self.value =
self.count = {}
self.count = self.count.fromkeys(range(len(self.value)),0) # 这里要赋值
def __len__(self):
return len(self.value)
def __getitem__(self,key):
self.count += 1
return self.value
isdkz 发表于 2022-5-26 15:17
因为你的字典是个空字典,取不出数据
我查看了书上,我那样写也是赋值语句啊 isdkz 发表于 2022-5-26 15:17
因为你的字典是个空字典,取不出数据
>>> dict1 = {}
>>> dict1.fromkeys((1,2,3),0)
{1: 0, 2: 0, 3: 0}
>>> dcit1
Traceback (most recent call last):
File "<pyshell#21>", line 1, in <module>
dcit1
NameError: name 'dcit1' is not defined
>>> dict1
{}
明白了,谢谢前辈,自己试了下 南巷君君 发表于 2022-5-26 15:26
我查看了书上,我那样写也是赋值语句啊
你赋值的是一个空字典,fromkeys 只会产生一个新的字典,并不会改变原来的字典,
所以你的字典还是一个空字典
>>> count = {}
>>> count.fromkeys(range(5),0)
{0: 0, 1: 0, 2: 0, 3: 0, 4: 0}
>>> count # count 还是空字典
{}
>>>
给你看看一个网址:https://www.runoob.com/python/att-dictionary-fromkeys.html
看下面的笔记,说的是fromkey是负责创建字典的,你这样的写法会造成上面self.count是一个空列表,然后执行到__getitem__函数的时候就会出现错误,书上这么写则是可以创建一个经过初始化的字典赋值给self.count,可以满足字典的操作{:10_279:}我对python还不是很熟悉,但是从查到的资料显示是python有这样的实现机制方面的问题,可以看看前面给你的网址下方笔记的例子 谢谢,还是实践的太少了,有不少坑
页:
[1]