• en
  • Language: ru
  • Documentation version: latest

Совмещение for и if

Рассмотрим пример совмещения for и if.

Файл generate_access_port_config.py:

 1 access_template = ['switchport mode access',
 2                    'switchport access vlan',
 3                    'spanning-tree portfast',
 4                    'spanning-tree bpduguard enable']
 5
 6 fast_int = {'access': { '0/12':10,
 7                         '0/14':11,
 8                         '0/16':17,
 9                         '0/17':150}}
10
11 for intf, vlan in fast_int['access'].items():
12     print('interface FastEthernet' + intf)
13     for command in access_template:
14         if command.endswith('access vlan'):
15             print(' {} {}'.format(command, vlan))
16         else:
17             print(' {}'.format(command))

Комментарии к коду:

  • В первом цикле for перебираются ключи и значения во вложенном словаре fast_int[„access“]

  • Текущий ключ, на данный момент цикла, хранится в переменной intf

  • Текущее значение, на данный момент цикла, хранится в переменной vlan

  • Выводится строка interface FastEthernet с добавлением к ней номера интерфейса

  • Во втором цикле for перебираются команды из списка access_template

  • Так как к команде switchport access vlan надо добавить номер VLAN:

    • внутри второго цикла for проверяются команды

    • если команда заканчивается на access vlan

      • выводится команда, и к ней добавляется номер VLAN

    • во всех остальных случаях просто выводится команда

Результат выполнения скрипта:

$ python generate_access_port_config.py
interface FastEthernet0/12
 switchport mode access
 switchport access vlan 10
 spanning-tree portfast
 spanning-tree bpduguard enable
interface FastEthernet0/14
 switchport mode access
 switchport access vlan 11
 spanning-tree portfast
 spanning-tree bpduguard enable
interface FastEthernet0/16
 switchport mode access
 switchport access vlan 17
 spanning-tree portfast
 spanning-tree bpduguard enable
interface FastEthernet0/17
 switchport mode access
 switchport access vlan 150
 spanning-tree portfast
 spanning-tree bpduguard enable