分配给lis返回的值

2024-05-16 04:34:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个班级,有多个测量向量。我需要迭代这些向量,但只想使用选定的测量。到目前为止,我构建的简化版本如下:

import pylab as pl
class IterationReturn(object):
    def __init__(self):
        self.a = (1,2,3,4,5,6,7,8,9)
        self.b = (10,20,30,40,50,60,70,80,90)
        self.c = (-1,-2,-3,-4,-5,-6,-7,-8,-9)
        self.i = 0

    def returnNextSet(self):
        self.aIter = self.a[self.i]
        self.bIter = self.b[self.i]
        self.cIter = self.c[self.i]
        self.i +=1
        return (self.aIter, self.bIter, self.cIter)               

if __name__ == '__main__':
    iteration = IterationReturn()
    for i in range(len(iteration.a)): 
        # x takes aIter value from iteration.returnNextSet()
        # y takes bIter value from iteration.returnNextSet()        
        x,y = iteration.returnNextSet()    
        pl.scatter(x, y)
    pl.show()

我不想在本例中使用x,y,z = iteration.returnNextSet(),但实际上我有更多的值,不想全部赋值。我找不到只分配给aIterbIter的方法。你知道吗

我有个错误:

    x,y = iteration.returnNextSet()      
ValueError: too many values to unpack

在我的问题中,我有许多测量(a,b。。。,z)例如,我想指定x=d和y=k 我还认为应该从一开始就用不同的方式来完成,比如用继承设计新类,但不确定如何做到这一点。谢谢你的帮助


Tags: fromself版本valuedef向量pl班级
3条回答

不太清楚你为什么要这么做,但有一种方法:

class Test(object):
    def __init__(self):
        self.a = (1,2,3,4,5,6,7,8,9)
        self.b = (10,20,30,40,50,60,70,80,90)
        self.c = (-1,-2,-3,-4,-5,-6,-7,-8,-9)

    def iter_over(self, *args):
        items = [getattr(self, arg) for arg in args]
        return zip(*items)

t = Test()
for a, c in t.iter_over('a', 'c'):
    print a, c

1 -1
2 -2
3 -3
4 -4
5 -5
6 -6
7 -7
8 -8
9 -9

或:

for items in t.iter_over('c', 'b', 'a'):
    print items[1] # will be b (or 2nd passed above) etc...

只要做:

results = iteration.returnNextSet()

然后将这些值称为results[0]results[1],依此类推。你可以做len(results)看看你有多少。你知道吗

最好的方法是返回字典:

return {'a': self.aIter, 'b':self.bIter, 'c': self.cIter, ...}

然后可以指定:

NS = iteration.returnNextSet()
x, y = NS['x'], NS['y']

是的。你知道吗

保留当前函数,可以指定前两个值:

x, y = iteration.returnNextSet()[:2]

在Python3中,您可以将其余的值赋给另一个元组:

x, y, *args = iteration.returnNextSet()

相关问题 更多 >