03 - Python核心讲堂
2022-01-07 14:59:50 3 举报
AI智能生成
涵盖Python核心语法,不仅仅是思导
作者其他创作
大纲/内容
教学目标
培养学员编程思维,学习方法
了解编程语言,熟悉Python编程
课程方法
学以致用
举一反三
问题自由探讨解决
核心篇
核心语法
概述
官方描述
无所不能的 Python
Python 的版本选择
搭建开发环境
环境安装
Python 的三种开发运行环境
Python 的运行原理
基础语法
程序构成
包(目录)
模块(文本文件)
程序语句
数据的存取
*字面量和变量
标识符
变量的命名、赋值、删除
数据的引用
栈内存
数据
堆内存
数据存储地址
垃圾回收机制
数据不被引用时,自动释放其存储空间
一切皆对象(object)
对象要素
标识(identity)
对象在内存中的存储地址
返回对象存储地址
id(object)
类型(type)
对象所属类型具有的属性和行为
返回对象所属类型
type(object)
值(value)
对象本质
一个内存块
拥有特定属性
支持所属类型的操作
内置帮助
dir
help
基本数据类型
数字类型
整型(int)
二进制
0b 或者 0B 开头,组成只有 0 和 1,如:0b101101
八进制
0o 或者 0O 开头,组成只有 0,1,2,3,4,5,6,7,如:0o135
十进制
无前缀,默认数值即为十进制,组成只有 0,1,2,3,4,5,6,7,8,9
十六进制
0x 或者 0X 开头,组成只有 0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,如:0x5d
浮点型(float)
十进制小数
123.4567,12.34567 * 10^1,1.234567 * 10^2
科学计数法
1.234567e2, 1.234567E2
复数(complex)
2 + 3j
实部:2
虚部:3j
字符串类型(str)
字符集
字符(文字和符号) ---> 字符编码 ---> 计算机存储
不同组织(国家)对字符的编码规范,如不同国家(地区)定义的语言规范
ASCII
作用:表语英语及西欧语言
位数:使用用7位表示的,表示128个字符
ISO 8859-1
作用:扩展ASCII,表示西欧、希腊语等
位数:使用8位表示,表示256个字符,兼容ASCII字符集
GB2312
作用:国家简体中文字符集,兼容ASCII
位数:使用2个字节表示,能表示7445个符号,包括6763个汉字,几乎覆盖所有高频率汉字
GBK
作用:它是GB2312的扩展,加入对繁体字的支持,兼容GB2312
位数:使用2个字节表示,可表示21886个字符
Unicode
作用:表示所有语言的字符,采用定长双字节(也有四字节的)编码,不兼容其它任何编码
编码方式:Unicode、UTF-8、UTF-16、UTF-32、UTF-7
UTF-8
作用:不定长编码,英文字母用一个字节表示,而汉字使用三个字节
创建方式
'string' 或者 "string":等效表示字符串,常用于短字符串表示,不能换行
'''string''' 或者 """string""":等效表示字符串,常用于长字符串表示,能换行 或者 表示块(文档)注释
r'string_with_escaped':屏蔽带有 转义字符 的特殊表示,常用于 路径字符串 中
转义字符
\
常用操作
拼接
string1 + string2
重复
string1 * n
格式化
somebody = "李小文"
say_hello = "向您问好!"
somebody_say_hello = "%s,%s" % (somebody, say_hello)
print(somebody_say_hello)
say_hello = "向您问好!"
somebody_say_hello = "%s,%s" % (somebody, say_hello)
print(somebody_say_hello)
%s:字符串占位
%d:整数占位
%f:浮点型占位
somebody = "李小文"
say_hello = "向您问好!"
somebody_say_hello = "{},{}".format(somebody, say_hello)
print(somebody_say_hello)
somebody_say_hello = "{0},{1},{1}".format(somebody, say_hello)
print(somebody_say_hello)
somebody_say_hello = "{first},{second}".format(first=somebody, second=say_hello)
print(somebody_say_hello)
somebody_say_hello = "{first},{second}".format(second=somebody, first=say_hello)
print(somebody_say_hello)
say_hello = "向您问好!"
somebody_say_hello = "{},{}".format(somebody, say_hello)
print(somebody_say_hello)
somebody_say_hello = "{0},{1},{1}".format(somebody, say_hello)
print(somebody_say_hello)
somebody_say_hello = "{first},{second}".format(first=somebody, second=say_hello)
print(somebody_say_hello)
somebody_say_hello = "{first},{second}".format(second=somebody, first=say_hello)
print(somebody_say_hello)
类型转换
自动转换
强制转换
datatype(object)
数据驻留机制
小数据池
[-5, 256]
短字符串池
单字符 或 只有标识符组成的字符串
运算符
操作数、运算符、表达式、语句
常见的运算符
算术
+ - * / % // **
赋值
= += -= *= /= %= //= **=
关系
< <= == >= > != is
== : 两个对象的值是否相同
两个长相相同的人,双胞胎
is : 检测两个对象是否内存地址相同
一个人拥有大名、小名、外号
布尔(逻辑)
and
连接两个布尔条件
且运算,返回布尔值
连接两个表达式
短路运算,返回第一个布尔值为False的表达式结果 或 最后一个表达式的结果
or
连接两个布尔条件
或运算,返回布尔值
连接两个表达式
短路运算,返回第一个布尔值为True的表达式结果 或 最后一个表达式的结果
not
非,取反
布尔型(bool)
True
False
输入/输出操作
输入(input)
输出(print)
学以致用
任务一:员工信息管理系统之员工信息列表(一)
任务描述:
1. 创建一个Python文件,用于存储核心代码
2. 在程序开头加入本程序描述性注释,包含信息:文件名、用途、作者、时间
3. 申明变量分别用于存储“姓名”、“性别”、“联系方式”、“出身年月”、“年龄”、“税前月收入”
4. 员工信息列表中至少包含3名以上的员工,员工与员工之间用40个“-”号分隔
任务二:个人所得税计算器
任务描述:用户输入月薪,程序返回”您需要交税xx元,剩余xx元。”排除专向扣除款项
最新版个人所得税计算方式:见附件"资料\2019最新工资个人所得税税率表.docx"
任务描述:
1. 创建一个Python文件,用于存储核心代码
2. 在程序开头加入本程序描述性注释,包含信息:文件名、用途、作者、时间
3. 申明变量分别用于存储“姓名”、“性别”、“联系方式”、“出身年月”、“年龄”、“税前月收入”
4. 员工信息列表中至少包含3名以上的员工,员工与员工之间用40个“-”号分隔
任务二:个人所得税计算器
任务描述:用户输入月薪,程序返回”您需要交税xx元,剩余xx元。”排除专向扣除款项
最新版个人所得税计算方式:见附件"资料\2019最新工资个人所得税税率表.docx"
程序设计基本结构
顺序结构
了解顺序结构
选择结构
if 的不同语法形式
单 if 语句
if - else 语句
运算符表示法
condition_is_true_expression if condition else condition_is_false_expression
多 if - else 语句
循环结构
while - else
for - else
range
continue , break
学以致用
任务二:员工信息管理系统之员工信息列表(二)
任务描述:为员工信息管理系统添加登录功能,登录账号为“admin”,密码为“1~10”之间的十进制随机数,用户有三次登录机会,登录成功后打印员工信息列表,并在任务一的基础上追加两个新列,用于表示“个人所得税”和“税后月收入”
最新版个人所得税计算方式:见附件"2019最新工资个人所得税税率表.docx"
任务描述:为员工信息管理系统添加登录功能,登录账号为“admin”,密码为“1~10”之间的十进制随机数,用户有三次登录机会,登录成功后打印员工信息列表,并在任务一的基础上追加两个新列,用于表示“个人所得税”和“税后月收入”
最新版个人所得税计算方式:见附件"2019最新工资个人所得税税率表.docx"
数据结构
概念
从个人书架到图书馆书架
计算机存储、组织数据的方式
序列
序列类型的体现
列表(list)
[item1, item2, item3, ...]
元组(tuple)
(item1, item2, item3, ...)
迭代器(range)
range(start, end, step)
文本序列(str)
"string content"
二进制序列(bytes, bytearray)
字节串(bytes)
b"content"
字节数组(bytearray)
bytearray()
列表类型话操作
不可变序列操作和可变序列的操作
通用序列
只能进行数据的 读取 操作
可变序列
可以进行数据的 增、删、改、查 操作
映射
映射类型的体现
字典(dict)
映射类型的操作
可以进行数据的 增、删、改、查 操作
集合
集合类型的体现
集合(set)
冻结集合(frozenset)
不可变集合和可变集合的操作
不可变集合
只能进行数据的 读取 操作
可变集合
可以进行数据的 增、删、改、查 操作
学以致用
任务三:员工信息管理系统之员工管理
任务描述:基于任务二,登录之后进入功能菜单页面,根据用户选择进行员工管理操作,优化员工信息存储方式,完成员工信息的录入、更新、删除、员工列表等功能。
任务描述:基于任务二,登录之后进入功能菜单页面,根据用户选择进行员工管理操作,优化员工信息存储方式,完成员工信息的录入、更新、删除、员工列表等功能。
函数&模块
函数概念
应用场景
程序封装、程序复用
函数的种类
按来源
内置函数
对象方法
一切皆对象,支持其所属类型的方法 --> object.method()
第三方函数
自定义函数
def function_name():
代码块
代码块
有无参数
无参函数
有参函数
有无返回值
只存在有返回值函数
调用关系
被调函数
主调函数
递归调用函数
一封邮件话函数
函数名:发邮件
send_email
形参:收件人, 邮件主题, 正文, 更多
待调用发邮件功能时接收具体数据的变量名
实参:"xxx@163.com", "来自函数的问候", "你好,伙伴。"
调用发邮件功能是传入的数据
函数的参数
positional-only:仅限位置,指只能按位置传入的参数。Python 中无定义仅限位置形参的语法。但是一些内置函数有仅限位置形参,如:divmod()
positional-or-keyword:位置或关键字,指定一个可以作为 位置参数 传入也可以作为 关键字参数 传入的实参,如:open()
keyword-only:仅限关键字,指定一个只能通过关键字传入的参数。该关键字的前一项为 *,如:sorted()
var-positional:可变数量的位置参数,参数可以是多个单项实参 或 序列实参(*序列实参),如:max()
var-keyword:可变数量的关键字参数,参数可以是多个单项实参(key=word) 或 字典实参(**字典实参),如:dict()
函数返回值
任何函数/方法都有一个默认的返回值 None,但可以通过 return value 自定义函数返回值
函数进阶
闭包函数
嵌套函数
lambda 表达式
lambda arguments: expression
也叫匿名函数,函数的一个简写,通常只有一个表达式,返回表达式的结果
模块概念
应用场景
更高级别程序封装、程序复用
模块的分类
按来源
内置模块(标准库)
第三放模块
第三方模块的安装
pip在线安装
离线安装
自定义模块
一个 .py 文件 或者 一个目录
模块的引用
引用方式
import module
通过 module.member 方式使用模块中的成员对象
from package import module
通过 module.member 方式使用模块中的成员对象
from module import *
引入模块 module 中的所有成员对象,不推荐使用
引用机制
import sys
# 存在于 sys.path 目录所包含的位置查找
print(sys.path)
# 存在于 sys.path 目录所包含的位置查找
print(sys.path)
自定义模块识别方法
路径追加法:sys.path.append()
自定义配置法
import site
# 将 自定义模块 的路径加入到一个 .pth 结尾的文件中,再将该文件放置在 特定目录 中,则任何项目中,都可直接使用。
site.getsitepackages() # 特定目录
# 将 自定义模块 的路径加入到一个 .pth 结尾的文件中,再将该文件放置在 特定目录 中,则任何项目中,都可直接使用。
site.getsitepackages() # 特定目录
命名空间
命名空间的作用
命名空间提供了在项目中避免名字冲突的一种方法
命名空间的种类
内置命名空间(built-in namesapce)
Python 语言内置的名称,比如函数名 abs、char 和异常名称 BaseException、Exception 等等
全局命名空间(global namesapce)
模块中定义的名称,记录了模块的变量,包括函数、类、其它导入的模块、模块级的变量和常量
局部命名空间(built-in namespace)
函数中定义的名称,记录了函数的变量,包括函数的参数和局部定义的变量
作用域详解
内建作用域(Built-in)
包含了内建的变量/关键字等
全局作用域(Global)
当前脚本的最外层,比如当前模块的全局变量
闭包外函数作用域(Enclosing)
包含了非局部(non-local)也非全局(non-global)的变量。比如两个嵌套函数,一个函数(或类) A 里面又包含了一个函数 B ,那么对于 B 中的名称来说 A 中的作用域就为 nonlocal。
局部作用域(Local)
最内层,包含局部变量,比如一个函数/方法内部
学以致用
任务四:员工信息管理系统之员工管理
任务描述:基于任务三,利用函数来组织代码逻辑,优化程序实现,扩展员工列表可按姓名或税后收入升序或降序输出。
任务五:员工信息管理系统之员工管理
任务描述:基于任务四,将登录场景业务逻辑封装到 login.py 模块中,将员工管理模块业务逻辑封装到 employee.py 模块中,将 main.py 模块作为系统的入口模块,并将数据持久化保存到文件中。
任务描述:基于任务三,利用函数来组织代码逻辑,优化程序实现,扩展员工列表可按姓名或税后收入升序或降序输出。
任务五:员工信息管理系统之员工管理
任务描述:基于任务四,将登录场景业务逻辑封装到 login.py 模块中,将员工管理模块业务逻辑封装到 employee.py 模块中,将 main.py 模块作为系统的入口模块,并将数据持久化保存到文件中。
面向对象
面向过程还是面向对象
从雕版印刷术到活字印刷术
将现实问题 转化为 面向对象编程(OOP)
分析问题,找对象(对象的属性、对象方法)
分析对象的关联关系
对象和类
类
针对对象提取 公有特征和公有行为的过程,抽象 --> class ClassName:
对象
类的一个具体化(实例化) --> ClassName()
类与类体
类名:抽象出来的类的名称,一般用 大驼峰命名
类属性:隶属于类的属性,可以通过类名访问,当然也可以通过该类的实例化对象访问
类方法:隶属于类的方法,可以通过类名访问,当然也可以通过该类的实例化对象访问
cls:类方法的第一个参数,默认就表示 类 本身,不需要手动传参
类的静态方法:隶属于类的方法,只是放在了类中而已,和函数一样
实例属性:隶属于对象的属性,通过实例访问
实例方法:隶属于对象的方法,通过实例访问
self:实例方法的第一个参数,默认就表示 实例 本身,不需要手动传参
创建对象的过程:
--> object(顶级类/基类) --> dir(object)
--> object(顶级类/基类) --> dir(object)
__new__():创建一个对象,自动调用,一般不需要重写
__init__():给对象添加特有的属性值
__method__():默认就继承了 object 的内置方法和内置属性,其中 __str__() 访问实例返回的内容,__del__() 销毁实例
面向对象特性
封装:对于类或实例的属性和方法的封装,为了防止外部的访问、修改
继承:抽象层次更高,针对多个子类的公有属性和公有方法再提取的过程,也是一种复用
多态:建立在继承之上的一种用法,不同 子类 的实例针对 同一个方法 所表现出来的 不一样性
组合:一个类的实例 会 作为组成另一个类的属性而存在,如:Computer --> CPU,HardDisk,...
依赖:一个类的实例要完成某些事情,需要通过 另一个类的实例来实现,如:我开车去苏州 --> 我 和 车
...
学以致用
任务六:奥特曼打怪兽
任务描述:模拟一个小游戏,编写一个Monster类和一个Hero类,都拥有血量和攻击力两个属性,并进行攻击。让两者每回合互相攻击一次,直到有一方死亡。每次攻击扣除对方的血量是攻击力加减N的随机值。
任务七:奥特曼打怪兽代码重构
任务描述:利用面向对象的三大特性,对奥特曼打怪兽代码进行重构。
任务描述:模拟一个小游戏,编写一个Monster类和一个Hero类,都拥有血量和攻击力两个属性,并进行攻击。让两者每回合互相攻击一次,直到有一方死亡。每次攻击扣除对方的血量是攻击力加减N的随机值。
任务七:奥特曼打怪兽代码重构
任务描述:利用面向对象的三大特性,对奥特曼打怪兽代码进行重构。
异常处理
单元测试
单元测试
异常错误
认识程序中的异常错误
能够从异常错误中捕获有用的消息
理解异常处理机制
熟悉常见的内置异常类型
异常处理
掌握异常处理的方式
try
包裹可能出现异常的代码块
except
捕获指定的异常类型,并提供处理方案
else
无异常出现执行的代码块
finnaly
无论是否出现异常,都会执行的代码块
raise
手动抛出异常
了解用户定义的异常
调试
掌握程序的调试技巧
断点
单步调试
单步跳过
单步跳出
单元测试
了解单元测试框架 unittest
熟悉 unittest 的工作原理
了解 unittest 中重要的概念
问题的解决思路
定位问题出现的原因 --> 有错误看错误提示,没有的看代码逻辑
技术问题 --> 技术点 --> 对应的官方文档 + 百度/谷歌 + 交流探讨
学以致用
任务八:员工信息管理系统之员工管理
任务描述:基于任务五,利用面向对象的思想,并从鲁棒性的角度,对代码进行容错性重构增强,并利用 unittest 框架,进行必要的单元测试。
任务描述:基于任务五,利用面向对象的思想,并从鲁棒性的角度,对代码进行容错性重构增强,并利用 unittest 框架,进行必要的单元测试。
模块和包
文件操作
单元测试
Python 之资源推荐
《Python 官方手册》
《Python 简明教程》
0 条评论
下一页