赞
踩
目录
python解释器的安装,验证是否安装成功
作用:代码转为字节码
作用:提供写代码的窗口
创建项目,创建文件的方法,各文件的解释
print("")
print('')
引号里面都是字符串
拼接字符串 +(两边空格更美观,但不要在代码前后空格)
单双引号转义:反斜杠(enter上面的斜杠)—单引号包双引号/双包单也可以
内部字符串换行:\n
三引号(打印跨行多的)
更换变量值且保存原变量值
不能有空格不能以数字开头
只能由文字,数字,下划线组成,不能有除下划线以外的其他符号
下划线命名法
驼峰命名法
win:快捷键:ctrl+/,多行多选,撤销同命令
三引号多行注释
len()函数
获取字符串的长度
其中空格数字符号都会占据一个长度,
但是转义字符不占:反斜杠不占,n占
""[]字符串索引
提取字符串某一位置上的单个字符(索引):
下标从0开始
(运算提到过)
True
False
大写开头
None
大写开头
需要一个变量但是还不知道该变量的值,就先赋值为None
不确定对象类型时,用type函数
判断数据类型的重要性:
数据类型的重要:决定你能在该类型的对象上可以使用什么函数
eg:len()函数给字符串正常,给整数报错
命令行模式和交互模式
在pycharm的python控制台/终端
输入一行执行一行
想看结果不用print
退出交互模式:quit()/ctrl+d
更常用命令行模式:交互模式的命令不会被保存
用变量获取input的返回值(返回值类型一律为字符串)
将一种类型的变量转变为另一种类型
要确保能这样转
建议缩进为四个空格
python会根据缩进判断该部分代码归谁管
if-if……
多条件判断
数据结构:把相关联的数据整合在一起
[]:表示空的列表,数据存放其间,用逗号分割
往列表添加数据:使用针对列表的方法—append
方法与函数的区别:
都是用来负责某个特定功能
方法使用时,在操作对象的后面加点
函数使用时,其括号放入对象
与其他数据类型的不同:
想要将已定义好的字符串的字母转化为大写打印:
但字符串本身不变
移除列表元素remove(),元素要确实存在在列表里
列表中可以存放不同类型的数据
求长度
返回列表里元素个数的数量
获取某个位置的元素,通过索引
对列表某一位置的元素赋值/覆盖
用于存储键值对
键是用来查找值的
{}:空的字典用一对花括号表示,将要存放的键值对用引号包住,
键值之间用冒号表示对应
键值对之间用逗号分隔
字典[键名]
列表不能做键:
列表为可变类型,所以无法做键值对的键
但是字典里有三个张伟年龄不一样,无法使用列表作为键,怎么区分?
使用元组
元组tuple:可存放多个元素,元组不可变
元组和列表的对比
():空的元组
[]:空的列表
不可变:不能使用列表能用的append()和remove()方法
元组在字典中的作用:
添加删除键值对
添加键
覆盖原键值
检查该键是否已经存在
删除键
len():查有多少键值对
在有明显的循环对象和次数的时候更加方便
具体方法
变量名叫什么无所谓,会被依次赋值为迭代对象里的每一个元素
获取字典的键
获取字典的值
获取字典的键值对
变量会被赋值为键和值组成的元组
for循环结合range
range表示整数序列
一个值
range只放一个值时,默认起始值为0
两个值
注意结束值
注意:结束值不在序列的范围内
三个值
range()可以包含三个数字
步长
加一个步长,表示每次跨几个数字:默认跨1
在条件何时结束未知的情况下使用while
实践练习:python21
参数索引格式化0,1
只看参数关键字
没看懂
gpa是浮点数,但是使用format方法时,数字不用转化为字符串去和其他字符串拼接
使用format:.2f
使用f-字符串:.3f
def关键字
表示开始定义函数
调用函数
定义函数时,代码不会被执行,调用函数时,代码才会被执行
局部变量
函数内部的变量-局部变量
无return:默认None
没有return时,默认返回None
不带返回值的函数
带返回值的函数
内置函数sum()计算列表中所有数字的和
python标准库里的其他模块
模块:一个python程序,引入模块后,其中的函数和变量都可以为我所用
除了自己定义函数也可以引入python模块里的函数
代码可简化为:
内置函数都是很常用的函数, median()不是很常用所以没有将它内置
import 模块名
from 模块 import 函数/变量
from 模块 import *
第三种不推荐
命名冲突
查看python标准库里的内置模块:
直接import
这些都可以直接import
查看引入的函数
查看引入的函数具体是怎么写的:win系统,按ctrl点击函数名
标准库模块不够使用:引入第三方库的模块(数量大,多样)
第三方库的模块:不是python官方提供的,其他程序员提供的
在引入之前需要先安装,也就是从互联网上下载好别人写好的模块
pypi.org
安装第三方库时,在pycharm终端输入:pip install 库的名字
之后通过import引入,就可以使用了
oop:面向对象编程
理解oop的概念,不涉及具体代码
过程:
负责完成某个具体任务的代码,之前的几乎都是面向过程,基本可以理解为函数
面向过程的核心:
把要实现的事情拆分成一个个步骤,一次完成
面向对象:
不会聚焦于事情的一步步的步骤
模拟真实世界,考虑各个对象有什么性质、能做什么事情
类和对象之间的关系
类是对象的模板,对象是类的实例
类相当于图纸,图纸上规定了
类定义了对象有何种属性和方法,而对象拥有的具体属性则可以不尽相同(后面提到的多态)。
属性
方法:
通过对象,获取与它绑定的属性,代码更加有逻辑,清晰,让人理解
另一个能和对象绑定的是:方法
对象拥有不同的性质(属性——放在类里面的变量),且能做不同的事情(方法——放在类里面的函数)
面向对象的特性:封装,继承,多态
封装(隐藏细节):
表示写类的人,将内部实现细节隐藏起来。
使用类的人,只能通过外部接口访问和使用
接口
接口:提供使用的,方法
eg:
已经有人写好了一个类,
你只需要知道这个类有什么方法,
方法有什么作用,
具体怎么用就足够了
而不需要知道方法是具体怎么写的(现实世界使用洗衣机,只需要知道按钮啥功能怎么用)
作用:
封装减少了我们对不必要细节的精力投入
继承(有层次的类)
面向对象编程允许创建有层次的类(儿子继承爸爸,爸爸继承爷爷)
类也可以有
子类父类
表示从属关系
作用
好处:减少代码的冗余—父类的属性、方法都可以被继承,不需要反复定义
多态(具体表现可不同):
同样的接口,因对象具体类的不同,而有不同的表现
小学生和大学生都要写作业,但是作业的内容和难度不同
故写作业的方法不能直接定义在父类里面,需要分别定义在子类里否则大小学生用一个方法
但是使用时不用管大小学生,直接调用这个方法,会因为所属类的不同,执行不同的写作业方法。
如果不使用面向对象,不定义类,使用if,还要判断很多具体……
创建属于自己的类
类名
Pascal命名风格
类名的命名方法:不同于命名变量时的下划线命名,这里使用Pascal命名风格
用首字母大写来分割单词
定义属性
定义一个类,思考该类的对象都有哪些属性
构造函数
构造函数:作用-定义实例对象的属性,必须被命名为init
__init___()
括号里面可以存放很多参数,但是第一个参数的位置会被self占据
self:
用于表示对象自身,帮把属性的值绑定在实例对象上
定义方法:
表示对象能做什么事情,和创建普通函数差不多
和创建普通函数的两个区别
定义的方法要写在class里面
和init一样,第一个参数被占用,self:用于表示对象自身
self
为什么在方法里面也要self: 在方法里面,去获取或修改和对象绑定的属性
字符串乘以数字
字符串乘以数字:把字符串重复这么多次
调用结果
方法的调用结果根据其属性不同而改变
调用类的方法:
对象.方法名(参数)
不需要手动把self传入
哺乳动物是父类
人和猫是子类
子类括号里面写上父类,可以继承父类的属性和方法
如果对子类创建对象,对象调用的方法/属性在子类里没有,则会调用父类的
如果子类里面有,则会优先使用子类里面的
super().init()
super().init(参数为:父类中除去self的参数)
因为直接init,则会只调用子类的属性的构造函数,忽略父类其他共有属性
但是将公有属性再添加在子类的属性构造函数里,又会造成代码重复
因此使用super
类各自定义的属性要放在def init()的参数列表里
A、B两个东西
编程时对文件的操作:对文件的读写(文档/图片/音乐——内容形式不同,但都属于文件)
文件归属于某一目录下
目录:看作是文件夹
用代码对文本进行操作
问题:代码如何找到那个文件—了解电脑操作系统的目录结构
不同系统不一样
Unix/Linux/macOS: /
目录结构像树根一样:根节点叫根目录—用/表示—一切的文件目录,都存放在根目录下面
win:分区:\
每个磁盘分区有自己的根目录,用分区名+\ 表示
虽然表示根目录的表示不一样
但是都可以用两种方法定位文件位置
绝对路径和相对路径
绝对路径:
Unix:
路径中的每个目录之间,用斜杠分隔,最后以目标文件或者目标目录结尾
win:
相对路径:
以参考位置出发,以出发的位置来看,相对于这个位置处于什么路径
.
. :用点表示参照文件当前所在的目录
..
.. :当前文件更上一层的父目录,目录之间用/还是\进行分隔,取决于操作系统
编辑
.和/的省略条件
.和/是可以省略的:处于同一父目录下
参数一
open(参数一:放文件的路径:相对/绝对,参数二:放模式,模式是一个字符串,参数三:encoding:表示编码方式,一般都是UTF-8,用这个编码方式读取文件)
参数二
常见的模式
r:只读
w:只写
a:附加
r+:读写
参数二也可以不写,不写的时候默认为读取模式r
r:只读,找不到文件报错
在读取模式下,程序找不到你传入的文件名时,报错如下:提示文件不存在
参数三:编码科普视频
encoding=“ ”
返回文件对象f
如果open函数执行成功,就会返回一个文件对象
后续可对其进行读取或者写入操作
读取方式和打印形式
针对读文件,文件对象有个read方法,调用后,一次性读取文件里面的所有内容,并以字符串形式进行返回
二次调用
程序会记录文件读到了哪个位置因此调用完一次read(),再对同一个文件再次调用read会读空字符串,并打印
一般用代码操作的文件都比较简单,内容都是简单的字符串
read(数字)
在文件很大的时候,不要读这个文件,读出来的内容,占很大的内存
给read传一个数字:只会读1-这个数个字节的文件内容
二次调用
下一次调用时,会接着这个字节继续往下读
读一行,并打印
多次调用
再调用,再读一行,
根据换行符来判断什么时候一行结尾,换行符也被视为读到的内容的一部分
如果读到结尾,readline和read一样,返回空字符串
结合while循环
一般会用while循环,判断不是空字符串就继续读下一行,注意,换行符也是有内容的
每行作为列表元素
readlines()读取全部,每行作为列表元素
和for循环结合
读完文件后要关闭文件
close()-常忘
open()-f.close()
编辑
with 文件自动关闭
经常忘记关闭文件的解决办法:with
with open() as f
如果文件不存在,不会像读文件时一样报错,会自动创建一个文件
三思而后行
打开文件进行写入,如果原文件已经存在,则会将原本内容清空
write()-调用时不会换行
手动添加换行符
编辑
如果不想把原文件清空
只想在其后附加内容,则不使用w模式,使用a附加模式
同w一样,文件如果不存在,会自动帮其创建
无论是w还是a,都无法读取原文件内容
既想读又想写的时候怎么办
r+:读写模式,而且调用的write是以追加的方式添加内容
捕捉程序异常,在程序出错之前进行预判,用我们想要的方式去处理错误情况
python测试:不应该牵一发动全身
错误类型非常多,写的代码越多,对不同的类型的错误越熟悉
通过测试的方式把能够避免的bug都揪出来,debug掉
对捕捉到的异常给出反应
try-except
try:后代码块跟可能出现异常的代码
except 异常类型:后跟应对的代码
except:不判断异常类型,对捕捉到的所有错误类型给出这个应对
运行时从上往下运行,如果第一个except语句 捕捉到了语句错误,后面的except语句则不会执行
和if elif很像
assert 布尔-终止测试
assert后面可以跟上任何的布尔表达式
测试时,在assert后面加上我们认为应该是正确的布尔表达式
问题:一旦测试出异常,代码终止,后续未被测试的也不能测试
unittest:测试专用库
所以一般使用专门做测试的库,他能一次性跑多个测试用例,并且能更直观的展现哪些测试用例通过了,哪些没有
unittest:常用的python单元测试库,python自带,无需额外安装
但是是库,需要使用import语句,将其引入测试程序
单元测试
单元测试:对软件中的最小可测试单元进行验证
验证某函数某方面表现是否符合预期
单独文件
将测试代码放在独立的文件里,不和要测试的功能混合
更清晰的划分实现代码和测试代码
在测试文件中,把要测试的函数或类引入进来
如果测试文件和被测试文件位于同一文件夹下,引入的语法:
form 文件名 import 函数名/类名
编辑
在创建的测试的类的下面可以定义不同的测试用例
每一个测试用例,都是类下面的一个方法
名字必须以test_开头
命名很关键,因为unittest这个库会自动搜寻test_开头的方法
并且只把test_开头的当成测试用例
写测试用例之前,先构想预期的被测函数的行为是什么样的
写完测试用例后,在pycharm的终端,输入:python -m unittest
这个库会自动搜寻所有,继承了unitest库里TestCase类的子类
运行所有以test_开头的方法,并展示测试结果
告诉运行了几个测试,每个点代表测试通过的意思
.
F
如果有一个测试没有通过,其中一个点就会变成F
针对性的方法进行测试
推荐使用更针对性的方法进行测试,因为失败时会给出更详细的原因
TestCase的setUp方法
额外的方法,进一步提高测试效率(耐心点,别慌,看代码)
TestCase的setUp方法,在每一次执行test_方法前都会先调用一次
所以通过setUp方法,把测试对象创建好
实践
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。