第一章 Python入门
什么是计算机语言
计算机就是一台用来计算机的机器,人让计算机干什么计算机就得干什么! 需要通过计算机的语言来控制计算机(编程语言)! 计算机语言其实和人类的语言没有本质的区别,不同点就是交流的主体不同! 计算机语言发展经历了三个阶段: 机器语言 - 机器语言通过二进制编码来编写程序 - 执行效率好,编写起来太麻烦 符号语言(汇编) - 使用符号来代替机器码 - 编写程序时,不需要使用二进制,而是直接编写符号 - 编写完成后,需要将符号转换为机器码,然后再由计算机执行 符号转换为机器码的过程称为汇编 - 将机器码转换为符号的过程,称为反汇编 - 汇编语言一般只适用于某些硬件,兼容性比较差 高级语言 - 高级语言的语法基本和现在英语语法类似,并且和硬件的关系没有那么紧密了 - 也就是说我们通过高级语言开发程序可以在不同的硬件系统中执行 - 并且高级语言学习起来也更加的容易,现在我们知道的语言基本都是高级语言 - C、C++、C#、Java、JavaScript、Python 。。。
编译型语言和解释型语言
计算机只能识别二进制编码(机器码),所以任何的语言在交由计算机执行时必须要先转换为机器码, 也就是像 print('hello') 必需要转换为类似 1010101 这样的机器码 根据转换时机的不同,语言分成了两大类: 编译型语言 - C语言 - 编译型语言,会在代码执行前将代码编译为机器码,然后将机器码交由计算机执行 - a(源码) --编译--> b(编译后的机器码) - 特点: 执行速度特别快 跨平台性比较差 解释型语言 - Python JS Java - 解释型语言,不会在执行前对代码进行编译,而是在执行的同时一边执行一边编译 - a(源码)--解释器--> 解释执行 - 特点: 执行速度比较慢 跨平台性比较好
Python的介绍
Python是解释型语言 Python(英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/),是一种广泛使用的高级编程语言,属于通用型编程语言,由吉多·范罗苏姆创造,第一版发布于1991年。可以视之为一种改良(加入一些其他编程语言的优点,如面向对象)的LISP。作为一种解释型语言,Python的设计哲学强调代码的可读性和简洁的语法(尤其是使用空格缩进划分代码块,而非使用大括号或者关键词)。相比于C++或Java,Python让开发者能够用更少的代码表达想法。不管是小型还是大型程序,该语言都试图让程序的结构清晰明了。 Life is short you need Python (人生苦短,我用Python) Python的用途: WEB应用 Facebook 豆瓣 。。。 爬虫程序 科学计算 自动化运维 大数据(数据清洗) 云计算 桌面软件/游戏 人工智能 。。。
Python开发环境搭建
开发环境搭建就是安装Python的解释器 Python的解释器分类: CPython(官方) 用c语言编写的Python解释器 PyPy 用Python语言编写的Python解释器 IronPython 用.net编写的Python解释器 Jython 用Java编写的Python解释器 步骤: 1.下载安装包 python-3.6.5.exe - 3.x - 2.x 2.安装(傻瓜式安装) 3.打开命令行窗口,输入python 出现如下内容 Python 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 16:07:46) [MSC v.1900 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>>
Python的交互界面
当我们通过命令行来输入Python,所进入到的界面就是Python的交互界面 结构: 版本和版权声明: Python 3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 16:07:46) [MSC v.1900 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. 命令提示符: >>> 在命令提示符后可以直接输入Python的指令!输入完的指令将会被Python的解释器立即执行! 安装Python的同时,会自动安装一个Python的开发工具IDLE,通过IDLE也可以进入到交互模式 但是不同的是,在IDLE中可以通过TAB键来查看语句的提示。 IDLE实际上就是一个交互界面,但是他可以有一些简单的提示,并且可以将代码保存 交互模式只能你输入一行代码,它就是执行一行,所以他并不适用于我们日常的开发! 仅可以用来做一些日常的简单的测试! 我们一般会将Python代码编写到一个py文件中,然后通过python指令来执行文件中的代码 练习: 自己尝试创建一个py文件,并向文件中写入python打印语句(print...) 然后执行该文件。 如果你的系统的扩展名无法修改,请尝试自行baidu!
Python和Sublime的整合
1.在Sublime中执行Python代码,ctrl + b 自动在Sublime内置的控制台中执行 这种执行方式,在某些版本的Sublime中对中文支持不好,并且不能使用input()函数 2.使用SublimeREPL来运行python代码 安装完成,设置快捷键,希望按f5则自动执行当前的Python代码 { "keys": ["f5"], "caption": "SublimeREPL:Python","command": "run_existing_window_command", "args":{"id": "repl_python_run","file": "config/Python/Main.sublime-menu"}},
几个概念
1.表达式 表达式就是一个类似于数学公式的东西 比如:10 + 5 8 - 4 表达式一般仅仅用了计算一些结果,不会对程序产生实质性的影响 如果在交互模式中输入一个表达式,解释器会自动将表达式的结果输出 2.语句 在程序中语句一般需要完成某种功能,比如打印信息、获取信息、为变量赋值。。。 比如: print() input() a = 10 语句的执行一般会对程序产生一定的影响 在交互模式中不一定会输出语句的执行结果 3.程序(program) 程序就是由一条一条的语句和一条一条的表达式构成的。 4.函数(function) 函数就是一种语句,函数专门用来完成特定的功能 函数长的形如:xxx() 函数的分类: 内置函数 - 由Python解释器提供的函数,可以在Python中直接使用 自定义函数 - 由程序员自主的创建的函数 当我们需要完成某个功能时,就可以去调用内置函数,或者自定义函数 函数的两个要素: 参数 - ()中的内容就是函数的参数 - 函数中可以没有参数,也可以有多个参数,多个参数之间使用,隔开 返回值 - 返回值是函数的返回结果,不是所有的函数都有返回值
基本语法
1.在Python中严格区分大小写 2.Python中的每一行就是一条语句,每条语句以换行结束 3.Python中每一行语句不要过长(规范中建议每行不要超过80个字符) "rulers":[80], 4.一条语句可以分多行编写,多行编写时语句后边以\结尾 5.Python是缩进严格的语言,所以在Python中不要随便写缩进 6.在Python中使用#来表示注释,#后的内容都属于注释,注释的内容将会被解释器所忽略 我们可以通过注释来对程序进行解释说明,一定要养成良好的编写注释的习惯 注释要求简单明了,一般习惯上#后边会跟着一个空格
字面量和变量
字面量就是一个一个的值,比如:1,2,3,4,5,6,‘HELLO’ 字面量所表示的意思就是它的字面的值,在程序中可以直接使用字面量 变量(variable)变量可以用来保存字面量,并且变量中保存的字面量是不定的 变量本身没有任何意思,它会根据不同的字面量表示不同的意思 一般我们在开发时,很少直接使用字面量,都是将字面量保存到变量中,通过变量来引用字面量
变量和标识符
数据类型
数据类型指的就是变量的值得类型,也就是可以为变量赋哪些值 数值 整型 布尔值 浮点型 复数 字符串 空值
类型检查
对象(object)
- Python是一门面向对象的语言 - 一切皆对象! - 程序运行当中,所有的数据都是存储到内存当中然后再运行的! - 对象就是内存中专门用来存储指定数据的一块区域 - 对象实际上就是一个容器,专门用来存储数据 - 像我们之前学习的数值、字符串、布尔值、None都是对象 - 参考 图1
对象的结构
- 每个对象中都要保存三种数据 - id(标识) > id用来标识对象的唯一性,每一个对象都有唯一的id > 对象的id就相当于人的身份证号一样 > 可以通过id()函数来查看对象的id > id是由解析器生成的,在CPython中,id就是对象的内存地址 > 对象一旦创建,则它的id永远不能再改变 - type(类型) > 类型用来标识当前对象所属的类型 > 比如:int str float bool 。。。 > 类型决定了对象有哪些功能 > 通过type()函数来查看对象的类型 > Python是一门强类型的语言,对象一旦创建类型便不能修改 - value(值) > 值就是对象中存储的具体的数据 > 对于有些对象值是可以改变的 > 对象分成两大类,可变对象 不可变对象 可变对象的值可以改变 不可变对象的值不能改变,之前学习的对象都是不可变对象 - 参考 图2 练习:尝试自己画一下对象的内存结构。
变量和对象
- 对象并没有直接存储到变量中,在Python中变量更像是给对象起了一个别名 - 变量中存储的不是对象的值,而是对象的id(内存地址), 当我们使用变量时,实际上就是在通过对象id在查找对象 - 变量中保存的对象,只有在为变量重新赋值时才会改变 - 变量和变量之间是相互独立的,修改一个变量不会影响另一个变量 - 参考 图3
类型转换
- 所谓的类型转换,将一个类型的对象转换为其他对象 - 类型转换不是改变对象本身的类型,而是根据当前对象的值创建一个新对象
运算符(操作符)
- 运算符可以对一个值或多个值进行运算或各种操作 - 比如 + 、-、= 都属于运算符 - 运算符的分类: 1.算术运算符 2.赋值运算符 3.比较运算符(关系运算符) 4.逻辑运算符 5.条件运算符(三元运算符)
第二章 流程控制语句
简介
Python代码在执行时是按照自上向下顺序执行的。 通过流程控制语句,可以改变程序的执行顺序,也可以让指定的程序反复执行多次 流程控制语句分成两大类:条件判断语句,循环语句
条件判断语句(if语句)
练习1: 编写一个程序,获取一个用户输入的整数。然后通过程序显示这个数是奇数还是偶数。 练习2: 编写一个程序,检查任意一个年份是否是闰年。 如果一个年份可以被4整除不能被100整除,或者可以被400整除,这个年份就是闰年 练习3: 我家的狗5岁了,5岁的狗相当于多大年龄的人呢? 其实非常简单,狗的前两年每一年相当于人类的10.5岁,然后每增加一年就增加四岁。 那么5岁的狗相等于人类的年龄就应该是10.5+10.5+4+4+4 = 33岁 编写一个程序,获取用户输入的狗的年龄,然后通过程序显示其相当于人类的年龄。 如果用户输入负数,请显示一个提示信息 练习4: 从键盘输入小明的期末成绩: 当成绩为100时,'奖励一辆BMW' 当成绩为[80-99]时,'奖励一台iphone' 当成绩为[60-79]时,'奖励一本参考书' 其他时,什么奖励也没有 练习5: 大家都知道,男大当婚,女大当嫁。那么女方家长要嫁女儿,当然要提出一定的条件: 高:180cm以上; 富:1000万以上; 帅:500以上; 如果这三个条件同时满足,则:'我一定要嫁给他' 如果三个条件有为真的情况,则:'嫁吧,比上不足,比下有余。' 如果三个条件都不满足,则:'不嫁!'
循环语句
练习1: 求100以内所有的奇数之和 练习2: 求100以内所有7的倍数之和,以及个数 练习3: 水仙花数是指一个 n 位数(n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身(例如:1**3 + 5**3 + 3**3 = 153)。 求1000以内所有的水仙花数 练习4: 获取用户输入的任意数,判断其是否是质数。质数是只能被1和它自身整除的数,1不是质数也不是合数。
循环嵌套
练习1: 打印99乘法表 1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 ... 9*9=81 练习2: 求100以内所有的质数
第三章 序列
列表(list)
- 列表是Python中的一个对象 - 对象(object)就是内存中专门用来存储数据的一块区域 - 之前我们学习的对象,像数值,它只能保存一个单一的数据 - 列表中可以保存多个有序的数据 - 列表是用来存储对象的对象 - 列表的使用: 1.列表的创建 2.操作列表中的数据 - 练习: - 创建一个列表,在列表中保存你最好的5个朋友的名字 然后分别通过索引来获取每一个朋友的名字
序列(sequence)
- 序列是Python中最基本的一种数据结构 - 数据结构指计算机中数据存储的方式 - 序列用于保存一组有序的数据,所有的数据在序列当中都有一个唯一的位置(索引) 并且序列中的数据会按照添加的顺序来分配索引 - 序列的分类: 可变序列(序列中的元素可以改变): > 列表(list) 不可变序列(序列中的元素不能改变): > 字符串(str) > 元组(tuple) - 刚刚我们所讲所有操作都是序列的通用操作01 02 03 三个文件中的操作
EMS(Employee Manager System 员工管理系统) 练习
- 做命令行版本的员工管理系统 - 功能: 四个: 1.查询 - 显示当前系统当中的所有员工 2.添加 - 将员工添加到当前系统中 3.删除 - 将员工从系统当中删除 4.退出 - 退出系统 - 员工信息要保存到哪里? 列表,在系统中应该有一个列表,专门用来保存所有员工信息的
可变对象
- 每个对象中都保存了三个数据: id(标识) type(类型) value(值) - 列表就是一个可变对象 a = [1,2,3] - a[0] = 10 (改对象) - 这个操作是在通过变量去修改对象的值 - 这种操作不会改变变量所指向的对象 - 当我们去修改对象时,如果有其他变量也指向了该对象,则修改也会在其他的变量中体现 - a = [4,5,6] (改变量) - 这个操作是在给变量重新赋值 - 这种操作会改变变量所指向的对象 - 为一个变量重新赋值时,不会影响其他的变量 - 一般只有在为变量赋值时才是修改变量,其余的都是修改对象
字典(dict)
- 字典属于一种新的数据结构,称为映射(mapping) - 字典的作用和列表类似,都是用来存储对象的容器 - 列表存储数据的性能很好,但是查询数据的性能的很差 - 在字典中每一个元素都有一个唯一的名字,通过这个唯一的名字可以快速的查找到指定的元素 - 在查询元素时,字典的效率是非常快的 - 在字典中可以保存多个对象,每个对象都会有一个唯一的名字 这个唯一的名字,我们称其为键(key),通过key可以快速的查询value 这个对象,我们称其为值(value) 所以字典,我们也称为叫做键值对(key-value)结构 每个字典中都可以有多个键值对,而每一个键值对我们称其为一项(item)
集合(set)
- 集合和列表非常相似 - 不同点: 1.集合中只能存储不可变对象 2.集合中存储的对象是无序(不是按照元素的插入顺序保存) 3.集合中不能出现重复的元素
第四章 函数
函数简介(function)
- 函数也是一个对象 - 对象是内存中专门用来存储数据的一块区域 - 函数可以用来保存一些可执行的代码,并且可以在需要时,对这些语句进行多次的调用 - 创建函数: def 函数名([形参1,形参2,...形参n]) : 代码块 - 函数名必须要符号标识符的规范 (可以包含字母、数字、下划线、但是不能以数字开头) - 函数中保存的代码不会立即执行,需要调用函数代码才会执行 - 调用函数: 函数对象() - 定义函数一般都是要实现某种功能的
函数的参数
- 在定义函数时,可以在函数名后的()中定义数量不等的形参, 多个形参之间使用,隔开 - 形参(形式参数),定义形参就相当于在函数内部声明了变量,但是并不赋值 - 实参(实际参数) - 如果函数定义时,指定了形参,那么在调用函数时也必须传递实参, 实参将会赋值给对应的形参,简单来说,有几个形参就得传几个实参 - 练习1: 定义一个函数,可以用来求任意三个数的乘积 - 练习2: 定义一个函数,可以根据不同的用户名显示不同的欢迎信息
函数式编程
- 在Python中,函数是一等对象 - 一等对象一般都会具有如下特点: ① 对象是在运行时创建的 ② 能赋值给变量或作为数据结构中的元素 ③ 能作为参数传递 ④ 能作为返回值返回 - 高阶函数 - 高阶函数至少要符合以下两个特点中的一个 ① 接收一个或多个函数作为参数 ② 将函数作为返回值返回 - 装饰器
第五章 对象(Object)
什么是对象?
- 对象是内存中专门用来存储数据的一块区域。 - 对象中可以存放各种数据(比如:数字、布尔值、代码) - 对象由三部分组成: 1.对象的标识(id) 2.对象的类型(type) 3.对象的值(value)
面向对象(oop)
- Python是一门面向对象的编程语言 - 所谓的面向对象的语言,简单理解就是语言中的所有操作都是通过对象来进行的 - 面向过程的编程的语言 - 面向过程指将我们的程序的逻辑分解为一个一个的步骤, 通过对每个步骤的抽象,来完成程序 - 例子: - 孩子上学 1.妈妈起床 2.妈妈上厕所 3.妈妈洗漱 4.妈妈做早饭 5.妈妈叫孩子起床 6.孩子上厕所 7.孩子要洗漱 8.孩子吃饭 9.孩子背着书包上学校 - 面向过程的编程思想将一个功能分解为一个一个小的步骤, 我们通过完成一个一个的小的步骤来完成一个程序 - 这种编程方式,符合我们人类的思维,编写起来相对比较简单 - 但是这种方式编写代码的往往只适用于一个功能, 如果要在实现别的功能,即使功能相差极小,也往往要重新编写代码, 所以它可复用性比较低,并且难于维护 - 面向对象的编程语言 - 面向对象的编程语言,关注的是对象,而不关注过程 - 对于面向对象的语言来说,一切都是对象 - 例子: 1.孩他妈起床叫孩子上学 - 面向对象的编程思想,将所有的功能统一保存到对应的对象中 比如,妈妈功能保存到妈妈的对象中,孩子的功能保存到孩子对象中 要使用某个功能,直接找到对应的对象即可 - 这种方式编写的代码,比较容易阅读,并且比较易于维护,容易复用。 - 但是这种方式编写,不太符合常规的思维,编写起来稍微麻烦一点 - 简单归纳一下,面向对象的思想 1.找对象 2.搞对象
类(class)
- 我们目前所学习的对象都是Python内置的对象 - 但是内置对象并不能满足所有的需求,所以我们在开发中经常需要自定义一些对象 - 类,简单理解它就相当于一个图纸。在程序中我们需要根据类来创建对象 - 类就是对象的图纸! - 我们也称对象是类的实例(instance) - 如果多个对象是通过一个类创建的,我们称这些对象是一类对象 - 像 int() float() bool() str() list() dict() .... 这些都是类 - a = int(10) # 创建一个int类的实例 等价于 a = 10 - 我们自定义的类都需要使用大写字母开头,使用大驼峰命名法(帕斯卡命名法)来对类命名 - 类也是一个对象! - 类就是一个用来创建对象的对象! - 类是type类型的对象,定义类实际上就是定义了一个type类型的对象
使用类创建对象的流程(参考图1)
1.创建一个变量 2.在内存中创建一个新对象 3.将对象的id赋值给变量
类的定义(参考图2)
- 类和对象都是对现实生活中的事物或程序中的内容的抽象 - 实际上所有的事物都由两部分构成: 1.数据(属性) 2.行为(方法) - 在类的代码块中,我们可以定义变量和函数, 变量会成为该类实例的公共属性,所有的该类实例都可以通过 对象.属性名 的形式访问 函数会成为该类实例的公共方法,所有该类实例都可以通过 对象.方法名() 的形式调用方法 - 注意: 方法调用时,第一个参数由解析器自动传递,所以定义方法时,至少要定义一个形参! - 实例为什么能访问到类中的属性和方法 类中定义的属性和方法都是公共的,任何该类实例都可以访问 - 属性和方法查找的流程 当我们调用一个对象的属性时,解析器会先在当前对象中寻找是否含有该属性, 如果有,则直接返回当前的对象的属性值, 如果没有,则去当前对象的类对象中去寻找,如果有则返回类对象的属性值, 如果类对象中依然没有,则报错! - 类对象和实例对象中都可以保存属性(方法) - 如果这个属性(方法)是所有的实例共享的,则应该将其保存到类对象中 - 如果这个属性(方法)是某个实例独有,则应该保存到实例对象中 - 一般情况下,属性保存到实例对象中 而方法需要保存到类对象中
创建对象的流程
p1 = Person()的运行流程 1.创建一个变量 2.在内存中创建一个新对象 3.__init__(self)方法执行 4.将对象的id赋值给变量
类的基本结构
class 类名([父类]) : 公共的属性... # 对象的初始化方法 def __init__(self,...): ... # 其他的方法 def method_1(self,...): ... def method_2(self,...): ... ... - 练习: 尝试自定义一个表示狗的类(Dog) 属性: name age gender height ... 方法: jiao() yao() run() ...
第六章 异常和文件
异常
程序在运行过程当中,不可避免的会出现一些错误,比如: 使用了没有赋值过的变量 使用了不存在的索引 除0 ... 这些错误在程序中,我们称其为异常。 程序运行过程中,一旦出现异常将会导致程序立即终止,异常以后的代码全部都不会执行!
处理异常
程序运行时出现异常,目的并不是让我们的程序直接终止! Python是希望在出现异常时,我们可以编写代码来对异常进行处理! try语句 try: 代码块(可能出现错误的语句) except 异常类型 as 异常名: 代码块(出现错误以后的处理方式) except 异常类型 as 异常名: 代码块(出现错误以后的处理方式) except 异常类型 as 异常名: 代码块(出现错误以后的处理方式) else: 代码块(没出错时要执行的语句) finally: 代码块(该代码块总会执行) try是必须的 else语句有没有都行 except和finally至少有一个 可以将可能出错的代码放入到try语句,这样如果代码没有错误,则会正常执行, 如果出现错误,则会执行expect子句中的代码,这样我们就可以通过代码来处理异常 避免因为一个异常导致整个程序的终止
异常的传播(抛出异常)
当在函数中出现异常时,如果在函数中对异常进行了处理,则异常不会再继续传播, 如果函数中没有对异常进行处理,则异常会继续向函数调用处传播, 如果函数调用处处理了异常,则不再传播,如果没有处理则继续向调用处传播 直到传递到全局作用域(主模块)如果依然没有处理,则程序终止,并且显示异常信息 当程序运行过程中出现异常以后,所有的异常信息会被保存一个专门的异常对象中, 而异常传播时,实际上就是异常对象抛给了调用处 比如 : ZeroDivisionError类的对象专门用来表示除0的异常 NameError类的对象专门用来处理变量错误的异常 .... 在Python为我们提供了多个异常对象
抛出异常
- 可以使用 raise 语句来抛出异常, raise语句后需要跟一个异常类 或 异常的实例
文件(File)
- 通过Python程序来对计算机中的各种文件进行增删改查的操作 - I/O(Input / Output) - 操作文件的步骤: ① 打开文件 ② 对文件进行各种操作(读、写),然后保存 ③ 关闭文件