переменная функции python в тексте - PullRequest
0 голосов
/ 15 ноября 2018

Я пытаюсь создать простую функцию Python, которая выглядит следующим образом:

def fnc_assign(y,a): 
    'new_acc_no' + y + '.text' = import_list[x][a]

Что я хочу с ней сделать, это назначить new_acc_no10.text = import_list [1] [0] при вызовеfnc_assign (10,1), но я застрял на том, чтобы заставить работать левую часть функции (я получаю SyntaxError: не могу назначить оператору).

Спасибо за вашу помощь!

edit: Как упоминалось ниже, new_acc_no1 имеет свойство .text, которое = import_list [x] [0].

У меня есть много new_acc_no, поэтому я делал следующее:

new_acc_no1.text = import_list[x][0]
new_acc_no2.text = import_list[x][1]
new_acc_no3.text = import_list[x][2]
new_acc_no4.text = import_list[x][12]
new_acc_no5.text = import_list[x][13]

И мне еще нужно добавить гораздо больше, поэтому я подумал написать функцию, которая может написатьout new_acc_noY.text = import_list [x] [a] было бы полезно, если бы х был переменной в цикле while, в котором находится предыдущий кодовый блок. Таким образом, функция будет fnc_assign (1,2), и она сгенерирует вывод:

new_acc_no1.text = import_list[x][2]

с x, все еще принимающим переменную, входную из цикла, входного. Это возможно?

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

изменить y на str(y)

def fnc_assign(y,x): 
    import_list[x][0] = 'new_acc_no' + str(y) + '.text'

edit:

Вы не можете добавить int к стр.

0 голосов
/ 15 ноября 2018

Должно быть

def fnc_assign(y,x): 
    import_list[x][0] = 'new_acc_no' + y + '.text'

Обратите внимание, что ваш LHS является строкой, и строки в Python являются неизменяемыми, т.е. не могут быть изменены.Я понял, что ваша цель состоит в том, чтобы присвоить полученную строку элементу массива, который вы поместили в RHS.Просто поменять их местами делает присваивание.

Или вы намерены на самом деле иметь переменную с именем new_acc_no10.text и присвоить ей значение в списке импорта?

UPDATE

Это также предполагает, что y является строкой (или поддерживает конкатенацию со строками с использованием оператора +), если нет, вместо этого используйте str(y).


НОВОЕ ОБНОВЛЕНИЕ ЗАДАЧИ

Ваш код в вопросе (предполагается, что внешний цикл в x

for x in someValueIterator:
    new_acc_no1.text = import_list[x][0]
    new_acc_no2.text = import_list[x][1]
    new_acc_no3.text = import_list[x][2]
    new_acc_no4.text = import_list[x][12]
    new_acc_no5.text = import_list[x][13]

, похоже, предлагает следующий подход. Организуйте номера счетов в словарь,индексируется индексом RHS, который вы используете для назначения, то есть что-то вроде

acc_nos = [new_acc_no1, new_acc_no2, new_acc_no3, new_acc_no4, new_acc_no5]
indices = [0,1,2,12,13]
idx2acc = dict(zip(indices, acc_nos))

и теперь цикл такой:

for index, acc_no in idx2acc.iteritems():
    acc_no.text = import_list[x][index]

и с учетом внешнего цикла в x,вместо

for x in someValueIterator:
    for index, acc_no in idx2acc.iteritems():
        acc_no.text = import_list[x][index]

рассмотрим циклы, например, так:

for current_list in import_list:
    for index, acc_no in idx2acc.iteritems():
        acc_no.text = current_list[index]
...