Python基础语法
作者:Barranzi_
个人github主页:[github](https://github.com/La0bALanG)
个人邮箱:awc19930818@outlook.com
新时代的铁饭碗:一辈子不管走到哪里都有饭吃(还能吃上热乎的)。——佚名
免责声明:
本系列笔记撰写初衷就是为了分享个人知识以及个人学习历程中的感悟及思考,所涉及到的内容`仅供学习与交流`,请勿用作`非法或商业用途`!由此引发的任何法律纠纷`后果自负`,与作者本人无关!
版权声明:
未经作者本人授权,禁止转载!请尊重原创!
既然学的是Python,不知道祖师爷是谁可还好?无图言x,上祖师爷!
注:本文所有代码、案例测试环境:1.Linux -- 系统版本:Ubuntu20.04 LTS 2.windows -- 系统版本:WIN10 64位家庭版
Python基础概念简介
Python发展历程
自从20世纪90年代初Python语言诞生至今,它已被逐渐广泛应用于系统管理任务的处理和Web编程。 Python的创始人为荷兰人吉多·范罗苏姆(Guido van Rossum)。1989年圣诞节期间,在阿姆斯特丹,Guido为了打发圣诞节的无趣,决心开发一个新的脚本解释程序,作为ABC 语言的一种继承。之所以选中Python(大蟒蛇的意思)作为该编程语言的名字,是取自英国20世纪70年代首播的电视喜剧《蒙提.派森的飞行马戏团》(Monty Python’s Flying Circus)。 ABC是由Guido参加设计的一种教学语言。就Guido本人看来,ABC 这种语言非常优美和强大,是专门为非专业程序员设计的。但是ABC语言并没有成功,究其原因,Guido 认为是其非开放造成的。Guido 决心在Python 中避免这一错误。同时,他还想实现在ABC 中闪现过但未曾实现的东西。 就这样,Python在Guido手中诞生了。可以说,Python是从ABC发展起来,主要受到了Modula-3(另一种相当优美且强大的语言,为小型团体所设计的)的影响。并且结合了Unix shell和C的习惯。 Python已经成为最受欢迎的程序设计语言之一。自从2004年以后,python的使用率呈线性增长。Python 2于2000年10月16日发布,稳定版本是Python 2.7。Python 3于2008年12月3日发布,不完全兼容Python 2。2011年1月,它被TIOBE编程语言排行榜评为2010年度语言。 由于Python语言的简洁性、易读性以及可扩展性,在国外用Python做科学计算的研究机构日益增多,一些知名大学已经采用Python来教授程序设计课程。例如卡耐基梅隆大学的编程基础、麻省理工学院的计算机科学及编程导论就使用Python语言讲授。众多开源的科学计算软件包都提供了Python的调用接口,例如著名的计算机视觉库OpenCV、三维可视化库VTK、医学图像处理库ITK。而Python专用的科学计算扩展库就更多了,例如如下3个十分经典的科学计算扩展库:NumPy、SciPy和matplotlib,它们分别为Python提供了快速数组处理、数值运算以及绘图功能。因此Python语言及其众多的扩展库所构成的开发环境十分适合工程技术、科研人员处理实验数据、制作图表,甚至开发科学计算应用程序。2018年3月,该语言作者在邮件列表上宣布Python 2.7将于2020年1月1日终止支持。用户如果想要在这个日期之后继续得到与Python 2.7有关的支持,则需要付费给商业供应商。
Python定义
Python是一门面向对象的、解释型的计算机程序设计语言。
这句话对于现在正在看本笔记的你,还是相当的抽象和陌生的。没关系,接下来我们一点点解释这句话。 先说说面向对象。那么得先说说对象。什么是对象?“女朋友呗!”“……”no!此对象非彼对象!对象,是指现实世界中各个事物个体的抽象化概念。各个,说明什么都行,所以,有一句行话是这么说的:一切万物皆对象。是对象,就有属性及方法;是对象,就有封装、继承、多态三大特性。属性,就是这个对象“是什么,有什么特征,什么描述”,方法,就是这个对象“能干什么?能做什么?对外能够提供什么样的功能”。比如,你正在看的这个笔记,它就是一个对象。它的属性是什么?纸质的,教材书籍,一共300页……它的方法是什么?能看,能翻阅,能学习,能参考……所以,其实站在数学层面,对于对象的定义似乎就更简单:对象是一组封装了属性及方法的集合。 面向对象,其指代一种编程思想,即:以对象为中心,注重解决问题的方法。所以,这个名词解读完之后,对于Python定义前半句话应该可以理解了:Python是一门采用了面向对象编程思想的程序设计语言。 解释完面向对象,再说下解释型。解释型指代一种程序的编译模式,具体的会在后文进行讲解,在这里我们先解释一下什么是编译。高级编程语言之所以高级,是因为其对开发者更加友好,逻辑理解及运用更加接近人类思维。但从另一个方面来说其对机器的友好程度自然就比不上传统的低级编程语言(比如汇编语言,比如C)。所以,为了让机器能够读懂我们人写的高级编程语言做出来的程序,我们需要一个“工具”,这个工具充当一种中间件(中间人)的角色,它会将高级编程语言转化为机器能够读懂的机器码,也就是二进制0和1。所以,对于现存的大多数高级编程语言,其都会对应一种或多种这样充当中间件角色的“工具”。 程序。Pascal语言之父——尼古拉斯·沃斯至理名言:程序=数据结构+算法。什么是数据结构?举个栗子一说就明白:老安领导通知老安上海出差一周,那我一想,上海天气潮,衣服不好干,得,得多带点衣服。到家一看,懵了,为啥?只有一个20英寸的登机箱。问题就来了:衣服该怎么叠,能保证放进去更多的衣服?那我们开始思考:如果随便揉一团随便扔进箱子,完,三件,满了;如果我叠成一片一片的,我能放十件;如果我卷成条,我能放二十件!好,到上海了,老安得换衣服,从箱子中拿出来衣服,如果是随便扔进箱子的,那这衣服也皱皱巴巴的拿出来还麻烦,抖搂半天;如果是叠成片,可能下面的就不好拿;如果卷成条,相对来说拿是最方便的。言归正传,数据,在内存中,无非就是存储在内存之上。那么,数据以什么样的方式进行存储,能够保证我存储的高效、安全、便携的同时,读取这些数据的时候也能高效、安全、便携。这就是数据结构所研究的问题。那什么又是算法呢?算法是解决某一个问题的指令的集合。算法需要有一个或多个确定的输入,同时算法执行完毕后要返回一个或多个确定的输出。通俗点,算法其实就是干一件事我需要哪些步骤,第一步要做什么,第二步要做什么等等。既然程序=数据结构+算法,那么其实应该对程序就有一个基本的理解了:一个程序,包含一种解决某个问题的算法和一种对应的数据结构,这个算法会有很多步骤,同时在这个算法执行的过程中会伴随着对对应数据结构中的数据的存取及运算操作。 将以上定义中的几个关键字分别解释完毕之后,我们对于这句Python的定义应该是可以比较透彻的理解了:首先,Python是一门计算机程序设计语言(俗称编程语言),它采用的编程思想是面向对象的编程思想,是一种采用解释型的编译模式的高级编程语言。
Python的其他定义
Python还有一些其他的常见的解释。
第一种:Python是一门胶水语言。何谓胶水?粘东西用的呗……解释一下:在很多开发场景下,诸多功能模块如果直接选用Python进行开发反而并不是更好的选择,此时就会考虑到选用其他的,更加方便高效的编程语言。可是因为编程语言间的差异,功能模块实现后进行整合存在一定的困难,此时Python的强大就体现出来了:使用Python开发一个功能模块的公共接口,将这些采用其他编程语言实现的功能进行整合,进而完成整体的功能,这样的思路在Python相关的开发中屡见不鲜,基本现有大部分的第三方开源函数库其底层并不是使用Python进行开发而是其他的编程语言,比如C++。
第二种:Python是数据科学领域首选的编程语言。数据科学,其本质与计算机编程并没有太大的联系,更多注重的是模型的建立(数学建模),与数据相关的内容。但往往实现的数学模型都需要采用编程语言将其运行在计算机上进行生产,此时,选择一个简单的,易上手的编程语言无异于是降低成本最好的手段。而Python的特点:简单,易上手,开发效率高等,非常符合这方面的需求,这也就是为什么是数据科学首选的编程语言的原因了。
PEP-8规范
PEP-8规范为Python最标准的编码规范,其规定了全球通用的规则。全世界所有的Python开发者都要遵循这个标准规范。 PEP-8规范内容较多,在这里不做太多赘述,感兴趣的同学可以查看Python的官方文档说明,在这里我们只介绍几个比较基础的编码规范概念。 1.缩进。每一级缩进要使用4个空格或1个tab制表符。 2.Python3规定不允许同时使用空格及tab进行缩进。 3.所有行限制的最大字数为79. 4.顶层函数和类的定义,前后用两个空行隔开。 5.源文件编码统一采用UTF-8格式编码。 6.模块或包导入语句单独一行编码。 …
解释器与编译器
解释器
解释器(英语:Interpreter),又译为直译器,是一种电脑程序,能够把高级编程语言一行一行直接转译运行。解释器不会一次把整个程序转译出来,只像一位“中间人”,每次运行程序时都要先转成另一种语言再作运行,因此解释器的程序运行速度比较缓慢。它每转译一行程序叙述就立刻运行,然后再转译下一行,再运行,如此不停地进行下去。
解释器工作原理
Python解释器执行程序大致分为以下几步: 1.执行python xxx.py文件; 2.调度python解释器开始运行; 3.python解释器的编译器会将.py源文件编译(解释)成字节码生成PyCodeObject字节码对象存放在内存中。 4.python解释器的虚拟机将执行内存中的字节码对象转化为机器语言,虚拟机与操作系统交互,使机器语言在机器硬件上运行。 5.运行结束后python解释器则将PyCodeObject写回到pyc文件中。当python程序第二次运行时,首先程序会在硬盘中寻找pyc文件,如果找到,则直接载入,否则就重复上面的过程。
解释器类型
1.CPython CPython这个解释器是用C语言开发的,所以叫CPython。在命令行下运行python就是启动CPython解释器。 CPython是使用最广的Python解释器。
2.IPython IPython是基于CPython之上的一个交互式解释器,也就是说,IPython只是在交互方式上有所增强,但是执行Python代码的功能和CPython是完全一样的。好比很多国产浏览器虽然外观不同,但内核其实都是调用了IE。 CPython用»>作为提示符,而IPython用In [序号]:作为提示符。
3.PyPy PyPy是另一个Python解释器,它的目标是执行速度。PyPy采用JIT技术(及时编译器),对Python代码进行动态编译(注意不是解释),所以可以显著提高Python代码的执行速度。 绝大部分Python代码都可以在PyPy下运行,但是PyPy和CPython有一些是不同的,这就导致相同的Python代码在两种解释器下执行可能会有不同的结果。如果你的代码要放到PyPy下执行,就需要了解PyPy和CPython的不同点。
4.Jython Jython是运行在Java平台上的Python解释器,可以直接把Python代码编译成Java字节码执行。
5.IronPython IronPython和Jython类似,只不过IronPython是运行在微软.Net平台上的Python解释器,可以直接把Python代码编译成.Net的字节码。
编译器
编译器就是将“一种语言(通常为高级语言)”翻译为“另一种语言(通常为低级语言)”的程序。一个现代编译器的主要工作流程:源代码 (source code) → 预处理器 (preprocessor) → 编译器 (compiler) → 目标代码 (object code) → 链接器 (Linker) → 可执行程序 (executables) 高级计算机语言便于人编写,阅读交流,维护。机器语言是计算机能直接解读、运行的。编译器将汇编或高级计算机语言源程序(Source program)作为输入,翻译成目标语言(Target language)机器代码的等价程序。源代码一般为高级语言 (High-level language), 如Pascal、C、C++、Java、汉语编程等或汇编语言,而目标则是机器语言的目标代码(Object code),有时也称作机器代码(Machine code)。
Python程序执行方式
交互式
交互式编码是指在操作系统的命令行(Windows下叫命令行,Linux下叫终端)中运行代码,具体步骤如下: 1.打开命令行(终端); 2.进入交互模式:输入命令python(Linux下输入python3),回车即可进入; 3.编写代码; 4.回车运行; 5.退出交互模式:输入命令exit(),回车。
文件式
文件式为常用的编码模式,即将所有程序代码一次性写在文件中,通过解释器加载程序文件以执行代码。具体步骤如下: 1.创建xxx.py格式的文件并打开; 2.编写代码; 3.保存文件; 4.打开终端,进入程序文件所在目录:cd 目录路径; 5.执行程序文件:输入命令python 文件名(Linux下输入python3 文件名).
注释及其使用
注释,即注解,解释性的文本内容,意在给人看的内容,通常是对代码的一些描述性信息。注释不会被当做代码解析,但会占据文档字节大小。
注释通常情况下分为单行注释和多行注释。但在Python中,只有单行注释。
单行注释的语法:以#号开头。
Python代码注释通用快捷键:ctrl + /
基本常用函数
print():用于输出一定的内容。 input():用于输入一定的内容,返回值为字符型数据对象。
Python基础语法——变量
定义
标准定义(较抽象,不好理解)
变量是一种使用方便的占位符,用于引用计算机内存地址,该地址可以存储数据对象。
通俗定义(简单易懂)
内存中存储一个数据对象的空间,再起一个名字。
理解
首先先明白一点:此变量非彼变量,即,这里所说的变量,并不是数学中常见的“变量”,一码归一码。
怎么去理解变量的含义呢?我们先举几个非常简单的栗子:生活中,你要喝水,是不是要拿个杯子,接上水,再喝;你要吃饭,是不是得拿个碗盛饭后再吃;你要出发去武汉,是不是得坐上一个动车,动车带着你到达武汉……生活中有很多这样的栗子,而这样的栗子无独有偶都有一个统一的规律:需要使用某一个东西去指代它,如果我想干什么我只要获取和使用这个指代的东西就可以了。这就是变量最通俗的理解。计算机中的数据有很多,类型也有很多,文件,音频,视频,等等,其都可以称作为数据。这些数据我想存在计算机中,需要三个东西:第一,一个具体的存储地址,即我要存在哪;第二,一个具体指代我的东西,类似我的名字,这样如果谁需要使用我这个数据直接在一个固定的地址找到我的名字就可以使用我了;第三,具体的存储空间的大小。这就是变量存在的最基本的作用。
变量的声明及赋值
语法
Python中变量的声明及赋值语句语法如下: 变量名 = 变量值(单个声明) 变量名1,变量名2,…,变量名n = 变量值1,变量值2,…,变量值n(多个声明)
举例:
A = 1
Name = ‘小安安’
B2 = True
Age,sex=32,’男’
…
注意事项及理解
变量的声明及赋值语句其实包含两个步骤:
1.先声明:声明,即创建,即创建一个变量,即创建变量的存储地址及命名;
2.再赋值:创建好变量存储地址及完成变量的命名后,将其与具体的数据对象间建立联系,这个联系在专业术语上叫“引用关系”,其实质是变量指向数据对象的指针。
这里所说的“赋值”,即创建变量与对象的引用关系。
同时我们需要注意,一定是先声明变量,再进行变量的赋值,原理也很简单,必须要先创建好存储地址并命名,再向其中存储具体数据对象。
对于“变量只声明,不赋值”,在Python中没有明确的规定,但语法层面是错误的。但是在其他个别编程语言中,比如JavaScript,其规定“变量只声明但不赋值,不报错”,因为这种情况JavaScript会给其赋一个默认的初值叫“undefind”,寓意为“未定义”,即描述当前变量只是声明(创建)了,但还没赋值而已,用undefind标识一下。
综述:变量,是计算机内存中存储一个数据对象的空间,它需要起一个名字用于指代该空间,同时需要存入一个具体的数据对象,这样后期想使用该数据对象的话只需要根据该变量的存储地址找到该变量后用变量的名字去引用就可以了。同时,变量有声明,就要有赋值,而且一定是先声明,再赋值,只声明,不赋值,语法出错。而这个赋值,其实就是创建变量和数据对象之间的引用关系。
变量命名的规则
变量的命名规则如下:
1.变量命名可以使用大小写、中文、特殊符号“_”、“-”、数字;
2.变量的命名不能以数字开头;
3.变量的命名尽量采用“驼峰命名法”;
4.变量的命名最好要“见名知意”,即尽量采用“匈牙利命名法”。
何谓驼峰命名法?即:一个变量的名称可能会由多个英文单词组成,那么该情况下每个单词的首字母就需要大写以区分整个变量名的含义。
举个栗子:声明一个变量,用于存储学生的数据信息,则该变量名我可以这样命名:StudentInformation。该变量名由两个英文单词组成,第一个单词是学生的意思,第二个单词是信息的意思。则这两个单词放在一起组合成当前变量名的意思,就需要分别将其首字母进行大写。
不过,驼峰命名法也有两种实际应用的区分,即“小驼峰”与“大驼峰”。小驼峰是指,变量的第一个单词首字母不大写,从第二个单词开始首字母才需要大写;大驼峰即无论是第几个单词,首字母均大写。举个栗子:声明一个变量,用于存储学生的数学成绩,则该变量名称可以命名为:studentMathGrade或StudentMathGrade。前者即为小驼峰。
何谓匈牙利命名法?即上文所见的栗子,变量的命名要尽量见名知意。StudentMathGrade,我一看到这个变量,我就知道这个变量存储的是学生的数学成绩,因为我可以直接把变量名的英文单词组合翻译成汉语;CitySubwayLineNumber变量,直接翻译成汉语,即表示存储的是某城市的地铁线路的编号。
使用变量时需要注意的点
1.Python的变量类型是动态的。何谓动态?先说静态。变量类型的静态是指变量创建时需要预先规定好固定的数据类型,且只能存取对应的数据类型的数据。动态即无需提前规定数据类型,可以任意存取任意类型的数据。有关这一点,我们举个栗子一说就明白:比如我手边有个杯子,可以装水,装咖啡。所以,杯子其实就是个变量,他放在桌子的一角上,这就是规定了他的存储地址;里面可以装水装咖啡,这就是规定了其具体存储的数据对象;如果我现在把杯子里的水倒掉,插上几支笔,杯子就不再是杯子,而变成了笔筒;如果我把笔拿出来,抽根烟,把烟灰弹进去,杯子就不再是杯子也不再是笔筒,而变成了烟灰缸。也就是说,变量具体归属于什么类型,由其存入的数据对象的类型确定,不限制变量的类型,自然该变量的类型就是动态的。
2.赋值语句的理解。赋值符号“=”并不是数学意义上的“相等”,而是代表赋值,代表引用关系的创建。计算机中,两个“=”,即‘==’才表示相等;三个“=”,即‘===’表示全等,即描述两个数据对象之间的相等关系需要从多个维度判断。
3.“=”赋值语句本质上其实属于浅拷贝。
del语句
del 变量名1,变量名2,…,变量名n
作用:
Del语句用于删除变量。注意:此处所说的删除变量并不是指把内存地址删了,而只是单纯的指删除变量与数据对象之间的引用关系,如果有可能的话,则还会释放对象。
同时还需要注意一点,del能删除一切数据对象,包括后期我们见到的函数,我们见到的类,我们见到的实例,都能删除,因为这些本质上都属于对象,而del就是用来删除变量与这些对象之间的引用关系的。
难点讲解:特殊情况下的变量赋值语句详解
1.多变量同时赋值于同一个数据对象
2.变量间的相互赋值情况
3.多变量同时赋值or变量间的相互赋值基础上的del语句
难点讲解:Python的垃圾回收机制
Python基本数据类型及数据类型转换
数据及数据类型定义
数据
数据是指对客观事件进行记录并可以鉴别的符号,是对客观事物的性质、状态以及相互关系等进行记载的物理符号或这些物理符号的组合。它是可识别的、抽象的符号。
它不仅指狭义上的数字,还可以是具有一定意义的文字、字母、数字符号的组合、图形、图像、视频、音频等,也是客观事物的属性、数量、位置及其相互关系的抽象表示。例如,“0、1、2…`”、“阴、雨、下降、气温”“学生的档案记录、货物的运输情况”等都是数据。数据经过加工后就成为信息。
在计算机科学中,数据是指所有能输入到计算机并被计算机程序处理的符号的介质的总称,是用于输入电子计算机进行处理,具有一定意义的数字、字母、符号和模拟量等的通称。现在计算机存储和处理的对象十分广泛,表示这些对象的数据也随之变得越来越复杂。 实质上,数据是对广大现实存在的个体一种抽象化的概念,一种统称。数据是一种广义上的概括。在计算机编程语言中,数据就是指一切能存入变量的对象。
数据类型
因为一切都可以称作为数据,但数据的个体与个体之间是存在的差异的,但同时又具备诸多相似性,所以,把一类相似的数据放在一起集中管理,就形成了数据类型。也就是说,数据类型是用来划分数据的。而分类标准可以有很多种,所以数据的划分也可以有很多种标准,但具体的,数据类型的种类是固定的。
数据类型种类
1.整型 2.浮点型 3.复数 4.布尔型 5.空值None 6.字符串 7.列表 8.元组 9.字典 10.集合 11.固定集合 12.字节串
Python基本数据类型的划分
类型查看函数
type() 此函数的作用是返回一个数据对象的类型。 用法:将需要查看的数据对象当做参数传入函数内部即可。 举例:type(123),其返回的类型为int
按照是否为数字类型划分
按照是否为数字类型,可将数据类型划分为以下情况:
数字类型:整型,浮点型,复数,布尔型
其他类型:除数字类型以外的其他数据类型
按照是否为可变类型划分
按照是否为可变类型,可将数据类型划分为以下情况:
不可变类型:整型,浮点型,复数,布尔型,字符串,元组,固定集合,字节串
可变类型:列表,字典,集合
按照序列和容器划分
按照是否为序列及容器,可将非数字类型划分为以下情况:
序列:字符串,列表,元组,集合,固定集合,字节串
容器:字典
数字类型
整型int
整型用于表示整数值对象,包含正整数,0,和负整数
整型字面值
由进制来进行表示。 常见的进制有:二进制,八进制,十进制,十六进制 二进制:由0b开头,后跟0或1.例如:0b11010110 八进制:由0o开头,后跟0到7.例如:0o124 十进制:由0d开头,后跟0到9.例如:0d456 十六进制:0x开头,后跟0到9及A到F.例如:0xE4393C
进制转换
十进制转二进制:采用十进制数除2取余法,即十进制数除2,余数为权位上的数,得到的商继续整除2,直至商为0为止。然后,从最后一个余数读到第一个余数,就是当前十进制数对应的二进制数。具体如图:

整型数值对象构造函数:int()
该函数可以通过根据传入的参数创建一个整型数值对象。通常在其中会传入字符型数字,将其转化为整型数值对象。
注意,该函数内部可传的参数类型为:
字符型整型:例如int(‘123’),返回结果为整型数值对象123; 浮点型:例如int(1.23),返回结果为整型数值对象1,所以,此时如果int函数内传入的是浮点型数值对象,相当于下取整。
但是,该函数内部不能传入字符型浮点数值对象,会报错。例如:int(‘1.23’),执行后不会返回结果,而是报出typeerror错误。
一般地,当程序中需要输入整型数值对象并参与算法运算的情况下,一般我们搭配input()函数返回的输入的字符型数值对象进行使用,固定套路如下:
int(input())
小整数对象池
整型,为常见的基本数据类型,所以在实际的开发中一定是躲避不了使用的,且使用量非常大。但是我们说,整型只是一种数据类型,其实质对应任何一个整型数值对象。所以,在实际应用的过程中,因为需要大量的创建并使用整型数值对象,这就会造成内存的负担问题。为此,为了简化使用过程中的效率问题,Cpython解释器中对于常用的整数:-5到256,将其永远存储在小整数对象池中,这样的话如果需要使用-5到256之间的任何整型数值对象,无需创建,直接引用即可,且小整数对象池不会被释放,且可以被重复使用。
浮点型float
浮点型用于表示小数数值对象,包含正数,0.0,和负数
浮点型字面值
小数:1.0,2.5,0.42 科学计数法:浮点值 e/E 指数 1.25e-2(相当于0.0125) 1.86545e5(相当于186545.0)
浮点型数值对象构造函数:float()
该函数可以通过根据传入的参数创建一个浮点型数值对象。
复数类型complex
由实部与虚部组成的数字。
复数字面值
字面值表示如下:1j 1+1j 2-3j
复数数值对象构造函数:complex()
复数对象构造函数:complex()
布尔类型boolean
用来表示真和假的类型。通常应用于逻辑运算。
布尔类型字面值
True:表示真(条件满足或成立),对应数值1 False:表示假(条件不满足或不成立),对应数值0
布尔类型数值对象构造函数:boolean()
该函数可以通过传入的参数创建一个布尔值对象
其他类型(简单介绍,下文详解)
None(空值)
表示不存在的特殊对象。通常将其用在占位(初始值)或解除对象引用关系上。
字符串str
用来记录文本信息,即表示一段文本内容。字面值通常采用‘’或“”表示,也有‘’‘’‘’或“”“”“”的表示方法。
列表list
由一系列数据组成的可变序列。列表为常见数据结构中的逻辑结构——线性表的物理实现。
元组tuple
由一系列变量组成的不可变序列。列表为常见数据结构中的逻辑结构——线性表的物理实现,一般对应受限线性表。
字典dict
由一系列键值对组成的可变散列容器。何谓散列,即对键进行哈希运算,确定在内存中的存储位置,每条数据存储无先后顺序。同时键必须唯一且必须为不可变类型数据对象。
集合 set
由一系列不重复的不可变类型变量组成的可变散列容器,相当于只有键没有值的字典。
固定集合frozenset
由一系列不重复的不可变类型变量组成的不可变散列容器,即不可变的集合。
字节串bytes
存储以字节为单位的数据,字节串为不可变的字节序列,通常在文件读写中大量应用。
以上常见其他类型在这里不做详细赘述,文后会针对每一种其他类型数据对象做详细介绍。
运算符及表达式
运算符定义
运算符用于执行程序代码运算,会针对一个以上操作数项目来进行运算。
算术运算符
+ 加法
- 减法
* 乘法
/ 除法:结果为浮点数
// 地板除:除的结果去掉小数部分(即下取整)
% 求余
** 幂运算
优先级从高到低: ()
**
* / % //
+ -
复合算数运算符
y += x 等同于 y = y + x
y -= x 等同于 y = y - x
y *= x 等同于 y = y * x
y /= x 等同于 y = y / x
y //= x 等同于 y = y // x
y %= x 等同于 y = y % x
y **= x 等同于 y = y ** x
注意:y+=x其实与y=y+x并不一样!
原因: 跟数据对象的可变还是不可变有关。 不可变对象的值永远是刚开始创建的值,对该对象做的任何操作都会导致一个新对象的创建。 可变对象的值可以通过某些操作动态的改变,将可变对象赋给另一个变量时,两个变量共享同一个实例对象。 至于到底y+=x与y=y+x为什么不同,原因在于类内部对于两种运算符的重写上的不同。+操作需要重写__add__方法,而+=操作会优先重写或调用__iadd__方法,如果没有才会调用__add__方法。 __add__方法接收两个参数,返回他们的和,但两个参数本身不改变。 __iadd__方法将第二个参数加到第一个参数上,不可变对象显然没有__iadd__方法。
比较运算符
< 小于
<= 小于等于
> 大于
>= 大于等于
== 等于
!= 不等于
注意:比较运算符一定返回布尔类型的值。
逻辑运算符
与and
表示并且的关系,一假俱假。
示例:
True and True # True
True and False # False
False and True # False
False and False # False
或or
表示或者的关系,一真俱真
示例:
True or True # True
True or False # True
False or True # True
False or False # False
非 not
表示取反
示例:
not True # 返回False
not False # 返回True
短路逻辑:
对于逻辑与,一个为假整体都为假;
对于逻辑或,一个为真整体都为真。
is、is not 运算符
语法:
x is y
x is not y
作用:
is 用于判断两个对象是否是同一个对象,是时返回True,否则返回False。
is not 的作用与is相反
in 、not in 运算符
语法:
数据 in 序列
数据 not in 序列
作用:
如果在指定的序列中找到值,返回bool类型。
表达式
表达式为一条可以运算的语句,通常由数据及其各自运算组成。表达式可以被执行,执行完毕后会返回一定的结果。
流程控制语句
行
物理行:程序员编写代码的行。
逻辑行:python解释器需要执行的指令。
建议一个逻辑行在一个物理行上。 如果一个物理行中使用多个逻辑行,需要使用分号;隔开。 如果逻辑行过长,可以使用隐式换行或显式换行。
隐式换行:所有括号的内容换行,称为隐式换行
括号包括: () [] {} 三种
显式换行:通过折行符 \ (反斜杠)换行,必须放在一行的末尾,目的是告诉解释器,下一行也是本行的语句。
pass语句
通常用来填充语法空白。Python的PEP8规范比较严谨,如果某些语法处规定必须有代码但是实际应用中此处无需代码,则可以使用pass进行填充。
流程控制语句
if语句
语法:
if 条件表达式:
语句块
此处的语法含义为:如果满足条件,即条件表达式的执行后返回结果为True,就执行语句块。
if…else…语句
语法:
if 条件表达式:
语句块1
else:
语句块2
此处的语法含义为:如果满足条件,即条件表达式执行后返回结果为True,就执行语句块1,否则(else)执行语句块2
if…elif…else语句
语法:
if 条件表达式1:
语句块1
elif 条件表达式2:
语句块2
…
else:
语句块n
此处的语法含义为:如果满足条件1,即条件表达式1执行后返回结果为True,就执行语句块1,否则如果(elif)满足条件2,即条件表达式2执行后返回结果为False,就执行语句块2,否则,执行语句块n。
注意:elif子句可以有0个或多个,else子句可以有0个或1个,且必须放在if语句的最后。
循环语句
while循环语句
作用
可以让一段代码在满足某一条件的情况下反复的,重复的执行。
语法
while 条件表达式:
语句块1(循环语句块)
else:
语句块2
此处语法的含义为:当满足条件表达式,即条件表达式返回结果为True,循环执行语句块1,否则,执行语句块2
注意:
else子句可以省略也可以存在;在循环语句内用break终止循环时,else子句将不执行。
一般地,我们首选让循环自动的、“优雅”的结束循环,即一般我们首选让条件表达式在某一遍循环结束后下一次运算返回的结果自动的由True变为False,进而自动的结束当前循环。
for环语句
作用
for循环常用于对可迭代对象的遍历操作,常用于从可迭代对象中迭代的存取对应的数据元素。可迭代对象是指能够依次的获取数据元素的对象。比如序列和容器
语法
for 循环变量 in 可迭代对象:
语句块1
else:
语句块2
注意:
else子句可以省略;在循环体内用break语句终止循环时,else子句将不执行。
对比while语句和for语句
while循环:循环的开始需要在满足一定条件(条件表达式返回值为True)的情况下进行;循环的次数往往取决于条件表达式何时返回值变为False;循环的结束既可以自动结束,也可以使用break语句强制循环终止;其else子句可写可不写。
for 循环:循环的开始无需满足一定条件,但会通过指定一个固定的循环范围的方式开始其循环;循环的次数直接取决于对于可迭代对象的遍历次数;循环的结束大部分情况下自动终止(即循环遍历到可迭代对象的最后一个元素即终止),当然也可以使用break语句强制终止;其else子句可写可不写。
死循环loop
死循环是指没有终止条件的循环,即循环一旦开始无法自动终止的循环,除非通过杀死系统进程的方式或强制关机重启,否则将一直循环下去的循环。死循环的形成往往是因为条件表达式的返回值不会再任何情况下由True变为False或遍历了一个无限元素个数的可迭代对象造成的。死循环对系统及电脑硬件尤其CPU的危害非常大。基本程序一旦进入死循环,CPU占用率会在短时间内达到98%以上,死循环保持太久,会对CPU造成一定的损坏。在应用循环时,一定要避免死循环的发生。
range()函数
作用:
用来创建一个生成一系列整数的可迭代对象(也叫整数序列生成器)。
语法:
range(开始点,结束点,间隔)
说明:
函数返回的可迭代对象可以用for取出其中的元素
返回的数字不包含结束点
开始点默认为0
间隔(步长)默认值为1
跳转语句
break
跳出循环体,后面的代码不再执行。 可以让while语句的else部分不执行。
continue
跳过本次,继续下次循环。


