代码之家  ›  专栏  ›  技术社区  ›  Chan Kim

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

  •  0
  • Chan Kim  · 技术社区  · 6 年前

    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,。。

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

    1 回复  |  直到 6 年前
        1
  •  0
  •   iBug    6 年前

    dict

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

    a 3
    b 5
    c 4
    

    很可能您看到的代码正在这样做(在 口述 ,或其他映射对象,而不是 list ). 如果你看到

    d = {}  # An empty dict
    

    口述 set() )