模块
类似于java中:.java文件
- 定义:
一个.py结尾的文件就是一个模块
模块中可以写:
类 (属性、方法)
函数
变量
可执行语句
Snail.py模块
__all__ = ["Person", "test"]
#定义类
class Person:
name = "zs"
def say(self):
print("这是一个类的方法")
#单独定义函数
def test():
print("这是一个函数")
#单独定义模块变量
age = 18
-
模块之间的相互调用
- 导入模块
方式一、import 模块名 或者 #import 模块名 as 别名
案例: import Snail # 调用:模块名.类名 # 实例化模块中的类 person = s.Person() print(person.name) person.say("小树")
方式二、from 模块名 import 功能名 或者 from 模块名 import 功能名 as别名
案例: from Snail import Person as p from Snail import playDD as dd from Snail import age person = p() person.say("小花") dd() print(age)
方式三、from 模块名 import *
案例: person = Person() person.say("小草") playDD() print(age) #由于没有被指定,所以age属性不能使用
注:如果在要导入的模块中设置了指定导入的功能,则即使导入的时*,有部分没有被指定功能则不能用比如:在Snail.py中设置:all = [“Person”, “playDD”]
- 导入模块
案例代码及运行结果
test1.py
#方式一、import 模块名
# import Snail
#
# # 调用:模块名.类名
# # 实例化模块中的类
# person = Snail.Person()
# print(person.name)
# person.say()
#方式二、from 模块名 import 功能名
# from Snail import Person as p
# from Snail import test
#
# person = p()
# person.say()
# print(person.name)
#方式三、from 模块名 import *
from Snail import *
person = Person()
person.say()
print(person.name)
包
- 导入包
新建包:默认有__init__.py模块
方式一、import 包名.模块名 或者 #import 包名.模块名 as 别名
案例:
import myPackage.Snail as s
#person = myPackage.Snail.Person()
person = s.Person()
person.say("小花")
方式二、from 包名.模块名 import 功能名 或者 #from 模块名 import 功能名 as 别名
案例:
from myPackage.Snail import Person
person = Person()
print(person.name)
方式三、from 包名 import * #这样会把该包下的所有功能全部导入,导致性能较低
案例:
from myPackage.Snail import Person
person = Person()
print(person.name)
注:解决方案:可以在__init__.py文件中添加__all__ = [],控制允许导入的模块列表
__all__ = ["Snail"]
案例代码及运行结果
test2.py
#方式一、import 包名.模块名 或者 #import 包名.模块名 as 别名
# import mypackage.Snail as s
#
# # person = mypackage.Snail.Person()
# person = s.Person()
# person.say()
# 方式二、from 包名.模块名 import 功能名 或者 #from 模块名 import 功能名 as 别名
# from mypackage.Snail import Person
# person = Person()
# print(person.name)
#方式三、from 包名 import * #这样会把该包下的所有功能全部导入,导致性能较低
from mypackage.Snail import Person
person = Person()
print(person.name)
异常
跟java不同,java中的异常可以捕获 可以抛出 而python中只能捕获
- 语法格式:
try:
可能会出异常的代码
except 异常类型1,异常类型2 | Exception:
出现异常,解决异常的代码
else:
没有异常,执行的代码
finally:
无论是否有异常,都会执行
案例:
try:
a = 6/0
except ZeroDivisionError:
print("除数不能为0")
else:
print(f"a={a}")
- 自定义异常
class MyException(Exception):
def __init__(self, length, minLength):
self.length = length
self.minLength = minLength
def __str__(self):
return f"输入的长度为{self.length},要求长度最少{self.minLength}位"
try:
pwd = input("请输入密码:")
if len(pwd) < 6:
raise MyException(len(pwd), 6) #raise抛出
except MyException as result:
print(result)
else:
print(pwd)
案例代码及运行结果
test3.py
#语法格式
# try:
# a = 6/0
# except ZeroDivisionError:
# print("除数不能为0")
# else:
# print(f"a={a}")
#自定义异常
class MyException(Exception):
def __init__(self, length, minLength):
self.length = length
self.minLength = minLength
def __str__(self):
return f"输入的长度为{self.length},要求长度最少{self.minLength}位"
try:
pwd = input("请输入密码:")
if len(pwd) < 6:
raise MyException(len(pwd), 6) # raise抛出
except MyException as result:
print(result)
else:
print(pwd)
文件
案例代码及运行效果
test4.py
f = open("readme.txt", "r", encoding="UTF-8")
#f = open("readme.txt", "w", encoding="UTF-8")
f.write("好好学习,天天向上")
# 读文件
content = f.read()
content = f.read(2)
content = f.readline()
content = f.readlines()
print(content[1])
高阶函数
把函数作为参数传递
案例一、map(func,lst):将传入的函数变量func作用到lst变量的每个元素中,并将结果组成新的列表(Python2)/迭代器(Python3)
list1 = [1, 2, 3, 4, 5]
def two(x):
return x ** 2
result = map(two, list1)
print(list(result)) #把map转list
案例二、reduce(func,lst),其中func必须有两个参数,每次func计算的结果继续和序列的下一个元素做累计计算
import functools
def add(x, y):
return x+y
print(functools.reduce(add, list1))
案例三、filter(func,lst)函数用于过滤序列,过滤掉不符合条件的元素,返回一个filter对象,可将其转换成list
def ou(x):
return x % 2 == 0
result = filter(ou, list1)
print(list(result))
案例代码及运行效果
test5.py
list1 = [1, 2, 3, 4, 5]
#案例一
# def two(x):
# return x ** 2
#
# result = map(two, list1)
# print(list(result)) # 把map转list
#案例二
# import functools
#
# def add(x, y):
# return x + y
#
# print(functools.reduce(add, list1))
#案例三
def ou(x):
return x % 2 == 0
result = filter(ou, list1)
print(list(result))