是否有一种将函数应用于多个现有变量的有效方法?

时间:2018-11-29 00:55:48

标签: python loops iteration

我一直在重组我的一个项目,使它更优雅,更清晰。我已经到了要对多个变量应用函数,从而转换变量值的地步。令我沮丧的是,我意识到我使用的for循环并没有改变变量的值。

例如:

    def change_value(x):
        x = x * 2
        return x
    a = 5
    b = 10
    c = 15

    for x in (a,b,c):
        x = change_value(x)

    print(a) #a doesn't actually change.

我要这样做的原因是因为我已经创建了多个数据集和一个重塑它们的方法。我想找到一种迭代的方法,而不是显式地将每个变量通过函数传递给它自己的行。

2 个答案:

答案 0 :(得分:1)

那是行不通的,因为x = change_value(x)只是重新分配了本地x变量。重新分配像这样的局部对象不会影响正在迭代的集合。

如果您有一组目的相似的变量,将它们放在一个结构中可能是合适的。即时好处是您能够遍历集合并轻松转换值。

如果实际上不需要命名值,则可以将其粘贴在列表中并映射列表:

xs = [1, 2, 3]

changed_xs_comp = [change_value(x) for x in xs]
changed_xs_map = list( map(change_value, xs) )

print(changed_xs_comp, changed_xs_map)) # Prints [2, 4, 6] [2, 4, 6]

或者,如果您要命名,请使用字典:

d = {"a":1, "b":2, "c":3}

changed_d = {k:change_value(d[k]) for k in d}

print(changed_d) # Prints {'a': 2, 'b': 4, 'c': 6}

将它们分组是否合适需要更多的上下文来说明,但是如果它们都需要通过相同的函数进行映射,那么这对我来说很重要,表明它们应该被分组。

答案 1 :(得分:0)

也许您可以使用地图功能:

a, b, c = map(change_value, [a, b, c])