社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

有没有一种pythonic方法可以将函数应用于多个现有变量?[重复]

Alex Manuele • 5 年前 • 1188 次点击  

这个问题已经有了答案:

我一直在重组我的一个项目,使之更加优雅易读。我已经到了要将一个函数应用于多个变量的程度,从而转换变量的值。令我沮丧的是,我已经意识到我正在使用的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.

我之所以要这样做,是因为我已经创建了几个数据集和一个重塑它们的方法。我希望找到一种迭代的方法,而不是显式地将每个变量通过函数本身的行传递。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/40513
 
1188 次点击  
文章 [ 2 ]  |  最新文章 5 年前
ttamiya
Reply   •   1 楼
ttamiya    6 年前

也许您可以使用map函数:

a, b, c = map(change_value, [a, b, c])
Carcigenicate
Reply   •   2 楼
Carcigenicate    6 年前

那不行,因为 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}

对它们进行分组是否合适需要更多的上下文来说明,但如果它们都需要由同一个函数映射,这对我来说是一个很强的指标,表明它们很可能应该被分组。