深入理解python(一)python语法总结:基础知识和对python中对象的理解
用python也用了两年了,趁这次疫情想好好整理下。
大概想法是先对python一些知识点进行总结,之后就是根据python内核源码来对python的实现方式进行学习,不会阅读整个源码,,,但是应该会把数据结构的实现、函数调用过程、以及python虚拟机的基本原理根据源码解释下。
当然限于笔者只是一个弱鸡,,,如内容有疏漏的地方或者是一些错误,希望看到的大佬不吝赐教。
第一部分 python语法总结
当然如果对python语法还是一无所知的同学请移步缪雪峰或者菜鸟教程等学习网站看一遍再过来,,,,这里只是进行一些简单的总结
当然,在这之中我会着重的标明一些python2和python3中的区别,具体的结构如下:
1.数据结构
2.选择循环
3.字符串与编码
4.函数
5.面向对象编程
6.异常处理以及python的模块
基础知识
当然,在开始之前我们还要简单的回顾一下基本知识(当然仅仅是列出一些要注意的点):
1.一切皆对象的思想
对象是python中最基本的概念,在python中处理的每个东西都可以称为对象,而同时python的变量都可以看成是内存中某个对象的引用。
关于引用的一个示例如图:

3,9即放在内存中的对象,而x则是对之的引用,当改变3的值的时候,只是将x指向的对象指向了9,而并没有改变3的值。
之后则是关于可变对象和不可变对象:
- 可变对象和不可变对象是指内容是否可以被改变。
- 不可变对象包括:number,string,tuple,
- 可变对象包括:list,set,dict
下面给出几个例子来说明上面的问题:
>>> a=
>>> id(a) >>> b=
>>> id(b) >>> c=[,,]
>>> id(c) >>> d=[,,]
>>> id(d) >>> a==b
True
>>> c==d
True
>>> a is b
True
>>> c is d
False
我们可以看到,对于不可变对象,在内存中地址是唯一的,而对于可变对象,即便值相等,但是在内存中的存储却是两个不同的对象。同时python中“is”关键字是比较两个引用引用的是否为一个对象,而对于==则是比较的是对应值
再来一个例子:
>>> a=
>>> b=a
>>> a+=
>>> a >>> b >>> a=[,,]
>>> b=a
>>> b
[, , ]
>>> a[]=
>>> a
[, , ]
>>> b
[, , ]
>>> a*=
>>> a
[, , , , , ]
>>> b
[, , , , , ]
>>> a=a*
>>> a
[, , , , , , , , , , , ]
>>> b
[, , , , , ]
我们可以看到,由于数字是不可变对象,所以改变a,将a指向的对象改变了,b仍然是之前所指的值。而对于可变对象,由于a,b值得是同一对象,所以通过索引改变a的时候,b也会跟着改变。
但是对于a=a*2这个操作,并没有对a进行原地(在对象上的)改变,相当于对重新创建了一个a*2的对象使a指向它,所以b并没有改变,但a*=2这个操作则是原地的,所以b也会跟着改变。
所以为了避免索引改变值,我们引用了copy操作
>>> a = [, , ]
>>> b = a[:]
>>> id(a) >>> id(b)
# 由于 b 引用的是 a 引用对象的一个拷贝,两个变量指向的内存空间不同
>>> a[] =
>>> b
[, , ] # 改变 a 中的元素并不会引起 b 的变化
或
>>> import copy
>>> b = copy.copy(a)
当然,还会有浅层copy和深层copy的区别,浅层只是对父对象进行了拷贝,而深层拷贝则是除了顶层拷贝外将所有的子对象也进行了拷贝,如下例:
>>> a=[[,,],,]
>>> b=a.copy()
>>> a[][]=
>>> b
[[, , ], , ]
>>> a[]=
>>> a
[[, , ], , ]
>>> b
[[, , ], , ]
>>> import copy
>>> c=copy.deepcopy(a)
>>> a[][]=
>>> a
[[, , ], , ]
>>> c
[[, , ], , ]
关于可迭代对象,这个就放在后面说,这里就不展开了。
之后是关于对象的回收
上每个象包含一个引用的计数器,计数器记录了当前指向该对象引用的数目,一旦对象的计数器为 0 ,即不存在对该对象的引用,则这个对象的内存空间会被回收。这就是 Python 中对象的回收机制,一个最明显的好处即在编写代码过程中不需要考虑释放内存空间。
2.几个python2和python3的差别
a.内置函数map()可以将一个单参数函数依次作用到一个序列的每个元素上,并返回:
一个列表作为结果(Python 2)
一个map对象(它是一个可迭代对象)作为结果 (Python 3)
b.python2和python3除法的区别:
Python中的除法有两种,整数除法(整除运算)和真除法
Python 2和Python 3对“/”运算符的解释有区别
Python 2将“/”解释为整数除法,而Python 3将其解释为真除法。例如,在Python 3中运算结果如下:
>>> /
0.6
>>> // >>> 3.0/
0.6
>>> 3.0//
0.0
>>> //
python2:
>>> / >>> // >>> 3.0/
0.6
>>> 3.0//
0.0
>>> //
c.基本输入输出的区别
python2中input函数会根据所输入的界定符来判断对象类型,如输入1为整型,而输入‘1’为字符串型。
python2中raw_input会将所有的输入看为字符串
而python3中则没有raw_input,其input的作用就相当于python2中raw_input的作用
还有就是print函数的区别,相比大家已经很熟悉,这里不再阐述。
3.几个常用的内置函数,个人认为比较重要的几个
map函数,第一个传入一个函数,第二个参数传入一个列表,返回对列表中每个项使用第一个参数函数的结果(pyhon2和3返回的结果类型不同)
如(python3):
>>> a=[,,]
>>> map(str,a)
>>> c=map(str,a)
>>> type(c)
<class 'map'>
>>> list(c)
['', '', '']
dir()函数可以查看指定模块中包含的所有成员或者指定对象类型所支持的操作
ord()和chr()是一对功能相反的函数,ord()用来返回单个字符的序数或Unicode码,而chr()则用来返回某序数对应的字符
深入理解python(一)python语法总结:基础知识和对python中对象的理解的更多相关文章
- python爬虫之Beautiful Soup基础知识+实例
python爬虫之Beautiful Soup基础知识 Beautiful Soup是一个可以从HTML或XML文件中提取数据的python库.它能通过你喜欢的转换器实现惯用的文档导航,查找,修改文档 ...
- Python专题三字符串的基础知识
Python专题三字符串的基础知识 在Python中最重要的数据类型包括字符串.列表.元组和字典等.该篇主要讲述Python的字符串基础知识. 一.字符串基础 字符串指一有序的字符序列集合,用单引号. ...
- IM开发基础知识补课(五):通俗易懂,正确理解并用好MQ消息队列
1.引言 消息是互联网信息的一种表现形式,是人利用计算机进行信息传递的有效载体,比如即时通讯网坛友最熟悉的即时通讯消息就是其具体的表现形式之一. 消息从发送者到接收者的典型传递方式有两种: 1)一种我 ...
- Linux基础知识第九讲,linux中的解压缩,以及软件安装命令
目录 Linux基础知识第九讲,linux中的解压缩,以及软件安装命令 一丶Linux Mac Windows下的压缩格式简介 2.压缩以及解压缩 3.linux中的软件安装以及卸载 1.apt进行安 ...
- python笔记(1)--基础知识
一.注释 单行注释 #打印“hello world” print("hello.world!") 另外一种单行注释 print("hello,world!") ...
- js基础知识温习:Javascript中如何模拟私有方法
本文涉及的主题虽然很基础,在很多人眼里属于小伎俩,但在JavaScript基础知识中属于一个综合性的话题.这里会涉及到对象属性的封装.原型.构造函数.闭包以及立即执行表达式等知识. 公有方法 公有方法 ...
- JavaScript基础知识(JSON、Function对象、原型、引用类型)
19.JSON 概念:JavaScript 对象表示法(JavaScript Object Notation),是一种轻量级的数据交换格式 特点:易于程序员编写和查看:易于计算机解析和生成 数据结构 ...
- python学习(一) 基础知识
开始学习<Python基础教程> 1.2 交互式解释器 按照书上的例子敲了个最简单的print函数,居然报错: >>> print "fsdfs"Sy ...
- 1 python大数据挖掘系列之基础知识入门
preface Python在大数据行业非常火爆近两年,as a pythonic,所以也得涉足下大数据分析,下面就聊聊它们. Python数据分析与挖掘技术概述 所谓数据分析,即对已知的数据进行分析 ...
随机推荐
- 三句话说清楚ssh端口转发
看了下自己以前的笔记发现也没有完全搞清楚, 网上好多文章都是抄来抄去,远程端口转发全都是拿127.0.0.1举例 总结了下,三句话就可以讲清楚了 1 ssh本地端口转发是 把ssh服务器可以访问到 ...
- win32简单的sockeTCP协议通信
什么也不说了看代码 首先是服务端代码 #include <stdio.h> #include <stdlib.h> #include <WinSock2.h> #i ...
- 洛谷P1002 过河卒 题解 动态规划
题目链接:https://www.luogu.com.cn/problem/P1002 题目大意 棋盘上\(A\)点有一个过河卒,需要走到目标\(B\)点.卒行走的规则:可以向下.或者向右.同时在棋盘 ...
- 力扣208——实现 Trie (前缀树)
这道题主要是构造前缀树节点的数据结构,帮助解答问题. 原题 实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作. 示例: Trie trie = ...
- Windows和Linux下与VMware虚拟机通过内网IP通讯
首先分两种情况:一种是你的电脑已经在一个内网的环境下且有额外的内网IP地址,和另一种只是想给自己电脑上的虚拟机分配个内网IP来通讯. ①有可用的内网IP 找到一个空闲的IP地址(这里以192.168. ...
- 大量SQL的解决方案——sdmap
大量SQL的解决方案--sdmap 最近看到群里面经常讨论大型应用中SQL的管理办法,有人说用EF/EF Core,但很多人不信任它生成SQL的语句:有人说用Dapper,但将SQL写到代码中有些人觉 ...
- C语言关键字const作用及其应用
只要学过C语言的,都有知道const这个关键字,知道是用来定义常量的,如果一个变量被const修饰,那么它的值就不能再被改变,那么还有什么其他作用呢? 一.const常用作用 1.修饰局部变量 con ...
- 快速掌握—HTML快速实现自定义Input开关
HTML <input id="customSwitch" type="checkbox" /> <label for="custo ...
- Go Web 编程之 Hello World
概述 计划写一个讲 Go Web 编程的系列文章.从基于 net/http 包编写 Go Web 程序开始,讲述处理器,请求,响应等基础知识.然后到框架的使用.中间会穿插一些源码的分析.最后做一个实战 ...
- # go微服务框架kratos学习笔记六(kratos 服务发现 discovery)
目录 go微服务框架kratos学习笔记六(kratos 服务发现 discovery) http api register 服务注册 fetch 获取实例 fetchs 批量获取实例 polls 批 ...