了解 Python netaddr 库命令

Understanding the Python netaddr library commands

我试图从 https://pythonhosted.org/netaddr/tutorial_01.html 上的 netaddr Python 教程中了解一些代码是如何运行的。特别是下面的教程。

Summarizing list of addresses and subnets

Another useful operation is the ability to summarize groups of IP subnets and addresses, merging them together where possible to create the smallest possible list of CIDR subnets.

You do this in netaddr using the cidr_merge() function.

First we create a list of IP objects that contains a good mix of individual addresses and subnets, along with some string based IP address values for good measure. To make things more interesting some IPv6 addresses are thrown in as well.

>>> ip_list = [ip for ip in IPNetwork('fe80::/120')]
>>> ip_list.append(IPNetwork('192.0.2.0/24'))
>>> ip_list.extend([str(ip) for ip in IPNetwork('192.0.3.0/24')])
>>> ip_list.append(IPNetwork('192.0.4.0/25'))
>>> ip_list.append(IPNetwork('192.0.4.128/25'))
>>> len(ip_list)
515
>>> cidr_merge(ip_list)
[IPNetwork('192.0.2.0/23'), IPNetwork('192.0.4.0/24'), IPNetwork('fe80::/120')]

我对可用的不同选项有点困惑。 ip_list.extend([str(ip) for ip in IPNetwork('192.0.3.0/24')])ip_list.append(IPNetwork('192.0.4.0/25')) 有什么区别?

如果我不想使用 IPv6 (fe80::/120) 开始列表,而是想使用 IPv4 (192.0.4.0/24),语法是什么。会不会像下面这么简单?

ip_list = IPNetwork('192.0.4.0/25')

谢谢。

关于Append和Extend的区别见:

你应该可以像这样开始列表。

该代码试图证明 cidr_merge() 函数可以将 netaddr.IPAddress 对象列表、IP 地址字符串和 netaddr.IPNetwork 对象合并到最小的 IP 地址组中,并且子网。为此,创建了一个包含各种 IP 地址相关对象的 Python 列表。然后将该列表传递给 cidr_merge() 以显示 IP 地址对象已合并为最小的对象集合。

最初它创建一个 Python 列表 ip_list 包含许多单独的 netaddr.IPAddress 对象。它向该列表附加了一个 IPNetwork 子网对象。请注意,这是一个标准的 Python 列表操作 - list.append() 只是将其参数添加到列表的末尾,例如:

>>> l = [1, 2]
>>> l.append(3)
>>> print l
[1, 2, 3]

list.extend() 使用另一个列表中的元素扩展给定列表(好吧,实际上是任何可迭代的),例如

>>> l.extend([4, 5, 6])
>>> print l
[1, 2, 3, 4, 5, 6]

有关这些列表操作的更多详细信息,请参阅 Python documentation

所以是的,它很简单:

>>> ip_list = [IPNetwork('192.0.4.0/25')]    # create a list containing IPNetwork object
>>> print ip_list
[IPNetwork('192.0.4.0/25')]

和appending/extending所需的列表。