python多继承_python作用域和多继承

python作用域

python无块级作用域 看c语言代码:

#include

intmain() {if(2 > 0) {int i = 0;

}

printf("i = %d", i);return 0;

}

在这段代码中,if子句引入了一个局部作用域,变量i就存在于这个局部作用域中,但对外不可见,因此,接下来在printf函数中对变量i的引用会引发编译错误,但是在python中并非如此

看下面代码:

if 1 == 1:

name= 'fuzj'

print(name)

在这段代码中,if子句并没有引入一个局部作用域,变量i仍然处在全局作用域中,因此,变量i对于接下来的print语句是可见的

所以,python无块级作用域。

python作用域是函数、类、模块

代码:

deff1():

name= 'fuzj'

print(name) #打印报错

函数f1已经将name的变量作用域隔离,所以在函数外print的时候会提示找不到name变量

python的作用域链查找顺序是由内向外找 python在作用域中查找是由内向外找,即先找函数里面的局部变量,然后在找全局变量,直到找不到报错,看下面例子,

name = 'fuzj'

deff1():

name= 'jie'

print(name)

f1()

输出结果是jie

python的作用域在执行之前已经确定 python 解释器解释完代码之后,代码中的作用域已经确定,当此函数被调用时,会优先查找自己作用域,然后再查找全局

name = 'fuzj'

deff1():print(name)deff2():

name= 'jie'f1()

f2()

输出结果:fuzj

name= 'fuzj'

deff1():print(name)deff2():

name= 'jie'

returnf1

res=f2()

res()

输出结果为fuzj

通过上面的例子说明,f1在python解释器解释完之后,其作用域已经确认,作用域链也确认,同样f2函数也已经确认,所以后面执行的时候,哪个函数被调用就执行那个函数,从而查找之前已经定义好的作用域

吊炸天的案例

铺垫

>>> li = [x+1 for x in range(10)] #特殊语法,for后面循环生成了列表的元素,最终组成了一个列表,此时for循环10以内的数,并让每个x加1,最后组成li的列表>>> print(li)

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]>>> li = [x+1 for x in range(10) if x>7] #增加判断条件,x大于7的才加1>>> print(li)

[9, 10]

理解了上面的铺垫,请看下面案例

案例

>>> li = [lambda :x for x in range(10)]>>> print(li)

[. at 0x101bdbae8>, . at 0x101bdbb70>, . at 0x101bdbbf8>, . at 0x101bdbc80>, . at 0x101bdbd08>, . at 0x101bdbd90>, . at 0x101bdbe18>, . at 0x101bdbea0>, . at 0x101bdbf28>, . at 0x101bec048>]>>> print(li[0]). at 0x101bdbae8>

>>> print(li[0]())9

>>> print(li[1]())9

是否已经懵B?

看下面解释:

1.首先li是个列表

2.lambda 表达式其实就是一个简单的函数,分号前是参数,分号后是return的表达式,此案例中,lambda返回了x的值

3.根据上面的基础,li列表中的元素一个个的lambda表达式,即li = [lambda :x,lambda :x....]

4.函数在没有执行前,函数内部代码是不执行的,所以,打印li,输出的是lambda表达式对象

5.函数加括号表示执行函数

6.li中第一个元素是函数,所以li0表示执行第一个函数,此时才真正开始执行函数,而lambda表达式中没有定义x的参数,所以取for循环的结果,最终拿到9

python多继承

python2.7和python3中类有差别,python2.7中将类分给经典类和新式类,python3中全部是新式类,他们在多继承时,类的不同,继承顺序不一样

python3类的多继承

python2.7多继承

经典类:

无继承其他类便是经典类

classFoo:pass

新式类

有继承其他父类,或者object类,此类便是新式类

classFoo(object):pass

继承规则

Python的类如果继承了多个类,那么其寻找方法的方式有两种,分别是:深度优先和广度优先

当类是经典类时,多继承情况下,会按照深度优先方式查找

当类是新式类时,多继承情况下,会按照广度优先方式查找

案例

经典类多继承

