我觉得这个解决方案有点矫枉过正,我可能没有正确使用内置版。
有人可以建议一种更好的方法将相同的操作应用于变量列表吗?
编辑 - 或者在不重新分配值的情况下更改它们(如果可能的话)
size = 150
free = 27
used = 123
size, free, used = list(map(lambda x: x * 1024, [size, free, used]))
答案 0 :(得分:4)
我可能会使用理解/生成器表达而不是= form_for @article, method: :delete, url: articles_path do |f|
,list
和map
:
lambda
那就是说,如果将这三个名称作为不同的实体(而不是单个列表/元组/ numpy项目数组)确实是有利的,那么你最好把它全部写出来......
size, free, used = (x * 1024 for x in (size, free, used))
答案 1 :(得分:1)
size, free, used=[x*1024 for x in [size, free, used]]
答案 2 :(得分:1)
您可以简单地将变量存储在元组或列表中,这些变量在某种程度上看起来像一个复合:
mv = [1024, 27, 123]
然后,使用list comprehension将转换应用于所有转换:
mv = [i * 1024 for i in mv]
如果您使用的是numpy
,您还可以使用np.array
并对其每个元素应用转换(默认情况下会这样做):
mv = np.array([1024, 27, 123])
mv *= 1024
但是,如果这是您的代码中唯一使用的话,那么肯定会避免导入numpy
。
答案 3 :(得分:1)
您可以使用“splat”解压缩将列表或元组的项传递给NamedTuple构造函数。例如,
from collections import namedtuple
TheTuple = namedtuple('TheTuple', ('size', 'free', 'used'))
size = 150
free = 27
used = 123
t = (size, free, used)
foo = TheTuple(*[1024 * x for x in t])
print(foo)
<强>输出强>
TheTuple(size=153600, free=27648, used=125952)
这甚至可以用于生成器表达式:
foo = TheTuple(*(1024 * x for x in (size, free, used)))
这是一个dict
版本,使用“double-splat”运算符**
:
d = dict(
size = 150,
free = 27,
used = 123
)
foo = TheTuple(**{k: 1024 * v for k, v in d.items()})