Python 对象(type/object/class) 作用域 一等函数 (慕课--Python高级,IO并发 第二章)
在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中一个对象有三个特征: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没有编译过程,那么很多代码的错误只有在代码运行起来的时候,才会知道我们的错误,这就是动态语言带来的一些弊端。 (第二章 完结)
Python 对象(type/object/class) 作用域 一等函数 (慕课--Python高级,IO并发 第二章)的更多相关文章
- day_12函数默认值,数据类型的补充,函数对象名称空间与作用域,函数的嵌套定义
复习, 昨天讲了字符串的比较,按照从左往右比较每一个字符,通过字符对应的ASCII码进行比较 函数的参数,‘ 实参与形参 形参:在函数定义时()中出现的参数 实参,在函数调用时()中出现的参数 实参的 ...
- python: "TypeError: 'type' object is not subscriptable"
目前stackoverflow找到两种情况的解决办法: 1.TypeError: 'type' object is not subscriptable when indexing in to a di ...
- Python编程-从入门到实践 Eric Matthes 著 袁国忠 译 - - 第二章 动手试一试
因为第一章的动手试一试基本都是探索性的,所以直接进入第二章. # 2.2 动手试一试 # 2_1 简单消息: 将一条消息存储到变量中,再将其打印出来. message = 'python 编程从入门到 ...
- python全栈开发_day11_作用域,函数嵌套和闭包
一:作用域 1)什么是作用域 作用域是规定一个变量可以作用的范围,运行和销毁的范围 2)作用域的分类 1.内置作用域built_in:随着解释器的运行而产生,解释器运行的终止而销毁. 2.全局作用域g ...
- python 对象(object)
- python c++ 混合编程中python调用c++string返回类型的函数,python中返回为数字的解决办法
本随笔解决 Python使用ctypes 调用c++dll 字符串返回类型函数,在python中显示为数字:原文解决方案见so: https://stackoverflow.com/questions ...
- Google C++测试框架系列高级篇:第二章 让GTest学习打印自定义对象
上一篇:更多关于断言的知识 原始链接:Teaching Google Test How to Print Your Values 词汇表 版本号:v_0.1 让GTest学习打印自定义对象 当一个断言 ...
- 流畅的python第五章一等函数学习记录
在python中,函数是一等对象,一等对象是满足以下条件的程序实体 1在运行时创建 2能复制给变量或数据结构的元素 3能作为参数传给函数 4能作为函数的返回结果 高阶函数(接受函数作为参数或者把函数作 ...
- python 对象和json互相转换
一.python对json的支持 从python2.6开始,python标准库中添加了对json的支持,操作json时,只需要import json即可. 二.python对象转换成json字符串 在 ...
随机推荐
- sqlserverToXML
--raw模式 以属性的形式展示select * from goods for xml rawselect *from goods for xml raw('goods') --修改节点名称selec ...
- hql基础入门
[转]进入HQL世界 一个ORM框架是建立在面向对象的基础上的.最好的例子是Hibernate如何提供类SQL查询.虽然HQL的语法类似于SQL,但实际上它的查询目标是对象.HQL拥有面向对象语言的所 ...
- [转]javascript之数组操作
javascript之数组操作 .数组的创建 var arrayObj = new Array(); //创建一个数组 var arrayObj = new Array([size]); //创建一个 ...
- poj 3107 树重心
http://acm.hust.edu.cn/vjudge/problem/18069 和poj 1655差不多:http://www.cnblogs.com/qlky/p/5780933.html ...
- jquery常用属性与方法
1..css( )给指定的样式设置样式值: 2..attr(attributeName,value) /.removeAttr(attributeName);给指定的属性设置值 / 清除所有匹配的元素 ...
- vue组件双向绑定.sync修饰符的一个坑
我们知道组件是单项的,但是有时候需要双向,这时候我们可以使用.sync修饰符,但今天遇到一个坑,一直不成功,花了半小时试出来的.... 在编程的时候我们很习惯冒号后面跟着空格.而.sync双向绑定需要 ...
- Javascript基础--数据类型
一.基本数据类型 1.字符类型:表示字符的类型,例:'aaa',"aaaa",'123456',''(空字符) 2.数字类型:表示数字的类型,例:0,1,3.1415936等 特殊 ...
- PHP switch分支语句中省略break后还会执行其他case的原因分析
请分析以下PHP代码的输出结果: $a= 'dog'; switch($a) { case 'cat': echo "\$a is cat"; case 'dog': echo & ...
- check_mk 之 Check Parameters
配置检测参数有几下方法 1. Creating manual checks instead of inventorized checks (using the variable checks). 2. ...
- webstrom使用
主题 主题下载:http://color-themes.com/?view=index&page=1&order=popular&search=&layout=HTML ...