了解python for loop,对象用作索引?

2024-04-25 08:32:36 发布

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

下面是我写的一些测试代码。你知道吗

class myclass:
    def __init__(self, aty):
        self.number = 0;
        self.anitype = aty;

l = [];
l.append(myclass("tiger"))
l.append(myclass("lion"))
l.append(myclass("puma"))
l.append(myclass("jagur"))

# Method 1 : of course this doesn't work, but I saw a case where it works
#for idx in l: l[idx].number = idx

# Method 2 : of course this works
for idx, lst in enumerate(l):
   l[idx].number = idx

for idx, lst in enumerate(l):
    print("%d : %s" % (lst.number, lst.anitype))

结果是:

0 : tiger
1 : lion
2 : puma
3 : jagur

当然,方法1应该不起作用,但是今天我看到了从另一家公司收到的一些代码,下面有一行代码

for idx in ls: ls[idx].Oi = idx

这里ls是类对象的列表。类有一个实例成员变量Oi。 我觉得这行代码有点奇怪,于是用调试器运行了代码,它就运行了!列表成员对象的Oi值被指定为0,1,2,3,。。你知道吗

这是怎么回事?顺便说一句,这行代码出现在一个不是类的成员函数(它是一个全局函数)的函数中。你知道吗


Tags: 函数代码inselfnumberformyclass成员
1条回答
网友
1楼 · 发布于 2024-04-25 08:32:36

在Python中有一个映射类型dict。迭代字典时,就是在迭代它的键。要获取值,仍然需要将键用作索引:

d = {'a': 3, 'b': 5, 'c': 4}
for key in d:
    print(key, d[key])

输出(顺序可能不同):

a 3
b 5
c 4

很可能您看到的代码正在执行此操作(迭代dict,或另一个映射对象,而不是list)。如果你看到

d = {}  # An empty dict

那么它就是一个dict对象。(空集初始化为set()

相关问题 更多 >