gpt4 book ai didi

python - 双 For 循环迭代。两个列表比较

转载 作者:行者123 更新时间:2023-12-01 01:55:09 25 4
gpt4 key购买 nike

我是初学者。

你能告诉我为什么这个脚本即使在 ip not in i 情况下没有定义 i 变量也能工作吗? p>

该脚本比较 ARP 表 match_data 列表(我从 paramiko ssh 连接获得)和我的 IP 列表 match_ip。我只想打印IP MAC,如果IP不在ARP列表中,则打印ip +“NO MAC ADDRESS”。

for ip in match_ip:
for i in match_data:
if ip in i:
print re.search((ip+'\s+'),i).group(0),mac.search(i).group(0)
break
if ip not in i:
print ip + ' NO MAC ADDRESS'

输出

C:\Python27\python.exe C:/Python2/Get_mac_from_arp.py
!!!Connecting SSH!!!
10.240.184.103 30e4.db80.b699
10.240.184.104 7c2f.802d.61e5
10.240.184.105 7c2f.8072.40fc
10.240.184.106 e05f.b982.5720
10.240.178.11 NO MAC ADDRESS
10.240.184.177 e05f.b982.5752
10.240.184.178 7c2f.802a.782a
10.240.184.179 30e4.db80.b6ec
10.240.184.180 7c2f.802a.782b

Process finished with exit code 0

最佳答案

名称i此时仍然有效。它具有在 for 循环中分配的最后一个值。但是,实际上不需要在循环后进行 if 测试。 Python forwhile 循环采用可选的 else 子句,如果循环正常终止,则输入该子句,即由于循环不会提前退出break 语句(或 return 语句)。

所以我们可以将该代码重写为:

for ip in match_ip:
for i in match_data:
if ip in i:
print re.search((ip+'\s+'),i).group(0),mac.search(i).group(0)
break
else:
# We can only get here if the `break` didn't happen
print ip + ' NO MAC ADDRESS'
<小时/>

我想您希望使用 for 循环来创建一个新的作用域,其中循环索引和循环中创建的其他变量仅存在于该作用域中。在某些语言(尤其是与 C 密切相关的语言)中,新 block 会创建新作用域,但在使用普通 for 循环的 Python 中不会发生这种情况。 Python 在创建作用域方面更加保守,因为它们不像 C 中那样“便宜”。函数定义创建一个新的局部作用域,类定义也是如此。但是,生成器表达式确实在其自己的作用域中运行,Python 3 中的列表推导式也是如此,在 Python 2 中,列表推导式在周围代码的作用域中运行。

您可以阅读 scopes and namespaces在官方教程中。

<小时/>

顺便说一句,您应该认真考虑迁移到 Python 3,Python 2 将于 2020 年某个时候正式终止生命周期。

关于python - 双 For 循环迭代。两个列表比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50291216/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com