我想做一个函数,在打开输入变量的数量方面是灵活的。你知道吗
更具体地说,例如,我有以下几点:
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...
方法更好。你知道吗
首先,对于要求提供背景或具体例子的评论,我承认,在我能想到的几乎所有情况下,都应该能够避免完全拆箱。这也适用于我原来的问题—可以修改函数的
do something
部分,以便通过列表索引访问项。你知道吗然而,原则上,我确信存在需要拆箱的情况,即使只是为了清楚起见。下面是我能找到的给每个输入项分配变量的最佳方法。答案here和here给出了更多的背景细节。你知道吗
这会将每个输入变量分配给
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])
。你知道吗相关问题 更多 >
编程相关推荐