Почему если очистить список сразу после присваивания как значения словарю, тогда в словаре оказывается пустое значение, а если в начале итерации, тогда значения в словаре нормальные(не пустые)
access_dict = { 'FastEthernet0/12':10,
'FastEthernet0/14':11,
'FastEthernet0/16':17,
'FastEthernet0/17':150 }
def generate_access_config(access, ps = False):
config = []
config_all = {}
access_template = ['switchport mode access',
'switchport access vlan',
'switchport nonegotiate',
'spanning-tree portfast',
'spanning-tree bpduguard enable']
port_security = ['switchport port-security maximum 2',
'switchport port-security violation restrict',
'switchport port-security']
for intf in access: #Заминка в этом цикле
config.clear() #Если список очищается тут, тогда значения нормальные, как в варианте 2
for line in access_template:
if line.endswith('vlan') == True:
config.append('{} {}'.format(line, access[intf]))
else:
config.append(line)
if ps == True:
config.extend(port_security)
config_all[intf] = config
#config.clear() #Если раскомментировать эту строку, тогда вывод будет как в варианте 1, т.е. не правильный.
return(config_all)
print(generate_access_config(access_dict))
Вывод
1) {'FastEthernet0/12': [], 'FastEthernet0/14': [], 'FastEthernet0/16': [], 'FastEthernet0/17': []}
2) {'FastEthernet0/12': ['switchport mode access', 'switchport access vlan 150', 'switchport nonegotiate', 'spanning-tree portfast', 'spanning-tree bpduguard enable'], 'FastEthernet0/14': ['switchport mode access', 'switchport access vlan 150', 'switchport nonegotiate', 'spanning-tree portfast', 'spanning-tree bpduguard enable'], 'FastEthernet0/16': ['switchport mode access', 'switchport access vlan 150', 'switchport nonegotiate', 'spanning-tree portfast', 'spanning-tree bpduguard enable'], 'FastEthernet0/17': ['switchport mode access', 'switchport access vlan 150', 'switchport nonegotiate', 'spanning-tree portfast', 'spanning-tree bpduguard enable']}