Python 将操作应用于多个变量
我觉得这个解决方案太过分了,我可能没有正确使用内置的 有人能提出一种更好的方法来对变量列表应用相同的操作吗 编辑或更改它们,如果可能的话,无需重新指定值Python 将操作应用于多个变量,python,Python,我觉得这个解决方案太过分了,我可能没有正确使用内置的 有人能提出一种更好的方法来对变量列表应用相同的操作吗 编辑或更改它们,如果可能的话,无需重新指定值 size = 150 free = 27 used = 123 size, free, used = list(map(lambda x: x * 1024, [size, free, used])) 我可能会使用理解/生成器表达式,而不是列表、映射和lambda: 这就是说,如果将这三个名称作为不同的实体而不是单个列表/元组/numpy项
size = 150
free = 27
used = 123
size, free, used = list(map(lambda x: x * 1024, [size, free, used]))
我可能会使用理解/生成器表达式,而不是列表、映射和lambda: 这就是说,如果将这三个名称作为不同的实体而不是单个列表/元组/numpy项数组确实是有利的,那么您最好将它们全部写出来
size *= 1024
free *= 1024
used *= 1024
我可能会使用理解/生成器表达式,而不是列表、映射和lambda: 这就是说,如果将这三个名称作为不同的实体而不是单个列表/元组/numpy项数组确实是有利的,那么您最好将它们全部写出来
size *= 1024
free *= 1024
used *= 1024
您可以简单地将变量存储在元组或列表中,这些变量看起来像一个复合变量,如下所示:
mv = [1024, 27, 123]
然后,使用列表理解将您的转换应用于所有列表:
mv = [i * 1024 for i in mv]
如果您使用的是numpy,还可以使用np.array并在其每个元素上应用默认转换:
mv = np.array([1024, 27, 123])
mv *= 1024
但是,如果numpy仅用于代码中,则绝对应该避免导入它。您可以简单地将变量存储在元组或列表中,这些变量看起来像一个复合变量,如下所示:
mv = [1024, 27, 123]
然后,使用列表理解将您的转换应用于所有列表:
mv = [i * 1024 for i in mv]
如果您使用的是numpy,还可以使用np.array并在其每个元素上应用默认转换:
mv = np.array([1024, 27, 123])
mv *= 1024
但是,如果numpy仅在代码中使用,则绝对应该避免导入它。可以使用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)
输出
这甚至适用于生成器表达式:
foo = TheTuple(*(1024 * x for x in (size, free, used)))
这是一个dict版本,使用双splat运算符**:
可以使用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)
输出
这甚至适用于生成器表达式:
foo = TheTuple(*(1024 * x for x in (size, free, used)))
这是一个dict版本,使用双splat运算符**:
[i*1024表示我的变量中的i]——这里的详细内容几乎只来自于这样一个事实,即这些变量是单独的变量,而不是列表或dict。你不能更改int:它们是不可变的,因此你必须重新赋值。但是你可以稍微优化一下:size,free,used=maplambda x:x*1024,size,free,usedsize=150*1024有什么问题;自由=27*1024;used=123*1024?啊,后面的行返回NamedTuplesize,free,used,所以如果不需要的话,我不想再放3行从KB到字节的转换[I*1024代表我的变量中的I]——这里的详细性几乎只来自于这些是单个变量的事实,你不能改变整数,它们是不可变的,所以你必须重新赋值。但是你可以稍微优化一下:size,free,used=maplambda x:x*1024,size,free,usedsize=150*1024有什么问题;自由=27*1024;used=123*1024?啊,后面的行返回NamedTuplesize,free,used,所以如果不必要,我不想再放3行从KB到字节的转换。也可以将[]更改为,这样我们就不会创建不必要的列表,即使只有3个元素也不重要了…@DeepSpace-这是真的。但这是一个由3项组成的列表,因此内存/性能的影响不会太严重,根据我的经验,人们比任意的iterables更容易解包序列。。。但我想现在是改变这种趋势的最好时机了……这些值之后将被封装在一个命名的元组中,因此更重要的是在返回值之前获得一个干净的解决方案来更改度量单位。第一个解决方案将很好地工作,也可以将[]改为,这样我们就不会创建不必要的列表,甚至只需要3个元素也不重要…@DeepSpace-这是真的。但这是一个由3项组成的列表,因此内存/性能的影响不会太严重,根据我的经验,人们比任意的iterables更容易解包序列。。。但我想现在是改变这种趋势的最好时机了……这些值之后将被封装在一个命名的元组中,因此更重要的是在返回值之前获得一个干净的解决方案来更改度量单位。第一个解决方案会很好地工作。你可能想添加一点注释来解释答案。你可能想添加一点注释来解释答案。