当将每个列表项传递给函数时,如何最好地遍历列表?

How best to iterate over a list when a each list item will be passed to a function?

ipaddress 模块包含一个 IPv4Network 函数,可用于确定 IPv4 地址是否已保留,例如

In [25]: IPv4Address(u'100.64.1.1') in IPv4Network(u'100.64.0.0/10')
Out[25]: True

以上只是一个范围;有几个保留的 IP 地址范围。我想检查给定地址是否在 any 中。冗长的方法是将所有范围放在一个列表中,然后遍历该列表并重复上述检查,例如

def isPrivate(ipaddress):
    for range in ranges:
        if ipaddress in IPv4Network(range):
            print 'private'

似乎有一种更聪明的方法可以在 Python 中完成一切;有没有更聪明的方法或我不知道的结构?

range 是一个 Python 内建函数,因此用局部变量遮蔽它不是一个好主意。我在这里使用 r 而不是

def isPrivate(ipaddress):
    if any(ipaddress in IPv4Network(r) for r in ranges):
        print 'private'

如果有可能出现多个匹配项,您可以将 any 替换为 sum

来计算它们
private_count = sum(ipaddress in IPv4Network(r) for r in ranges)

因为 True 值算作 1

不确定你的意思 'reserved',但是 IPv4Address class 有 is_privateis_reserved 个属性满足你的需求