龙空技术网

网络工程师的Python之路——zip()函数

弈心 761

前言:

如今我们对“python里zip”大体比较关心,各位老铁们都需要了解一些“python里zip”的相关文章。那么小编也在网上收集了一些关于“python里zip””的相关知识,希望大家能喜欢,小伙伴们一起来学习一下吧!

版权声明:我已加入“维权骑士”的版权保护计划,知乎专栏“网路行者”下的所有文章均为我本人(知乎ID:弈心)原创,未经允许不得转载。

如果你喜欢我的文章,请关注我的知乎专栏“网路行者”, 里面有更多像本文一样深度讲解计算机网络技术的优质文章。

今天一位读者问了我个问题,他做练习时想用Python脚本给四台交换机分别配置loopback0端口的IP地址:

他的交换机管理IP地址和loopback0端口的IP地址分别保存在两个txt文件里,loop口的IP保存在SW_Loopback_ip.txt里(为了省事,他直接把配置命令也一起写进去了),而交换机的管理IP则保存在Ensp_sw_ip.txt文件里(这里就不放出来了)。

他的脚本代码如下:

可是最终运行代码后的结果是:本来要一一对应分配给四台交换机的四个Loopback0地址被全部配置给了第一台交换机(这里我们暂且称它为SW1),也就是说SW1的loopback0端口被反复配置了4次IP地址,其中只有第一次配置的loopback0的IP是属于SW1本身的,剩下的3个IP是分别属于SW2, SW3和SW4的,并且后面的SW2、SW3、SW4也出现了同样的问题。

出现这个问题的原因很明显:他的代码里使用了for循环嵌套,也就是在一个for循环语句里再写一个for循环语句。类似于这种一台交换机配一个loopback0地址的“一一平均分配”的需求,必须用到zip()函数。

绝大多数情况下,我们用for语句做循环时都是仅仅遍历了一个列表,在遇到要用for语句同时遍历多个列表的需求时,那就必须用到zip()函数。

顾名思义,zip()函数的作用就是将多个可遍历的对象“打包”,让它们被for语句同时并列循环,举例如下:

>>> list1 = [1,2,3]>>> list2 = ['a','b','c']>>> for a, b in zip(list1, list2):	print (a,b)1 a2 b3 c

zip()函数的用法不难,这里我们用zip()将list1和list2两个列表“打包”,然后用for语句同时遍历这两个列表里的元素,其中a对应的就是list1里的元素,b对应的就是list2里的元素。

知道zip()函数的原理后,将代码修改如下即可满足该读者的需求:

像这种依次登陆交换机给它们做差异化配置(所谓差异化配置就是所有交换机大体的配置都一样,但是具体到各个交换机loopback端口的IP地址,端口的description等配置就会出现差异),其实我更推荐使用csv和jinja2来做(可以参考我以前写过的《网络工程师的Python之路 -- 浅谈CSV和Jinja2》一文),不过一些较简单的差异化配置也可以使用zip()的思路来完成。

标签: #python里zip