как вызвать функцию python, передав выходные данные функции в качестве входных данных для функции - PullRequest
0 голосов
/ 12 февраля 2019

Мне нужно написать логику вызова функции python, которая вызывает функцию python несколько раз.

скажем, например, у меня есть скрипт test.py

Я запускаю скрипт какpython test.py val

val=sys.argv[1]
def check(param, val):
    .
    .
    .
    if val == valid.text:
        print '{:10s}:{:10}'.format(param, all.text)

values=os.walk(runtime).next()[1]
for param in values:
    check(param, val)

поэтому здесь вывод похож на

driver                          1.1
dmname                          1.5-temp
fdrmenu                         1.0-rem

, поэтому здесь мне нужно запустить ту же функцию check(param, val), взяв вывод в качестве ввода для вызова функции.

функция вызывает как check (param, val) -> здесь val должно быть driver и так далее для dmname, fdrmenu.

и вызывать ту же функцию для выводаdriver, dmname и так далее до тех пор, пока мы не получим нулевое значение для всех выходов.

здесь sys.srgv[1] следует присваивать значению val только в первый раз, со следующего раза оно должно быть driver,dmname и т. Д.

1 Ответ

0 голосов
/ 12 февраля 2019

Что-то вроде этого рекурсивно?

data={'driver':'1.1','dmname':'1.5-temp','fdrmenu':'1.0-rem'} 
def check(data,key):
    val = data.pop(key)
    if type(val) == str:
        print(key,val)
        if data: check(data,list(data.keys())[0])
    return None

check(data,list(data.keys())[0])

Я не уверен, правильно ли я понимаю ваш вопрос, поэтому я не знаю, нахожусь ли я на правильном пути.

ЭтоФункция в основном берет словарь (данные) элементов пар ключ / значение, и вы вызываете его со словарем и его первым ключом.

check(data,list(data.keys())[0])

Внутри функции вы извлекаете значение, связанное с ключом, и удаляете пару

val = data.pop(key)

Таким образом, словарь начинался как

{'driver':'1.1','dmname':'1.5-temp','fdrmenu':'1.0-rem'} 

первый ключэто «драйвер» и значение «1.1».Итак, теперь переменная val == '1.1', но словарь теперь

{'dmname':'1.5-temp','fdrmenu':'1.0-rem'} 

, потому что первая пара ключ / значение была удалена с помощью функции pop

Затем, используя val, вы извлеклипроверьте условие

if type(val) == str:

в этом случае val == '1.1', чтобы он проверил, а затем вы напечатали ключ и значение 'driver' и '1.1'

, затем выубедитесь, что в словаре нет None, и если это не так, вы вызываете ту же функцию тем же способом, что и раньше, но, поскольку вы удалили первую пару ключ / значение из словаря, следующим первым элементом ключ / значение будет 'dmname':'1.5-temp'

{'dmname':'1.5-temp','fdrmenu':'1.0-rem'} 

Следующим вызовом словаря будет только один элемент

{'fdrmenu':'1.0-rem'} 

, а последний вызов словаря будет пустым

{}

так что условие

if data

не будет проверяться и функция вернет None

Вы можете сделать что-то подобное с парами параметров и значений в вашем случае, если я правильно понимаю ваш вопрос.

Я изменил весельеЕсли вы хотите использовать тип данных, который у вас, по-видимому, есть, то результат этой функции будет

driver 1.1
dmname 1.5-temp
fdrmenu 1.0-rem
...