2012-04-05 47 views
0

一个简短的问题:是否可以将生成器表达式中的计算结果分配给引用者?将计算值赋给生成器表达式中的变量?

假设我有一个这样的表达:

m = (float(i.dist) - float(base) for i in met_obj if str(i.code) != '90')

i.dist是我想机会对象的属性。我想:

m = (float(i.dist) -= float(base) for i in met_obj if str(i.code) != '90')

或者我需要使用发电机来代替?

谢谢! LarsVegas

+2

问题不是很清楚......你能举一些例子输入和输出吗? – jamylak 2012-04-05 11:53:53

+1

你想要生成的值是什么?你想让它们等于'新'i.dist'值吗?或者是什么? – 2012-04-05 11:53:55

+0

我正在通过基本上全部保存相同信息的不同文件(例如距交点的距离)循环。但是有些人在现实世界xy中还有其他人。数据存储在一个类中,i.dist例如是第i行的一个属性。因此,如果符合某些条件,想要更改“i”这个对象的属性,就像这个“i.dist = i.dist - base”一样。澄清:现在'met_obj [0] .dist ='126165.26''应该变成'met_obj [0] .dist = -32.5'。希望这有助于理解......干杯 – LarsVegas 2012-04-05 12:06:52

回答

0

一个简短的回答:不,这是不可能的。

+0

我问了一个简短的答案。谢谢。 – LarsVegas 2012-04-05 14:09:21

0

我认为你的代码有错误。

正如你所看到的,float()是一个函数,并声明float(i.dist) -= float(base)方式分配给函数调用,所以这将是一个语法错误:)

+0

我认为他知道有一个错误,因为他尝试了这一点,但它没有工作,所以他在这里问。他正在寻找解决问题的方法,即他的代码的正确版本。 – jamylak 2012-04-05 12:07:26

+0

@jamylak:的确如此。 – LarsVegas 2012-04-05 12:13:19

+0

@wyk其实'float'是一个类(或类型),而不是函数,初始化'float()'创建一个新的'float'实例,在这种情况下,它不允许他编辑目标对象。 – Tcll 2017-11-21 19:32:55

1

如果你想破坏性的循环更新的对象,然后使用一个循环,而不是一台发电机的表达:在functional风格编程的时候,一边做任务到现有的变量

for i in met_obj if str(i.code) != '90': 
    i.dist -= float(base) 

生成器表达式是有用的/成员通常是一个势在必行的结构。

+0

感谢您指出这一点。正如我刚才所说:我想知道是否:-)但老实说,这不是最好的方法。 – LarsVegas 2012-04-05 14:13:06