当将每个列表项传递给函数时,如何最好地遍历列表?
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_private 和 is_reserved 个属性满足你的需求
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_private 和 is_reserved 个属性满足你的需求