Python 对象(type/object/class) 作用域 一等函数 (慕课--Python高级,IO并发 第二章)

时间:2021-07-03 09:31:30

在python中一共有两种作用域:全局作用域和函数作用域
全局作用域:在全局都有效,全局作用域在程序执行时创建,在程序执行结束时销毁;所有函数以外的区域都是全局作用域;在全局作用域中定义的变量,都属于全局变量,全局变量可以在程序的任意位置被访问;

函数作用域:函数作用域在函数调用时创建,在调用结束时销毁,函数每调用一次就会产生一个新的函数作用域;在函数作用域中定义的变量,都是局部变量,只能在函数内部被访问;在函数中为变量赋值时,默认都是为局部变量赋值;如果需要在函数内部修改全局变量,则需要使用global关键字来 声明 使用全局变量。

变量的查找规则:当我们使用一个变量时,会优先在当前作用域中寻找该变量,如果有则使用;如果没有则继续去上一级作用域中寻找,如果有则使用;如果依然没有则继续去上一级作用寻找,依次类推,直到找到全局作用域,依然没有找到的话,则会抛出异常;

函数式编程:函数先定义,再使用
一等对象一般都会具有如下特点:(函数)对象是在运行时创建的;(函数)能赋值给变量或者作为数据结构中的元素;(函数)能作为参数传递;(函数)能作为返回值返回;

高阶函数:高阶函数至少要符合以下两个特点中的一个:接收一个或多个函数作为参数;将函数作为返回值(闭包,通过闭包可以创建一些只有当前函数(嵌套的内部函数)能访问的变量,可以将一些私有的数据藏到闭包中。形成闭包的条件:1.函数嵌套;2.将内部函数作为返回值返回;3.内部函数必须要使用到外部函数的变量;);

匿名函数:lambda函数表达式(只是函数的简写,语法糖),专门用来创建一些简单的函数,他是函数创建的一种方式;语法:lambda 参数列表:返回值

在定义函数时,可以通过"@"装饰器,来使用指定的装饰器,来装饰当前的函数,可以同时为一个函数指定多个装饰器,这样函数将会按照从内向外的顺序被装饰。

尚学堂的Python视频教程 https://pan.baidu.com/s/1dGCBKx7 密码:ofml

python对象==========================
对象是内存中专门用来存储数据的一块区域,对象可以用来存放各种数据(数字,布尔值,代码),对象由三部分组成:对象的标识id,对象的类型type,对象的值value,当用一个变量去保存变量的时候,保存的是对象的id(内存地址),一个对象一旦创建它的id和type就永远不能改变了,而对象的值value,可变对象的值可以改变,不可变对象的值不可以改变。

面向对象oop:python语言中的所有操作都是通过对象来进行的。面向对象的编程语言,关注的是对象,而不关注过程;对于面向对象的语言来说,一切都是对象;面向对象的编程思想,将所有的功能统一保存到对应的对象中。

慕课网--Python高级编程和异步IO并发编程 https://www.bilibili.com/video/av26982371/?p=5

第二章:
在python一切皆对象,(在静态语言java中,有两个概念:object和class,object只是class的生成的一个实例而已),在python中class也是对象,函数也是对象,python中的代码和模块也是对象,python可以动态的修改类的属性;(在python中,函数和类都是对象,属于一等公民,这里的一等公民可以进行以下操作:1、可以赋值给一个变量,2、可以添加到集合对象中,3、可以作为参数传递给函数,4、可以当做函数的返回值;)(list是一个集合;)

type、object和class的关系:
type可以用来返回(一个变量指向的)对象的类型,(也可通过type生成一个类,元类编程)。type->class->object:type可以生成class,class可以生成object;(type是用来生成class对象的,我们平时使用的实例,就是自己定义的类或者是内置的类来生成的一些实例。)object是所有对象都要继承的最顶层的基础类;(类名.__bases__:查看类的基类),如果一个类没有继承任何类的话,默认是继承自object类的。type本身也是一个类,同时type也是一个对象,type.__bases__是object;type(object)是type,表明object是由type生成一个对象,type和object形成一个环路,object.__bases__是空,最顶层基类object的基类是空;

Python 对象(type/object/class) 作用域  一等函数  (慕课--Python高级,IO并发  第二章)

在python中一个对象有三个特征:1、身份:对象在内存中的地址,通过id()函数查看一个对象的身份,任意生成一个对象都会有一个id, 2、类型:任何一个对象都是有类型的, 3、值:比如:a=1 ,1就是a变量的值,1会被python解释器用int类型来封装,封装后用a这个变量指向1这个对象。

python中的常用内置类型:
None:python解释器在启动的时候,会用None类型来生成None的对象,a=None b=None:a和b都指向Python解释器中唯一的None对象,id(a)=id(b)返回true;所以None对象在全局只有一个。
数值类型:int,float,complex(复数),bool;
迭代类型:可以用for循环来进行遍历;
序列类型:list,tuple,str,array,range,bytes/bytearray/memoryview(二进制序列)
映射类型:dict字典,映射类型有key和map,
集合类型:set和frozenset;set和dict在Python里的实现原理是一致的,所以它们在Python里的性能都非常高。
上下文管理类型:with语句;
其他:模块类型,class和实例,函数类型,方法类型(class里面定义的函数),代码类型(代码本身也会被Python解释器变成一个对象类型),object类型,type类型,ellipsis类型(省略号的类型),notimplemented类型(做面向对象的高级设计时会用到);

java,C#这类编译型语言在运行前编译的时候,就可以做一些类型的检测,但Python一切皆对象的概念,使得Python没有编译过程,那么很多代码的错误只有在代码运行起来的时候,才会知道我们的错误,这就是动态语言带来的一些弊端。 (第二章 完结)