访问函数中所有参数名称和所有参数值的列表

时间:2019-03-02 08:49:03

标签: python

我正在尝试为我想要函数采用的参数创建名称列表。长度应该为32,我想要类似bs=[b0,b1,b2,...,b31]的东西,但我不想用b0,b1,...编写,所以有什么方法可以用Python编写一个可以生成这样的列表?

编辑:是否有使参数值不为字符串的方法?我试图将它们作为参数放在这样的函数中:

def chiwork(a0,a1,a2,a3,bs):
    ana=np.array([a0,a1,a2,a3])
    betalat=[0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,3,3,3,3,3]
    chia=sum((ana-a)**2)+sum((bs*a[betalat]-amssr)**2)
    return chia

该函数需要“知道” 32个bs,但是当bs中的元素在列表中时,无法解压缩它。

2 个答案:

答案 0 :(得分:2)

使用列表理解:

bs=['b'+str(i) for i in range(32)]

答案 1 :(得分:1)

我认为这可以满足您的所有要求,因此可以大量使用Python's data model for function objects

def my_func (b1, b2, b3, a1, a2, a3):

    par_names = my_func.__code__.co_varnames[:6]    # A tuple of strings of all param names
                                                    # It's ok to hard-code 6.
    local_ns = locals()
    par_vals  = [local_ns[x] for x in par_names]    # A list of all param values

    another_func(par_vals[0], par_vals[3])
    another_func(*par_vals[0:2])                    # Unpacking first 2 params

def another_func(param1, param2):
    print ("Inside another_func, (param1, param2) are:", param1, ",", param2)

my_func(10, 20, 30, 40, 50, 60)

输出:

Inside another_func, (param1, param2) are: 10 , 40
Inside another_func, (param1, param2) are: 10 , 20

注释:

  1. 对于参数名称,无需遵循b1b2之类的命名约定。
  2. 适用于任意数量的参数(不仅仅是示例中的32个参数)。
  3. 即使某些参数为kwargs也可以。
  4. 如所记录,__code__.co_varnames将包含参数名称,后跟局部变量名称。因此,我们为前6个元素建立索引,以仅获取参数名称。
相关问题