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字符串 在 ...
随机推荐
- 随机练习:C#实现维吉尼亚加密与解密(解密前提为已知密匙)
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- 链表例题2:链表的倒数第k个节点是多少
解题思想: 1.创建一个结点类(为后面实现链表做基础) 2.创建一个查询倒数元素的方法 3.使用快慢指针的思想(主要的部分) 图中的表示的是查询倒数第k个结点的操作: 创建一个快慢指针后pre(慢指针 ...
- RNQOJ [stupid]愚蠢的矿工(树形依赖背包)
题意 题目链接 Sol 树形依赖背包板子题 树形依赖背包大概就是说:对于一个点,只有选了它的父亲才能选自身 把dfs序建出来,倒过来考虑 设\(f[i][j]\)表示从第\(i\)个节点往后背包体积为 ...
- 什么是TOPO学
拓扑,一个跟门萨同样古怪的“科技Word”.其定义,对绝大多数读者而言,不一定需要理解,但无妨知道———拓扑学,数学的一门分科,研究几何图形在一对一的双方连续变换下不变的性质.不少门萨题,来自拓扑学, ...
- Differences or similarities between Java and C++
“作为一名C++程序员,我们早已掌握了面向对象Object-oriented Programming程序设计的基本概念,而且Java的语法无疑是非常熟悉的.事实上,Java本来就是从C++衍生出来的. ...
- 微信小程序实现获得用户手机号
具体操作方法如下: 使用方法 需要将 <button> 组件 open-type 的值设置为 getPhoneNumber,当用户点击并同意之后,可以通过 bindgetphonenumb ...
- leetcode: 树
1. sum-root-to-leaf-numbers Given a binary tree containing digits from0-9only, each root-to-leaf pat ...
- java集合框架——List
一.List接口概述 List有个很大的特点就是可以操作角标. 下面开始介绍List接口中相对于Collection接口比较特别的方法.在Collection接口中已经介绍的方法此处就不再赘述. 1. ...
- ABI 管理
https://developer.android.google.cn/ndk/guides/abis.html 不同 Android 手机使用不同的 CPU,因此支持不同的指令集.CPU 与指令集的 ...
- 【BZOJ1067】[SCOI2007] 降雨量(RMQ+分类讨论)
点此看题面 大致题意:请你判断"\(x\)年是自\(y\)年以来降雨量最多的"这句话的真假. 离散化/\(lower\_bound\) 首先,考虑到年份的范围非常大,便可以离散化. ...