拆分不同数量的变量

2024-06-02 06:17:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我想做一个函数,在打开输入变量的数量方面是灵活的。你知道吗

更具体地说,例如,我有以下几点:

def flexi_func(vars):
    func_var_a, func_var_b, func_var_c, func_var_d = vars
    #do something

my_vars = [var_a, var_b, var_c, var_d]
flexi_func(my_vars)

如果输入变量的数量是4,那么这就可以正常工作。但假设我想让同一个函数只对三个或两个输入变量进行运算。假设“做点什么”已经很灵活了。然后打开我可以写的变量

def flexi_func(vars):
    if len(vars) == 4:
        func_var_a, func_var_b, func_var_c, func_var_d = vars
    elif len(vars) == 3:
        func_var_a, func_var_b, func_var_c = vars
    elif len(vars) == 2:
        func_var_a, func_var_b = vars
    #do something

这个也很好用。它对我来说似乎有点笨重,尤其是当我有N>;4个变量时。有没有一种更干净、更python的方法来解包元组,这样我就可以使用解包的变量了?你知道吗

我从this question知道我可以做这样的事情(在python3中):

foo, bar, *other = func()

但是我需要做更多的工作来访问other中的内容,所以它并不比我的if...elif...方法更好。你知道吗


Tags: 方法函数数量lenifvarmydef
1条回答
网友
1楼 · 发布于 2024-06-02 06:17:28

首先,对于要求提供背景或具体例子的评论,我承认,在我能想到的几乎所有情况下,都应该能够避免完全拆箱。这也适用于我原来的问题—可以修改函数的do something部分,以便通过列表索引访问项。你知道吗

然而,原则上,我确信存在需要拆箱的情况,即使只是为了清楚起见。下面是我能找到的给每个输入项分配变量的最佳方法。答案herehere给出了更多的背景细节。你知道吗

def flexi_func(var_list):    
    for i, var in enumerate(var_list):
        vars()['my_func_{}'.format(i)] = var

    #do something 

    return

这会将每个输入变量分配给vars()内置字典。这比globals()内置字典更可取,并且与locals()内置字典不同,它是可写的。要访问do something部分中的变量,必须像这样引用字典:print(vars()['my_func_2'])。你知道吗

最后,如果您想使用字母作为变量标签而不是数字(就像我在问题陈述中所做的那样),您可以将alphabet = [chr(i) for i in range(ord('a'),ord('z')+1)]添加到函数的顶部并调用变量'my_func_{}'.format(alphabet[i])。你知道吗

相关问题 更多 >