为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

青春有我 2021-11-23 20:10:09
我正在尝试为我希望函数采用的参数创建一个名称列表。长度应该是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 回答

?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

使用列表理解:

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


查看完整回答
反对 回复 2021-11-23
?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

我认为这可以满足您的所有要求,充分利用Python 的函数对象数据模型:


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. 对于参数名称b1,无需遵循, b2,等命名约定。

  2. 适用于任意数量的参数(不仅仅是示例中的 32 个)。

  3. 即使某些参数是 kwargs 也能工作。

  4. 如文档所述,__code__.co_varnames将包含参数名称,后跟局部变量名称。因此,我们对前 6 个元素进行索引,以仅获取参数名称。


查看完整回答
反对 回复 2021-11-23
  • 2 回答
  • 0 关注
  • 247 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信