在完成循环遍历这些Hex值之前,Python似乎正在消亡.如何解决?

dav*_*ave 2 python memory loops

def generate_macs():
    for i in xrange(0x000000, 0xFFFFFF + 1):
        mac = hex(0x000000 + i)[2:].upper()
        mac = [mac[x:x + 2] for x in range(0, len(mac), 2)]

        yield ':'.join(mac)

for mac in generate_macs():
    print 'E8:06:88:{0}'.format(mac)
Run Code Online (Sandbox Code Playgroud)

我正在尝试生成一个MAC地址列表E8:06:88:00:00:00 and E8:06:88:FF:FF:FF.

该计划似乎在这条线上濒临死亡:

ubuntu@ubuntu:~$ tail range1.txt
E8:06:88:44:86:55
Run Code Online (Sandbox Code Playgroud)

为什么...?:/

Mic*_*sch 5

首先,您的生成器功能在到达第三个数字之前不会输出完整的MAC地址; 我通过使用以下代码解决了这个问题:

def generate_macs_2():
    for a in range(0, 0x100):
        for b in range(0, 0x100):
            for c in range(0, 0x100):
                yield "{0:02X}:{1:02X}:{2:02X}".format(a, b, c)

for mac in generate_macs_2():
    print 'E8:06:88:' + mac
Run Code Online (Sandbox Code Playgroud)

它还以大写的形式以数值的形式从最低到最高的顺序返回MAC地址,并且更容易一目了然地查看和理解(恕我直言).

为了完整性,并且因为它在下面提到,这里是如何做到这一点itertools.product:

def generate_macs_3():
    for item in itertools.product(range(0, 0x100), repeat = 3):
        yield "{0:02X}:{1:02X}:{2:02X}".format(item[0], item[1], item[2])

for mac in generate_macs_3():
    print 'E8:06:88:' + mac
Run Code Online (Sandbox Code Playgroud)

OP在我的系统上运行约40秒,我的第一个在平均约26秒内运行,第二个(使用itertools)平均约需32秒.