Передача нескольких списков с переменной длиной в качестве параметра функции - PullRequest
0 голосов
/ 10 февраля 2020

Как я могу передать несколько списков с переменной длиной в качестве параметра для функции в python?

def fu(n_inp,n_out,buswidthin,buswidthout,*inpname,*outname):
    for i in range(n_inp):
        inputname=inpname[i]
        buswidth_in=buswidthin
    for i in range(n_out):
        outputname=outname[i]
        buswidth_out=buswidthout

fu(2,2,512,512,*['pktin1.txt','pktin2.txt'],*['pktout1.txt','pktout2.txt'])

Ответы [ 2 ]

0 голосов
/ 10 февраля 2020

Вы можете использовать позиционные аргументы:

def fu(n_inp,n_out,buswidthin,inpname, outname):
    for i in range(n_inp):
        inputname=inpname[i]
        buswidth_in=buswidthin
    for i in range(n_out):
        outputname=outname[i]
        buswidth_out=buswidthout

inpname = ['pktin1.txt','pktin2.txt']
outname = ['pktout1.txt','pktout2.txt']
fu(2,2,512,512, inpname, outname ])
0 голосов
/ 10 февраля 2020

Если ваши входные и выходные файлы должны совпадать, вы можете передать в функцию наборы, каждый из которых содержит имена входных и выходных файлов:

def func1(arg1, arg2, *files):
    for input_file, output_file in files:
        ...
# USAGE
func1(1, 2, *zip(["input_1.txt", "input_2.txt"], ["output_1.txt", "output_2.txt"]))
func1(3, 4, ("input_1.txt", "output_1.txt"), ("input_2.txt", "output_2.txt"))
func1(5, 6, *{"input_1.txt": "output_1.txt", "input_2.txt": "output_1.txt"}.items())

Но вам не нужны здесь упаковочные аргументы:

def func2(arg1, arg2, files):
    for input_file, output_file in files:
        ...
# USAGE
func2(1, 2, zip(["input_1.txt", "input_2.txt"], ["output_1.txt", "output_2.txt"]))
func2(3, 4, (("input_1.txt", "output_1.txt"), ("input_2.txt", "output_2.txt")))
func2(5, 6, {"input_1.txt": "output_1.txt", "input_2.txt": "output_1.txt"}.items())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...