在函数内调用函数并传递其参数(* args)-Python

时间:2019-02-22 12:32:53

标签: python function arguments args

我没有发现自己在python中这么糟糕,但是我正在努力弄清楚代码中的错误所在。

import numpy as np

x = np.array([[1, 2], [3, 4]])

def func1(x, params, *args):
    x = x.T
    if args[0] == 'condition':
        params['parameter1'] = False
        args = args[1:]
    else:
        params['parameter1'] = True
    return x, params

def func2(x, *args):
    params = {}
    params['parameter1'] = True
    params['parameter2'] = 'solid'
    params['parameter3'] = 200
    x, params = func1(x, params, args[:])
    print(params)
    print(x)
    print(args)

func2(x, 'condition')

我面临的问题是func1中的“ if”未执行。 Python没有看到args [0]等于字符串'condition',尽管我在最后一行调用func2时清楚地传递了它。 尽管我们在If语句之前打印了args的长度,但我还是得到1来表示确实有一个参数“ condition”被传递。

print(len(args)) *# gives 1*

感谢您的反馈。预先谢谢你。

2 个答案:

答案 0 :(得分:1)

尝试更换

x, params = func1(x, params, args[:])

使用

x, params = func1(x, params, *args)

如果您不使用*,则argsfunc1中存储的值将是(('condition',),)而不是('condition',)。这就是为什么print(len(args))仍然给出一个输出的原因。

答案 1 :(得分:0)

func2(x, *args):中,您必须使用

x, params = func1(x, params, *args)

如果使用args [:],则会得到dict(dict(arg(args))类型的对象。