classD:deff1(self):print("D.f1")classB(D):deff(self):print("B.f1")classC(D):deff1(self):print("C.f1")classA(B, C):deff(self):print("A.f")

a=A()

a.f1()

输出结果:

D.f1

由于class D 是一个经典类,其中B和C都继承D,A继承C和B,ABC是新式类,,所以会根据深度优先的继承规则,所以输出的结果为class D的f1

新式类多继承

classD(object):deff1(self):print("D.f1")classB(D):deff(self):print("B.f1")classC(D):deff1(self):print("C.f1")classA(B, C):deff(self):print("A.f")

a=A()

a.f1()

输出结果:

C.f1

由于class D继承了object,所以ABCD都是新式类。按找广度优先的原则最后输出的是C.f1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/468856.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习·理论篇(2023版)·第006篇高维空间下的维度与体积距离的关系:采样和维度+高维空间下体积与距离+中心极限定律与距离分布(深度学习)

💕恭喜本博客浏览量达到两百万,CSDN内容合伙人,CSDN人工智能领域实力新星~ 🧡本文章为2021版本迭代更新版本,在结合有效知识的基础上对文章进行合理的增加,使得整个文章时刻顺应时代需要 🧡本专栏将通过系统的深度学习实例,从可解释性的角度对深度学习的原理进行讲…

jquery中json数据转换为字典

首先在前台页面中的json数据为var recipe {};recipe["name"] $("#name").val();recipe["age"] $("#age").val();recipe["sex"] $("#sex").val();recipe["medicine"] "{name: a, value: b}&qu…

你见过哪些操蛋的代码?

NO.1#define TRUE FALSE //Happy debugging suckers快乐的去调试你的代码吧,哈哈NO.2#define NULL (::rand() % 2) // would be quite nice aswell嗯,这个代码也很不错NO.3#define if( if(!卧槽,这个代码更加叼,哈哈&#xff…

后序线索树怎样画图_算法新解刘新宇(二)二叉搜索树:数据结构中的“hello world”...

二叉搜索树BST定义:基于广义二叉树,一颗二叉树定义:或者为空 或者包含三部分:一个值,一个左分支和一个右分支。这两个分支也都是二叉树分支。一颗二叉搜索树是满足下面条件的二叉树:所有左分支的值都小于本…

写代码的三原则

1.不要急于调试,应戒急用忍 不要写一点功能,就Run一下查看效果,这样的做法,源于对自己的不自信。 应该尽量按照思路一直写到,不进行测试,就无法进行下去时候为止。 因为,每次运行程序都要浪费一…

Android 亮屏速度分析总结

前面聊的 最近在调试项目的亮屏速度,我们希望在按下power键后到亮屏这个时间能达到500MS以内,在Rockchip 3399和3288上面的时间都不能达到要求,因此引发了一系列的调试之路。 计算按下power键到亮屏的时间 Android 唤醒时间统计 刚开始的时…

英语学习中总结的阅读、段落匹配、选词填空技巧

1 阅读题 一般五道题都是围绕主旨来问的,所以后四个问题也能帮助第一题的解答,找共有词~~~串起来 文章一般都是新旧观点的碰撞,所以有时候他问的是旧观点,要看清楚他问的是新观点还是旧观点,这是个陷阱~ 2 段落匹配 反…

sql 账号查询一个表查询权限_一个查询语句引发的问题以及巨型表相关操作探索与思考...

背景:关于这个标题想了试了好几个总觉得欠那么点意思。大致情况是,在某服务支持中,1张大表4.5T左右,该表也是分区表。其中一个执行频繁的SQL写法有很大问题,导致巨表全量扫描,造成IO负载很大,业…

Android 亮屏速度分析

前面聊的最近在调试项目的亮屏速度,我们希望在按下power键后到亮屏这个时间能达到500MS以内,在Rockchip 3399和3288上面的时间都不能达到要求,因此引发了一系列的调试之路。计算按下power键到亮屏的时间Android 唤醒时间统计刚开始的时候&…

Linux中一些 不是很常用的配置修改

