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