Python之模块和包

目录

1、模块

2、包

3、异常

4、文件

5、高阶函数



一、模块

        定义:在python中,一个文件(以“.py”为后缀名的文件)就叫做一个模块

导入模块的三种方式:

  • 方式一:import 模块名

# 导入整个demo模块
import demo
# 使用demo模块名作为前缀访问模块中的Tiger类
t = demo.Tiger()
# 使用demo模块名作为前缀访问模块中的函数
demo.say()
  • 方式二:from 模块名 import 功能名

使用了 from...import 最简单的语法来导入指定成员:

# 导入demo模块中的指定成员
from demo import Tiger
t = Tiger()
print(Tiger.name)
  • 方式三:from 模块名 import *

在Python项目下创建fun包,并在__init__.py文件中配置包的导入行为。

# 导入fun包下中demo01模块下的Lion成员
from fun.demo01 import Lion
​
__all__ = ["Lion"]
 

二、包

        定义:包将有联系的模块组织在一起,放在同一个文件夹下,这个文件夹就称之为包。

每个包下默认会有一个__init__.py文件。(__init__.py控制着包的导入行为

        导入包的三种方式:

  • import 包名[.模块名 [as 别名]]

import my_package.module1
# 必须通过包名.模块名的方式访问模块中的成员
my_package.module1.hello()
  • from 包名 import 模块名 [as 别名]

# 导入my_package包下的module1模块
from my_package import module1
module1.hello()
  • from 包名.模块名 import 成员名 [as 别名]

此语法格式用于向程序中导入“包.模块”中的指定成员(变量、函数或类)。
通过该方式导入的变量(函数、类),在使用时可以直接使用变量名(函数名、类名)调用:

# 导入my_package包下的module1模块中的hello成员
from my_package.module1 import hello
hello()

三、异常

        程序运行时常会碰到一些错误,例如除数为 0、年龄为负数、数组下标越界等,这些错误如果不能发现并加以处理,很可能会导致程序崩溃。和 C++、Java 这些编程语言一样,Python 也提供了处理异常的机制,可以让我们捕获并处理这些错误,让程序继续沿着一条不会出错的路径执行。

异常处理

  • 捕获指定异常类型

通过多 except 代码块,捕获不同类型的异常。

# 捕获指定异常类型
nums = [1, 2]

try: # 监控可能发生异常的代码
    print(nums[2])
except IndexError:
    print('超过索引范围')

print('程序结束')
  • 捕获多个指定异常

# 每个 except 块都可以同时处理多种异常
try:
    print(1 / 0)
except (IndexError, ZeroDivisionError):
    print("下标越界或除数不能为0")
except Exception:
    print("未知错误")
  • 捕获所有异常

所有异常的父类都是Exception,通过Exception即可捕获所有异常信息。

# 每个 except 块都可以同时处理多种异常
try:
    print(1 / 0)
except (IndexError, ZeroDivisionError):
    print("下标越界或除数不能为0")
except Exception:
    print("未知错误")
  • 异常的捕获信息

针对未知异常信息,可以通过Exception as 变量名方式捕获特定的异常信息。

# 接收2个数,输出其商
try:
    x = int(input('请输入第一个数')) # valueError
    y = int(input('输出第二个数'))
    rs = x / y # ZeroDivisionError
    print(f'{x}/{y}={rs}')
except ValueError as ex:
    print(f'输入正确格式{ex}')
except ZeroDivisionError as ex:
    print('除数不能为0')
except Exception:
    print('未知错误!')

print('程序结束')

异常的else

        在原本的try except结构的基础上,Python异常处理机制还提供了一个 else 块,也就是原有 try except 语句的基础上再添加一个 else 块,即try except else结构。

nums = [10, 9, 8]

try: # 监控可能发生异常的代码
    print(nums[4])
except IndexError:
    print('超出索引范围')
else:
    print('没有异常!')

print('程序结束')

异常的finally

Python异常处理机制还提供了一个 finally 语句,通常用来为 try 块中的程序做扫尾清理工作。

在整个异常处理机制中,finally 语句的功能是:无论 try 块是否发生异常,最终都要进入 finally 语句,并执行其中的代码块。

nums = [10, 9, 8]

try:  # 监控可能发生异常的代码
    print(nums[2])
    print('try块中,异常后面的代码')  # 没有异常就会执行 有异常就不会被执行
except IndexError:
    print('超出索引范围')
else:
    print('没有异常!')
finally:
    print('无论是否有异常,都会被执行!')

print('程序结束')

自定义异常

# 自定义异常应用于:业务规则
# 方法或函数找不到合适的值告诉调用者违反业务规则
class MyException(Exception):
    def __init__(self, msg: str):
        self.msg = msg

    def __str__(self):
        return self.msg


try:
    a = 20
    if a < 18 :
        raise  MyException('不能小于18')
except MyException as ex:
    print(ex)

print('程序结束')

四、文件

        功能:打开文件、读取和追加数据、插入和删除数据、关闭文件、删除文件等。

open()函数

open() 函数用于创建或打开指定文件

该函数的常用语法格式如下:

        file = open(file_name [, mode='r' [ , buffering=-1 [ , encoding = None ]]])

open() 函数支持的文件打开模式:

模式说明注意实现
r只读模式打开文件,读文件内容的指针会放在文件的开头。操作的文件必须存在。
rb以二进制格式、采用只读模式打开文件,读文件内容的指针位于文件的开头,一般用于非文本文件,如图片文件、音频文件等。
r+打开文件后,既可以从头读取文件内容,也可以从开头向文件中写入新的内容,写入的新内容会覆盖文件中等长度的原有内容。
rb+以二进制格式、采用读写模式打开文件,读写文件的指针会放在文件的开头,通常针对非文本文件(如音频文件)。
w以只写模式打开文件,若该文件存在,打开时会清空文件中原有的内容。若文件存在,会清空其原有内容(覆盖文件);反之,则创建新文件。
wb以二进制格式、只写模式打开文件,一般用于非文本文件(如音频文件)
w+打开文件后,会对原有内容进行清空,并对该文件有读写权限。
wb+以二进制格式、读写模式打开文件,一般用于非文本文件
a以追加模式打开一个文件,对文件只有写入权限,如果文件已经存在,文件指针将放在文件的末尾(即新写入内容会位于已有内容之后);反之,则会创建新文件。
ab以二进制格式打开文件,并采用追加模式,对文件只有写权限。如果该文件已存在,文件指针位于文件末尾(新写入文件会位于已有内容之后);反之,则创建新文件。
a+以读写模式打开文件;如果文件存在,文件指针放在文件的末尾(新写入文件会位于已有内容之后);反之,则创建新文件。
ab+以二进制模式打开文件,并采用追加模式,对文件具有读写权限,如果文件存在,则文件指针位于文件的末尾(新写入文件会位于已有内容之后);反之,则创建新文件。

文件读写

示例一:读

Python提供了如下 3 种函数,它们都可以帮我们实现读取文件中数据的操作:

函数说明
read()逐个字节或者字符读取文件中的内容
readline()逐行读取文件中的内容
readlines()一次性读取文件中多行内容
try:
    # 1.读取整个文件,并返回列表
    print(f.readlines())
    # 2.读取一行
    print(f.readline())
    # 3.逐个字节或者字符读取文件中的内容
    print(f.read(8))
except Exception as ex:
    print(ex)
finally:
    # 关闭文件
    f.close()

示例二:写

函数说明
write()可以向文件中写入指定内容。注意:在使用 write() 向文件中写入数据,需保证使用 open() 函数是以 r+、w、w+、a 或 a+ 的模式打开文件,否则执行 write() 函数会抛出 io.UnsupportedOperation 错误。
writelines()可以实现将字符串列表写入文件中。注意:使用 writelines() 函数向文件中写入多行数据时,不会自动给各行添加换行符。

注意,写入函数只有 write() 和 writelines() 函数,而没有名为 writeline 的函数。

f = open("a.txt", "w+",encoding="UTF-8")
# 不换行
f.write("hello")
f.write("hello")
f.write("hello world")

# 换行
f.write("hello world\n")
f.write("hello world\n")
f.write("hello world\n")

# 追加 这个需要打开模式为a
f.write("ni hao python")

f.close()

实例三:with as

        使用 with as 操作已经打开的文件对象(本身就是上下文管理器),无论期间是否抛出异常,都能保证 with as 语句执行完毕后自动关闭已经打开的文件。

with as 语句的基本语法格式为:

with 表达式 [as target]:
    代码块
with open("a.txt", "w+", encoding="UTF-8") as f:
    # 占用4个字节
    f.write("hello☺world\n")
    f.write("hello☺world\n")
    f.write("hello☺world\n")

五、高阶函数

        高阶函数:一个函数可以作为参数传给另外一个函数,或者一个函数的返回值为另外一个函数(若返回值为该函数本身,则为递归),满足其一则为高阶函数。

filter()函数

     filter(func,lst)函数(又称之为过滤函数)用于过滤序列,过滤掉不符合条件的元素,返回一个filter对象,可将其转换成list。

nums = [1, 2, 3, 4, 5, 6, 7]
# 1.filter 过滤函数
f = filter(lambda a: a > 5, nums)

map()函数

     map(func,lst)函数(又称之为遍历函数)将传入的函数变量func作用到lst变量的每个元素中,并将结果组成新的列表(Python2)或者迭代器对象(Python3)。

nums = [1, 2, 3, 4, 5, 6, 7]
# 2.map 遍历函数
m = map(lambda a: a * 2, nums)

reduce()函数

       reduce(func,lst)函数(又称之为规约函数),其中func必须有两个参数,每次func计算的结果继续和序列的下一个元素做累计计算处理。

通过reduce()函数计算总和:
nums = [1, 2, 3, 4, 5, 6, 7]
r = reduce(lambda a, b: a + b, nums)
print(r)

  • 26
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值