1,让虚拟机屏幕最大化 :查看-->自动调整大小-->自动适应客户机 2,让虚拟机取消屏保: system --> preferences --> Screensaver转载于:https://www.cnblogs.com/aiyr/p/6713579.html

python 怎么拷贝一个文件到一个新的文件_Python脚本提取不同文件夹里面的文件到一个新的文件...

这条博客分享一个脚本,实现将不同文件夹的我们需要的文件提取到一个新的文件下。如:这是原来文件下的文件,我将它重新命名,然后复制到下图的文件夹下,实现将很多不同文件夹下很多我们想要的文件提取出来,省…

container_of实例

1 前面说的 container_of 在linux内核代码里面使用非常多,对于喜欢linux编程的同学来说,对这个函数要非常清楚他的使用方法,而且还要知道他的原理,这对以后看内核代码,写内核驱动的帮助都非常大,当然&…

Git 分布式版本控制工具 03Git常用命令:Git全局设置+本地与远程仓库操作获取Git仓库+标签操作+忽略名单+工作区、暂存区、版本库+分支操作+暂时保存

Git常用命令目录4 Git常用命令4.1 Git全局设置4.2 获取Git仓库4.2.1 在本地初始化Git仓库4.2.2 从远程仓库克隆4.3 常见的概念:工作区、暂存区、版本库4.4 常见的概念:Git工作区中文件的状态4.5 本地仓库操作4.5.1 git status4.5.2 git add4.5.3 git res…

css属性

CSS属性 字体属性: (font) 大小 font-size: x-large;(特大) xx-small;(极小) 一般中文用不到,只要用数值就可以. 单位:PX、PD 样式 font-style: oblique;(偏斜体) italic;(斜体) normal;(正常) 行高 line-height: normal;(正常) 单位&…

matlab dir函数_MATLAB自动管理文件

MATLAB自动管理文件1. MATLAB中路径设置(1)cd:用于切换当前工作目录示例:将当前工作目录切换到D:\Documents\MATLAB\Matlab test\study下。代码:cd (D:\Documents\MATLAB\Matlab test\study)(2)path:用于对搜索路径的操作示例:先查看当前所有的文件路径&…

git上传大于100M的文件

错误日志 Git lfs - “this exceeds GitHub’s file size limit of 100.00 MB” 解决办法 看这个网址 https://git-lfs.github.com/ 下载上面的后,然后使用下面的命令使用 git lfs install 上面下载而已,并没有安装 git lfs track “*.rar” 这个是要…

Git 分布式版本控制工具 04Gitcode案例:多人协作开发流程+创建仓库+拉取操作+克隆仓库+拉取远程仓库中最新的版本+修改拉取的本地代码

文章目录5. Gitcode5.1 多人协作开发流程5.2 创建仓库5.3 拉取操作5.3.1 克隆仓库5.3.2 拉取远程仓库中最新的版本5.4 修改拉取的本地代码5.5 解决冲突5.6 跨团队协作5. Gitcode 在版本控制系统中,大约90%的操作都是在本地仓库中进行的:暂存&#xff0c…

XHTML结构化

XHTML 规则概要 将传统的 HTML 转换为 XHTML 1.0 是快捷且无痛的,只要你遵守一些简单的规则和容易的方针。不管是否使用过 HTML,都不会妨碍你使用 XHTML。 使用恰当的文档类型声明和命名空间。使用 meta 元素声明你的内容类型。使用小写字母书写所有的元…

rabbitmq如何保证消息不被重复消费_如何保证消息不被重复消费

一. 重复消息为什么会出现消息重复?消息重复的原因有两个:1.生产时消息重复,2.消费时消息重复。1.1 生产时消息重复由于生产者发送消息给MQ,在MQ确认的时候出现了网络波动,生产者没有收到确认,实际上MQ已经…

JavaScript RegExp 对象

// 1 创建正则表达式两种方式 // 1.1 用new // 第1个参数模式是必须的 第2个模式修饰符参数可选 // i:忽略大小写 g:全局匹配 m:多行匹配 var box new RegExp(Box); var box new RegExp(Box, gim);// 1.2 用字面量的形式 // 两个反斜杠是正则表达式的字面量表示形成 var box …