首页 新闻 会员 周边 捐助

python!!! 属性迭代器有些懵,大神求助!

0
[已解决问题] 解决于 2017-08-22 22:11
1 class Fibs:
2     def __init__(self):
3         self.a = 0
4         self.b = 1
5     def next():
6         self.a, self.b = self.b, self.a+self.b
7         return self.a
8     def iter():
9         return self

这段代码有点看不懂啊

获取斐波那契数列  

首先是初始化了斐波那契数列的首项和第二项 然后按照后一项的值等于前两项值的和进行返回

但是我如果想调用的话该怎么去写呢?

这并没有一个值去决定要输出多少项的斐波那契数列

def Fibs(num):
   
    result = [0, 1]
    for i in range(num-2):
        result.append(result[-2] + result[-1])
        
     return result

而这样的就比较好理解了

求大神帮助!

一棵树123的主页 一棵树123 | 菜鸟二级 | 园豆:202
提问于:2017-08-21 21:30
< >
分享
最佳答案
0

obj = Fibs()

obj.__next__或者obj.__next__(),我用的3是netx(obj)

上面的类是无限的,这也就是在体现生成器的好处,你可以写个循环去next到你想到的项

下面的函数虽然可以定义多少项,但是result占用的内存一直在增加

奖励园豆:5
北方姆Q | 小虾三级 |园豆:1120 | 2017-08-22 10:02

晚上回来有些晚 !  谢大神

但是还有个小问题

我在obj.__next__()中加入obj.__next__(num) ,返回的是__next__() takes 1 positional argument but 2 were given  看不懂这是什么意思 

循环应该是

 1 class Fibs:
 2     def __init__(self):
 3         self.a = 0
 4         self.b = 1
 5     def __next__(self):
 6         self.a, self.b = self.b, self.a + self.b
 7         return self.a
 8     def __iter__(self):
 9         return self
10     
11     
12 obj = Fibs()
13 obj.__next__()
14 fibList = []
15 for fib in obj:
16     if fib < 1000:
17         fibList.append(fib)
18     else:
19         break
20 
21 print(fibList)
22        

但是我只想通过输入num 来决定要输出多少项的fibonacci函数

就跟我写的下面哪个函数一样 输入num你就可以输出多少项  

一棵树123 | 园豆:202 (菜鸟二级) | 2017-08-22 22:00

@一棵树123: 

obj = Fibs()
num = 10 # 你的次数
for i in range(num):
  print(next(obj)) # 2里是obj.__next__()

 

上面的报错是因为__next__只需要本身的self参数(自带了),不接受其他参数

北方姆Q | 园豆:1120 (小虾三级) | 2017-08-22 22:05

@北方姆Q: 这样子啊  相当于是obj.__next__() 返回的就是一个个的数列中的数 然后通过循环将里面的数挨个打印出来 嘿嘿  新手刚接触  有些时候脑子转不过弯  谢前辈指点!

一棵树123 | 园豆:202 (菜鸟二级) | 2017-08-22 22:10
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册