我在测试实验室环境中有3个路由器,我试图到达这些路由器并使用for-loop
发送一些命令,并以键入/列出它们的方式发送输出。
我有3台1841思科路由器并运行12.4 IOS:
multi_ip_addr = ['192.168.1.1', '192.168.2.1', '192.168.3.1']
for ips in multi_ip_addr:
pass
len_ip_addr = len(multi_ip_addr)
for len_ip in range(len_ip_addr):
device = {'ip': ips,
'username': 'admin',
'password': 'password'}
print(device)
我的预期结果是:
{'ip': '192.168.1.1', 'username': 'admin', 'password': 'password'} {'ip': '192.168.2.1', 'username': 'admin', 'password': 'password'} {'ip': '192.168.3.1', 'username': 'admin', 'password': 'password'}
但是我得到的输出是
{'ip': '192.168.3.1', 'username': 'admin', 'password': 'password'} {'ip': '192.168.3.1', 'username': 'admin', 'password': 'password'} {'ip': '192.168.3.1', 'username': 'admin', 'password': 'password'}
答案 0 :(得分:2)
multi_ip_addr = ['192.168.1.1', '192.168.2.1', '192.168.3.1']
for ips in multi_ip_addr:
device = {'ip':ips, 'username':'admin', 'password':'password'}
print(device)
答案 1 :(得分:2)
您需要从IP列表中删除该项目。为此,请使用for循环,而不是范围:
for ip in multi_ip_addr:
device = {
'ip': ip,
'username': 'admin',
'password': 'password'
}
print(device)
第一个for循环将在每个循环上覆盖ips
的值,因此实际上在循环结束时,ips
等于multi_ip_addr
的最后一个值。
答案 2 :(得分:1)
for ips in multi_ip_addr:
pass
在执行此循环时,ips
接受multi_ip_addr
中每个项目的值。循环结束时,ips
保留最后一项的值。
在下一个循环中,您永远不会更改ips
的值,因此每次都具有相同的值。
答案 3 :(得分:0)
Python使用缩进来确定上下文,因此,如果要为每个条目使用ips
变量,则需要在for ips in multi_ip_addr
上下文中进行操作(当前只有pass
。)如果您是我,我也可能将ips
的名称更改为ip
,只是为了使情况更清楚。
这是我重写循环的方法:
template_dict = {'ip' : None, 'username' : 'admin', 'password' : 'password'}
multi_ip_addr = ['192.168.1.1', '192.168.2.1', '192.168.3.1']
for ip in multi_ip_addr:
print(template_dict.update({'ip' : ip})
使用range(len(multi_ip_addr))
将为您提供一组索引值,但这对于您要完成的工作不是必需的。如果您熟悉JavaScript,则python中的默认for
循环行为类似于使用for...of
模式:
EX:
for (let i of <some_iterable>) {
console.log(i);
}
等同于:
for i in <some_iterable>:
print(i)