python - 使用 for 循环将函数输出分配给列表中的变量
问题描述
我认为我的问题应该很常见,但我在网上找不到答案。我有一个接受 2 个参数并有 2 个输出的函数。我想通过函数运行这两个参数的列表,并将输出分配给列表中的元素。让我解释一下,这两个参数在这两个列表中:
Lengths = [self.xS, self.yS, self.zS, self.Len1, self.Len2, self.Thick]
LengthsUnit = [self.xSUnit, self.ySUnit, self.zSUnit, self.Len1Unit, self.Len2Unit, self.ThickUnit]
我为通过函数运行这些参数而构建的for
循环如下所示:
for length, unit in zip(Lengths, LengthsUnit):
length, unit = ConvertToSIVarUnit(self, length, unit, 'meter', 'Length')
完成后,我希望self.xS
修改列表中的内容(以示例为例)。所以第一个打印语句的输出应该和最后一个不同:
Lengths = [self.xS, self.yS, self.zS, self.Len1, self.Len2, self.Thick]
LengthsUnit = [self.xSUnit, self.ySUnit, self.zSUnit, self.Len1Unit, self.Len2Unit, self.ThickUnit]
print(self.Xs)
for length, unit in zip(Lengths, LengthsUnit):
length, unit = ConvertToSIVarUnit(self, length, unit, 'meter', 'Length')
print(self.xS)
但是这 2 个print
函数的输出是相同的,所以 for-loop-function 组合可能不起作用。
解决方案
您需要分配给列表元素,而不是保存列表值的变量。用于enumerate()
获取索引。
for i, (length, unit) in enumerate(zip(Lengths, LengthsUnit)):
Lengths[i], LengthsUnit[i] = ConvertToSIVarUnit(self, length, unit, 'meter', 'Length')
但是,如果您不将长度和单位保留在不同的列表中,事情可能会更容易。使用字典或元组列表将值和单位保持在一起。
更改列表以影响原始对象属性是不可能的。您可以使用属性名称列表而不是值,然后使用getattr()
and setattr
。
Lengths = ['xS', 'yS', 'zS', 'Len1', 'Len2', 'Thick']
LengthsUnit = ['xSUnit', 'ySUnit', 'zSUnit', 'Len1Unit', 'Len2Unit', 'ThickUnit']
for length, unit in zip(Lengths, LengthsUnit):
new_length, new_unit = ConvertToSIVarUnit(self, getattr(self, length), getattr(self, unit), 'meter', 'Length')
setattr(self, length, new_length)
setattr(self, unit, new_unit)
print(self.xS)
推荐阅读
- sql - 检查是特定时间范围内的时间
- cordova - Cordova/Phonegap NFC 插件 NDEF_PUSH_DISABLED [已解决]
- actions-on-google - 有人可以帮助我更改我的调用短语吗?
- c++ - 什么时候可以创建“保留”标识符?
- java - 带有联接的 Spring JPA Costum 返回类型
- timer - 使用每个 MCU 上的一个 GPIO 引脚同步 3 个 STM32L4 MCU 的正弦发生器
- c++ - GetModuleFileName 填写地址而不是可执行文件名称
- javascript - javascript数组的空元素会占用内存吗?
- html - 是否可以将 CSS Grid 与 Ionic 一起使用?
- php - PHP:如何跟踪没有输入数据的超时?