在Python中使用相同的函数声明多个变量

时间:2015-10-30 06:21:07

标签: python

长期以来这就是它的样子:

class TestClass(object):
    def f(num):
        """In general, a complicated function."""
        return num

    self.a = f(1)
    self.b = f(2)
    self.c = f(3)
    self.d = f(4)
    self.e = f(5)

我认为字典方法可以提供帮助,但是如何?

2 个答案:

答案 0 :(得分:1)

正如你所说,你最好使用字典。作为一种更加pythonic的方式,你可以使用字典理解。你可以使用enumerate根据你的项目索引为你的字典创建一系列键。 :

>>> my_dict = {'a{}'.format(i):f(j) for i,j in enumerate([3,4,5,1,2])}
{'a1': 4, 'a0': 3, 'a3': 1, 'a2': 5, 'a4': 2}

要访问每个值,您可以使用简单的索引:

>>> my_dict['a3']
1

此外,如果您想为密钥使用自定义名称,您可以使用zip函数将变量名称压缩为在dict理解中使用的值:

>>> var_names=['a','b','c','d','e']
>>> values=[1,2,3,4,5]
>>> 
>>> my_dict = {i:f(j) for i,j in zip(var_names,values)}
>>> my_dict
{'a': 1, 'c': 3, 'b': 2, 'e': 5, 'd': 4}

答案 1 :(得分:1)

你的方向错误 - 如果你想根据同一个函数分配几个引用,你应该将它们存储在像list这样的数据结构中,而不是存储在离散的,手动输入的变量中。如果需要,您可以稍后解压缩它们,但您应该从数据结构开始。然后,在此函数的可迭代中map()每个值变得更容易,然后将其转换为list

def f(num):
    """In general, a complicated function."""
    return num

my_numbers = list(map(f, range(1, 6)))

这次你的数字是一个整洁的范围所以我只使用了一个range()对象,但你可以使用任何你喜欢的迭代,例如[1, 2, 3](4, 2, 3)