有没有一种方法可以使用* args来动态获取函数中所需的输入数量?

时间:2020-01-29 17:00:06

标签: python python-3.x args

def f(a, b,c,d):
    x = open('data.txt', 'r')
    for line in x:
        line = line[a:b] + ':' + line[c:d] + ':'
        x2 = open('data2.txt', 'a+')
        x2.writelines(line)
f(0,2,2,6)

我有原始数据

1231231231231233453453223768729318974389124387\n
1234534534534543242145791208937867328918373892\n
8765432456765434568987692839471281027128012398\n
5787624567456787432343512487320190928390129383\n

我想根据数据的位置划分数据 例如:[0:2]可以是列1,[2:6]是列2,依此类推。 当我调用函数f()时,python中有什么方法可以重载或动态输入诸如 f(0,2,2,6,6,10,10,14.......)

输出:

57:8762:4567:8743.....

1 个答案:

答案 0 :(得分:0)

是的。 Python支持特殊的输入参数修饰符。 *说将参数视为一个列表,并将所有剩余的输入参数分配给该列表。 (**说将arg当作dict并为其分配所有关键字对。)因此,您可以使用如下功能:

def (a, b, *cd):
    "do something for 'a' and 'b'"
    for e in cd:
        "do something for each arg 'e' in 'cd'"

arg'cd'可以为空或很长,具体取决于您用来调用func的参数。 如果您希望cd总是成对出现,则可以将for循环更改为:

    for c, d in zip(cd[::2], cd[1::2]):
        "do something for 'c' and 'd'"

zip函数接受两个列表,并创建一个元组列表。因此,上面的for循环采用一个列表并将其分成偶数和奇数对。因此,如果cd为(x0,y0,x1,y1),则zip调用将产生((x0,y0),(x1,y1))。