Передача функции по значению из словаря - PullRequest
1 голос
/ 26 октября 2019

Я пытаюсь написать программу, которая проверяет операцию в словаре и вызывает функцию, соответствующую «ключу».

эта программа будет анализировать строку на основе того, что является «ключом».

Мой вопрос заключается в том, как передать строку в функцию, вызываемую словарем, чтобы функция могла ее проанализировать, поскольку строка не всегда будет одинаковой и не будет обрабатываться как строка.

def format1(opline):                                    # r-type: rd, rs, rt
    opline = opline.split('', 1)[1]                     # removes instruction
    rd, rs, rt = opline.split()                         # splits into 3 registers
    return rd, rs, rt                                   # returns all registers

inst_match = {'add' : format1}                          # dictionary (more.       
                                                        # key/funct pairs
                                                        # will be added

instruction_storage = 'add 9 0 255'

instructions = instruction_storage.split()[0]       # get key from string

inst_match[instructions](instruction_storage)       # passes key to search and string to pass into function

^ приведенный выше код является просто тестом. В конце концов я буду читать "инструкции_строки" из файла из нескольких строк.

1 Ответ

0 голосов
/ 26 октября 2019

Мне не совсем понятно, что именно вы ищете, но вот предположение:

def format1(opline, string):
    print('format1({!r}, {!r})'.format(opline, string))
    opline = opline.split(' ', 1)[1]
    rd, rs, rt = opline.split()
    return rd, rs, rt

def format2(opline, string):
    print('format2({!r}, {!r})'.format(opline, string))
    opline = opline.split(' ', 1)[1]
    rd, rs, rt = opline.split()
    return rd, rs, rt

inst_match = {'add': format1,
              'sub': format2}

instruction_storage = [('add 9 0 255', 'string1'),
                       ('sub 10 1 127', 'string2')]

for instruction in instruction_storage:
    opline, string = instruction
    opcode = opline.split()[0]

    try:
        inst_match[opcode](opline, string)
    except KeyError:
        print('unknown instruction: {!r}'.format(opcode))

Вывод:

format1('add 9 0 255', 'string1')
format2('sub 10 1 127', 'string2')

...