模块
模块的概念:
Python 中的模块(Module),是一个Python文件,以 .py 文件结。
包含了Python对象定义和Python语句,类似Java中的多个单独的Java文件,把相关的代码分配到一个模块中可以实现代码的重用。
模块中可以定义函数、类、变量,也可以包含可执行的代码。
文件名叫做python.py(可以自定义)
定义函数、类、变量、可执行语句:
#可执行语句
print("模块中的打印语句")
#函数
def eat(what):
print("正在吃:",what)
#函数
def sleep(time):
print("在{time}时间睡觉")
#变量
name="蓝忘机"
age=18
#类
class Person:
def playDD(self):
print("打怪兽")
导入模块:
导入模块,也就是说,在一个Python文件中想要使用另外一个Python文件中的函数或者变量,则需要导入模块
导入模块有三种方式:
-
import 模块名
import 模块名 as 别名
使用模块:语法:模块名.功能
#导入模块,注意 python 是 python.py,就是上面定义的python.py模块 import python #使用python模块中的变量 print(python.name) #使用python模块中的函数 python.eat("露水") #定义python中的类 person=python.Person() person.playDD()
#导入模块,并使用别名的方式,导入模块python,别名为p import python as p #调用模块中的函数和变量 print(p.name) p.eat("馒头")
注意:该种方式导入的模块,在调用模块中的函数、变量、类时,必须前面加上模块名
-
from 模块名 import 功能名
from 模块名 import 功能名 as 别名
使用模块:语法:功能
#导入模块中的某一个函数 from python import eat #调用python模块中的eat函数 eat(“馒头”)
from Snail import playDD as dd dd()
注意:该种方式导入的模块,在调用模块中的功能时,可以直接使用功能名即可,不需要跟着模块名
-
from 模块名 import *
注意:该方式导入的模块,在调用模块中的函数时,可以使用别名
无论执行了多少次import,一个模块只会被导入一次!!!
from myPackage.Snail import * person = Person() person.sleep("肖战")
包
在实际的开发中,一个大型的系统有成千上万的Python模块是很正常的事情。
单单用模块定义Python的功能显然还不够,如果都放在一起显然不好管理并且有命名冲突的可能。
因此Python中也出现了包的概念,和Java语言中的包Package是一样的,也就是说把模块分门别类的存放在不同的文件夹。
包的概念:
包将有联系的模块组织在一起,放在同一个文件夹下,这个文件夹就称之为包。
创建包的步骤
-
创建一个文件夹,用于存放相关的模块,文件夹的名字即包的名字;
-
在文件夹中创建一个__init__.py的模块文件,内容可以为空;(注意:必须要创建该文件,用来告诉python将该目录当成一个包来处理,模块文件__init__.py控制着包的导入行为)
-
将相关的模块放入到文件夹中
导入包的方式:
-
1、import 包名.模块名,调用:包名.模块名.功能名
import 包名.模块名 as 别名,调用:别名.功能名
-
2、from 包名.模块名 import 功能名,调用:功能名
from 包名.模块名 import 功能名 as 别名,调用:别名
-
3、from 包名 import *,调用:模块名.功能名
注意:可以在__init__.py文件中添加__all__=[],控制允许导入的模块列表
操作: 将上述案例中的模块 python.py 放入到文件夹 a 中,则在导入模块时,需要在模块前面加上文件夹名(包名)
比如:
语法格式:import 包.模块名 as 别名
比如:import a.python as p
文件
在编程中,需要将部分数据永久保存到文件中,或者将文件中的内容读取出来,就需要学习Python中的文件操作。
打开文件
在Python中,使用open()函数打开文件并返回文件对象
open()函数,可以打开一个已经存在的文件,或者创建一个新文件
语法:
# name:要打开的目标文件名的字符串(可以包含文件所在的具体路径)
# mode:设置打开文件的模式(访问模式),只能 读、写、追加等,主要为"r"、"w"、"a"
f=open(name,mode=' ',encoding="UTF-8")
如:
f=open("test.txt")
关闭文件
如果对文件进行了写入操作,那么应该在完成写入之后关闭文件,因为Python可能会缓存你写入的数据,如果途中发生类似断电之类的事故,那些缓存的数据根本就不会写入到文件中。
语法:
f.close()
读取文件
-
read(num): num表示从文件读取的数据长度(单位:字节),如果没有传入num,侧表示读取文件中所有数据
-
readline():一次只读取一行,即遇到“\n”就返回
-
readlines():读取整个文件,并返回列表,一行为一个元素
#打开文件test.txt,编码格式为UTF-8 f=open("test.txt",encoding="UTF-8") #读取所有文件内容 content=f.read() #读取一行 content=f.readline() #将读取的结果存放到list列表中 l=list(f)
写入文件
write(“内容”)
如果要写入文件,请确保之前的打开模式有“w”或者“a”,否则会报错。
注意,如果使用“w”模式写入文件,之前的文件内容将会全部删除
选中一个模板,出现的黑色方框标志着选中的范围
插入新模板、收藏、复制,都是针对黑色方框进行操作。
方法:
f.write(“数据”)
f=open("test.txt","a",encoding="UTF-8",) # a 追加
f.write("\n")
f.write("这是一行新的数据")
异常
【你不可能总是对的!!!】因为我们是人,不是神,所以我们经常会犯错!
当然,程序员也不例外,就算是经验丰富的码农,也不能保证写出来的代码百分之百没有任何问题(要不哪来那么多的0Day漏洞?)!
作为一个合格的程序员,要把用户想象成熊孩子,把他们想象成黑客,这样你写出来的程序自然会更加安全和稳定。♪(∇*)
处理异常
捕获指定异常类型:try-except 语句
try-except 语法格式:
try:
代码块【可能出会错的代码】
except 异常类型:
出现异常的处理方式
try:
a=10/0
print(f"结果为{a}")
except Exception:
print("出错了")
针对不同异常设置多个except
多个 except 语法格式:
try:
代码块【可能出会错的代码】
except 异常1:
出现异常1的处理方式
except 异常2:
出现异常2的处理方式
try:
a=10/2
print(f"结果为{a}")
b=1+"1"
print(f"结果为{b}")
except ZeroDivisionError:
print("除数不能为0")
except TypeError:
print("类型错误")
捕获多个指定异常,对多个异常统一处理
except 后边还可以跟着多个异常,然后对这些异常进行统一处理
多个异常处理语法格式:
try:
代码块【可能出会错的代码】
except (异常1,异常2):
出现异常的处理方式
try:
a=10/2
print(f"结果为{a}")
b=1+"1"
print(f"结果为{b}")
except (ZeroDivisionError,TypeError):
print("出错了")
捕获所有异常
如果你无法确定要对哪一类异常进行处理,只是希望在try语句块中一旦出现任何异常,可以给用户一个“看得懂”的提醒。
捕获所有异常语法格式:
try:
代码块【可能出会错的代码】
except Exception:
出现异常的处理方式
try:
a=10/2
print(f"结果为{a}")
b=1+"1"
print(f"结果为{b}")
except Exception:
print("出错了")
try-finally语句
语法格式:
try:
代码块【可能出会错的代码】
except:
出现异常的处理方式
finally:
有没有异常都会执行
try:
a=10/0
print(f"结果为{a}")
b=1+2
print(f"结果为{b}")
except:
print("出错了")
finally:
print("计算完了")
异常的捕获信息
try:
代码块【可能出会错的代码】
except 异常类型 as result: # result 为异常的信息
出现异常的处理方式
丰富的else语句
在 Python 中,else语句不仅能跟 if 语句搭,构成“要么怎么样,要么不怎么样”的句式;
还能跟循环语句(for语句或者while语句),构成“干完了怎么样,干不完怎么样”的句式;
更能和异常处理进行搭配,构成“没有问题?那就干吧”的句式。
语法:
try:
代码块【可能出会错的代码】
except:
出现异常的处理方式
else:
没有异常的处理方式
try:
a=10/2
print(f"结果为{a}")
b=1+2
print(f"结果为{b}")
except:
print("出错了")
else:
print("没有错误")
finally:
print("计算完了")