用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中对象的理解的更多相关文章

  1. python爬虫之Beautiful Soup基础知识+实例

    python爬虫之Beautiful Soup基础知识 Beautiful Soup是一个可以从HTML或XML文件中提取数据的python库.它能通过你喜欢的转换器实现惯用的文档导航,查找,修改文档 ...

  2. Python专题三字符串的基础知识

    Python专题三字符串的基础知识 在Python中最重要的数据类型包括字符串.列表.元组和字典等.该篇主要讲述Python的字符串基础知识. 一.字符串基础 字符串指一有序的字符序列集合,用单引号. ...

  3. IM开发基础知识补课(五):通俗易懂,正确理解并用好MQ消息队列

    1.引言 消息是互联网信息的一种表现形式,是人利用计算机进行信息传递的有效载体,比如即时通讯网坛友最熟悉的即时通讯消息就是其具体的表现形式之一. 消息从发送者到接收者的典型传递方式有两种: 1)一种我 ...

  4. Linux基础知识第九讲,linux中的解压缩,以及软件安装命令

    目录 Linux基础知识第九讲,linux中的解压缩,以及软件安装命令 一丶Linux Mac Windows下的压缩格式简介 2.压缩以及解压缩 3.linux中的软件安装以及卸载 1.apt进行安 ...

  5. python笔记(1)--基础知识

    一.注释 单行注释 #打印“hello world” print("hello.world!") 另外一种单行注释 print("hello,world!") ...

  6. js基础知识温习:Javascript中如何模拟私有方法

    本文涉及的主题虽然很基础,在很多人眼里属于小伎俩,但在JavaScript基础知识中属于一个综合性的话题.这里会涉及到对象属性的封装.原型.构造函数.闭包以及立即执行表达式等知识. 公有方法 公有方法 ...

  7. JavaScript基础知识(JSON、Function对象、原型、引用类型)

    19.JSON 概念:JavaScript 对象表示法(JavaScript Object Notation),是一种轻量级的数据交换格式  特点:易于程序员编写和查看:易于计算机解析和生成 数据结构 ...

  8. python学习(一) 基础知识

    开始学习<Python基础教程> 1.2 交互式解释器 按照书上的例子敲了个最简单的print函数,居然报错: >>> print "fsdfs"Sy ...

  9. 1 python大数据挖掘系列之基础知识入门

    preface Python在大数据行业非常火爆近两年,as a pythonic,所以也得涉足下大数据分析,下面就聊聊它们. Python数据分析与挖掘技术概述 所谓数据分析,即对已知的数据进行分析 ...

随机推荐

  1. 1042 字符统计 (20 分)C语言

    请编写程序,找出一段给定文字中出现最频繁的那个英文字母. 输入格式: 输入在一行中给出一个长度不超过 1000 的字符串.字符串由 ASCII 码表中任意可见字符及空格组成,至少包含 1 个英文字母, ...

  2. C#事件(Event): 发布符合 .NET Framework Guidelines 的事件

    本文翻译整理自:https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/events/how-to-publish-event ...

  3. P2722 总分 Score Inflation (完全背包模板)

    题目传送门:P2722 总分 Score Inflation 题目描述 我们可以从几个种类中选取竞赛的题目,这里的一个"种类"是指一个竞赛题目的集合,解决集合中的题目需要相同多的时 ...

  4. ACM北大暑期课培训第五天

    今天讲的扫描线,树状数组,并查集还有前缀树. 扫描线   扫描线的思路:使用一条垂直于X轴的直线,从左到右来扫描这个图形,明显,只有在碰到矩形的左边界或者右边界的时候,这个线段所扫描到的情况才会改变, ...

  5. DZNEmptyDataSet框架阅读

      前段时间使用公司封装的空白页占位视图工具,工具是对DZNEmptyDataSet框架的封装.这个框架以前在许多项目也都用过,却没有认真阅读过源码,真的很遗憾.这两天趁五一放假有空,将DZNEmpt ...

  6. 【转】推荐!国外程序员整理的Java资源大全

    构建 这里搜集了用来构建应用程序的工具. Apache Maven:Maven使用声明进行构建并进行依赖管理,偏向于使用约定而不是配置进行构建.Maven优于Apache Ant.后者采用了一种过程化 ...

  7. echarts更改坐标轴文字颜色及大小

    xAxis: { data: anameArr, axisLabel: { show: true, textStyle: { color: '#c3dbff', //更改坐标轴文字颜色 fontSiz ...

  8. Spring Cloud(一):服务注册中心Eureka

    Spring Cloud 基于 Netflix 的几个开源项目进行了封装,提供包括服务注册与发现(Eureka),智能路由(Zuul),熔断器(Hystrix),客户端负载均衡(Ribbon)等在内的 ...

  9. Java set接口之HashSet集合原理讲解

    Set接口 java.util.set接口继承自Collection接口,它与Collection接口中的方法基本一致, 并没有对 Collection接口进行功能上的扩充,只是比collection ...

  10. three.js中的事件

    以上一篇入门篇为例来简单的设置下3d模型当中的交互事件,上一篇我们已经完成了在3d页面中添加了一个红色球,下面我们给这个球一个点击事件让它Y轴位置上升,再设置一个鼠标移入到球上时让其变色. 1.其实t ...