python多重循环执行顺序_python多重继承的属性和方法调用顺序问题和对迭代器的初步理解...

计算机学习的一个好办法就是自己将代码跑一遍,了解代码的运作顺序和原理(主要弄懂 函数作用,传入参数,返回值)

见代码:

class A(object):

def __init__(self):

print('A')

super(A, self).__init__()

class B(object):

def __init__(self):

print('B')

super(B, self).__init__()

class C(A):

def __init__(self):

print('C')

super(C, self).__init__()

class D(A):

def __init__(self):

print('D')

super(D, self).__init__()

class E(B, C):

def __init__(self):

print('E')

super(E, self).__init__()

class F(C, B, D):

def __init__(self):

print('F')

super(F, self).__init__()

class G(D, B):

def __init__(self):

print('G')

super(G, self).__init__()

if __name__ == '__main__':

f = F()

F

C

B

D

A

重点关注class F,在实现这个类的时候,采用了堆栈的原理。

先执行了print(“F”),随后按照C,B,D的顺序执行完一个就压入栈。所以此时的输出顺序为C,B,D,这时候再按照D,B,A的顺序(出栈)执行supre函数所继承的父类中的函数和方法。

注:说起来比较抽象,函数还是要自己跑一遍。推荐单步执行的方式明白每一行代码和每一个函数都是都是怎么工作的。(作用,参数,返回值的角度)

补充:

supre函数的常用格式supre(当前类名,self).父类中的方法或属性

迭代器:

推荐代码:

def odd():

print('step 1')

yield 1

print('step 2')

yield(3)

print('step 3')

yield(5)      #yield会返回一个迭代器,不过值会储存在迭代器内,通过迭代可以取出来,而且for循环的实质是由上次断掉的地方重新继续运行

o=odd()         #调用函数只是会返回一个生成器  (推荐此行加断点)

for i in o:     #for循环本质是不断调用next方法,而只是在调用的时候才会去执行函数,随用随取。(将本段代码设置断点跑一跑就知道了)

print(type(i))#迭代器只是一个容器,用来储存值的

print(i)

注:推荐自己跑一遍代码

迭代器也可以理解为一种对子函数的“冻结”,保存当前子函数中的所有值。下一次调用时由yield之后接着运行

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值