文章目录
- 1.函数
- 函数调用
- 函数返回值
- 函数参数
- 2.bug常见类型
- 粗心类型
- 知识点不扎实
- 思路不清
- 被动掉坑
- 常见异常类型
- 3.文件的读写
- 打开模式
- 文件对象常用方法
- with方法
- 4.os模块操作目录相关函数
- 5.打包成可执行文件
1.函数
函数调用
p89,笔记待补
函数返回值
1)如果函数没有返回值,return可以省略不写(函数体执行完毕后,不需要给调用处提供数据
2)函数的返回值只有一个,则直接返回这个值
3)函数的返回值有多个,返回的结果是个元组( , … )
函数参数
def fun(a,b,c): #abc在函数定义处,所以是形式参数
print('a=',a)
print('b=',b)
print('c=',c)
def fun(*arg1) #一个*,代表个数可变的位置形参,传参时个数不固定,可以变化
pass #pass是空语句,主要用于占位,在写程序结构的时候可以不报错
def fun(**arg2) #两个**,代表个数可变的关键字形参(a=11,b=22...)
def fun(a,b,*,c,d) #a,b可以位置传参,可以关键字传参,但是*之后的c、d只能关键字传参
#其他的函数定义形式
def fun(a,b,*,c,d,**args)
def fun(*args1,**args2)
def fun(a,b=10,*arg1,**arg2) #b=10是默认参数,*必须在**之前,否则报错
#函数的调用
fun(10,20,30) #函数调用时的参数传递,是位置传参
lst=[11,22,33]
#fun(lst)会报错,因为lst是一个参数,只是这个参数里面含有多个值
fun(*lst) #在lst前面加一个* → 在函数调用时,将列表中的每个元素都转换成位置参数传入,所以实际上是传了三个数
fun(a=100,c=300,b=200) #关键字传参,实际上传到fun内的结果就是a=100,b=200,c=300
2.bug常见类型
粗心类型
1.漏了末尾的冒号,如if语句,循环语句,else子句等
⒉缩进错误,该缩进的没缩进,不该缩进的缩进了
3.把英文符号写成中文符号,比如说:引号,冒号,括号
4.字符串拼接的时候,把字符串和数字拼在一起
5.没有定义变量,比如说while的循环条件的变量
6."==”比较运算符和”=”赋值运算符的混用
知识点不扎实
索引越界indexerror
lst=[11,22,33,44] #下标是0-3
print(lst[4]) #没有4,报错
append()方法使用不熟练
lst=[]
#以下是错误写法
lst=append('a','b','c')
#以下是正确写法,append是列表的方法,需要用.符号进行调用,且一次只能加一个
lst.append('a')
print(lst)
思路不清
解决方法:1、使用print观察;2、暂时注释掉一部分代码重新运行
被动掉坑
程序代码逻辑没有错,只是因为用户错误操作或者一些例外情况而导致的程序崩溃。eg.除法时把除数设为0
解决:
try: #代码段是可能遇到报错的代码段(用待检测可能更形象?)
代码段 #假设这里是个除法:c=a/b (输入赋值过程略)
except 报错类型: #例如除数b为0时,会产生ZeroException的报错信息。在except后加ZeroException,这样程序运行时遇到除数为0的情况,会打印下面自定义的“除数不能为0”,而不会产生程序报错。当程序运行时没有遇到除数为0的情况,下面的print并不会输出。
自定义操作 #假设,这里print('除数不能为0')
(except.....可以多个except)
except BaseException as e: #为了避免遗漏可能出现的异常,可以在最后增加这一段。语句BaseException as e,是给BaseException起一个别名,这个别名是e。因为BaseException太长了,用e更方便,当然也可以是其他名字
print(e) #也可以是其他语句,这里的e是上面自己没有想到的错误类型,print出来的结果就是错误类型的名字
常见异常类型
3.文件的读写
语法规则:
file=open(filename[,mode,encoding])
文件使用要用.close()进行关闭,否则会造成资源的浪费。
例子:
file=open('a.txt','r') #打开a.txt文件, 'r'==>读取(read),因为是txt文件和.py文件在同一个目录,这里只用文件名即可。如果不在同一个目录,这里需要输入文件路径。由于转义字符的原因,代码中\\只能表示一个\
print(file.readlines()) #读出以列表形式输出
file.close()
文本文件:存储的是普通字符文本,默认是unicode字符集,可以使用记事本程序打开
二进制文件:把数据内容用字节进行存储,无法用记事本打开,必须使用专用的软件打开。需要二进制打开的文件格式:.png .jpg图片, .doc文档等
打开模式
打开模式 | 描述 |
---|---|
r | 只读打开,文件指针在文件的开头 |
w | 只写打开,文件不存在就创建;文件存在则覆盖原有内容。文件指针在文件的开头 |
a | 追加打开,文件不存在就创建,文件指针在文件开头;文件存在,就在文件末尾追加内容。文件指针在文件末尾 |
b | 以二进制文件打开,不能单独使用,需要和其他模式一起使用,例如:rb、wb |
+ | 以读写方式打开,不能单独使用,需要和其他模式一起使用,例如:a+ |
文件对象常用方法
方法名 | 说明 |
---|---|
read([size]) | 文件中读取size个字节/符的内容返回,若省略size,则全部读取出来 |
readline() | 文本文件读取一行 |
readlines() | 文本文件中每一行都作为独立的字符串对象,并将这些对象放入列表返回 |
write(str) | 将str内容写入文件 |
writelines(list) | 将字符串列表list写入文本文件,不加换行 |
seek(offset[,whence]) | 把文件指针移动到新的位置,offset表示相对于whence的位置:offset正则往结束方向移动,为负则往开始方向移动。whence=0:从文件头开始计算(默认);whence=1:从当前位置开始计算;whence=2:从文件尾开始计算 |
tell() | 返回文件指针当前位置 |
flush() | 把缓冲区内容写入文件,但不关闭文件 |
close() | 把缓冲区内容写入文件,同时关闭文件,释放文件对象相关资源 |
with方法
with语句可以自动管理上下文资源,不论什么原因跳出with块,都能确保文件正确的关闭,依次来达到释放资源的目的。
#实现一个png图像的复制
with open('logo.png','rb') as src_file: #as是可选项,可以不使用别名
with open('copy.png','wb') as tag_file
tag_file.write(src_file.read())
#tag文件自动关闭
#logo文件自动关闭,不必显示使用.close()
4.os模块操作目录相关函数
函数 | 说明 |
---|---|
getcwd() | 返回当前目录 |
listdir(path) | 返回指定路径下的文件和目录信息 |
mkdir(path[,mode]) | 创建目录 |
makedirs(path1/path2,[,mode]) | 创建多级目录 |
rmdir(path) | 删除目录 |
removedirs(path1/path2…) | 删除多级目录 |
chdir(path) | 将path设置为当前工作目录 |
abspath(path) | 获取文件或目录绝对路径 |
exists(path) | 判断文件或目录是否存在,如果存在返回True,反之False |
join(path,name) | 将目录与目录或文件名拼接起来 |
splitext() | 分离文件名和扩展名 |
basename(path) | 从一个目录中提取文件名 |
dirname(path) | 从一个路径中提取文件路径,不包括文件名 |
isdir(path) | 判断是否为路径 |
walk() | 遍历所有目录和文件 |
5.打包成可执行文件
①cmd命令控制面板上输入pip install PyInstaller(初次打包需安装)
(如果执行不了,提示pip不是xxxx,找到pycharm项目目录的子文件夹venv的子文件夹Scripts,在这个文件路径下执行pip…命令。也可以百度环境变量设置,省去切换到该目录下再执行的步骤)
②cmd接着输入pyinstaller -F 文件路径(要打包的.py文件所在完整路径包括文件名,该命令执行结束的倒数第二行INFO:Appending archive to EXE …省略号的路径就是最后生成的可执行文件所在位置)