Необязательное ограничение аргумента - PullRequest
2 голосов
/ 25 мая 2019

Каркас: Робот, Язык: Python-3.7.1 Уровень знаний: Новичок

У меня нижеописанный основной метод, который заменяетдинамические позиции при сопоставлении и широко используются в моих существующих сценариях автоматизации.

 def querybuilder(self, str, symbol, *args):
        count = str.count(symbol)
         str = list(str)
        i = 0
        j = 0
        if (count == (len(args))):
            while (i < len(str)):
                if (str[i] == symbol):
                    str[i] = args[j]
                    j = j + 1
                i = i + 1
        else:
            return ("Number of passed arguments are either more or lesser than required.")
        return ''.join(str)

Это прекрасно работает, если аргументы отправляются как показано ниже

def querybuilder("~test~123", "~", "foo","boo")

Но если я хотел отправить в виде списка вместо необязательного аргумента, он принимает каждый список / кортеж / массив как один параметр и, следовательно, не попадает внутрь, если условие.

Например: -

i = ["foo", "boo"] -- Optional argument consider it as ('foo, boo',)

ВидимоЯ не могу внести какие-либо изменения в метод (построитель запросов) из-за влияния -ve из-за широкого использования в существующей среде.

От чего я пытался избавиться: -

1, ", ".join("{}".format(a) for a in i,
2, tuple(i),
3, list(i),
4, numpy.array(i) part of import numpy

Любое возможное решение для преобразования параметров в соответствии с требованием?

1 Ответ

2 голосов
/ 25 мая 2019

Передайте ваш список как *['foo', 'boo']

def querybuilder(s, symbol, *args):
    count = s.count(symbol)
    st = list(s)
    i = 0
    j = 0
    if (count == (len(args))):
        while (i < len(st)):
            if (st[i] == symbol):
                st[i] = args[j]
                j = j + 1
            i = i + 1
    else:
        return ("Number of passed arguments are either more or lesser than required.")
    return ''.join(st)

print(querybuilder("~test~123", "~", "foo","boo"))
# footestboo123
print(querybuilder("~test~123", "~", *["foo","boo"]))
# footestboo123
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...