python源码中的学习笔记_第11章_模块与包

本文详细介绍了Python中的模块和包的概念,包括如何创建自定义模块、导入和使用内置及自定义模块,以及包的结构和导入方式。此外,还探讨了常用内置模块如sys和time的功能,并讲解了第三方模块的安装。通过实例展示了如何在不同模块间调用函数和变量,强调了模块化编程在提高代码可维护性和重用性上的优势。
摘要由CSDN通过智能技术生成

模块基础

#
# 主题:模块
#

'''
模块 Modules
一个模块中包含若干函数、类、语句
若干模块与若干包组成 python 程序
在 python 中一个扩展名为 .py 的文件就是一个模块
使用模块的好处
    方便其他程序和脚本的导入并使用
    避免函数名和变量名冲突。即两个模块间同名函数和同名变量不会冲突
    提高代码的可维护性
    提高代码的可重用性
'''

自定义模块基础

#
# 主题:自定义模块
#

'''
创建模块就是新建一个.py文件,保持文件名称与 python 自带的标准模块名称相同

导入模块
    import 模块名 [as  别名]
    from 模块名 import 函数、变量、类
'''

import math             # 导入数学运算相关的模块,这样导入可以使用 math 模块中任意内容
print(id(math))         # 2886608275000
print(type(math))       # <class 'module'>
print(math)             # <module 'math' (built-in)>
print(math.pi)          # 3.141592653589793
print(math.pow(2, 3))   # 8.0   调用 math 包中的 pow 函数
print(pow(2, 3))        # 8     不包含任何包时,也可以使用 pow 函数,但这个函数不是 math 包里的
print(math.ceil(9.001)) # 10
print(math.floor(9.99)) # 9
print(dir(math))        # 查看模块的内容

from math import pi     # 表示只想使用 math 模块中的 pi
print(pi)               # 3.141592653589793

from math import pow
print(pow(2, 3))        # 这样导入也可以只写 pow 函数名,从而调用 math 包中的 pow 函数

自定义模块实操

现有 code 文件夹,在里面新建 MyModule.pymain.py

  • MyModule.py 文件中
#
# 主题:MyModule
#

def add(a, b):
	return a + b

def div(a, b):
	return a / b
  • PyCharm 中右键 code 文件夹,点击 Mark Directory as -> Sources Root
  • main.py
#
# 主题:main
#

import MyModule			# 也可以通过 from 模块名 import 函数、变量、类 调用具体内容

if __name__ == '__main__':
	print(MyModule.add(10, 20))
	print(MyModule.div(10, 4))

以主程序形式运行

'''
在每个模块的定义中都包括一个记录模块名称的变量 __name__ ,程序可以检查该变量,以确他们在哪个模块中执行。
若一个模块不是被导入到其他程序中执行,那么他可能在解释器的顶级模块中执行。
顶级模块的 __name__ 变量的值为 __main__
'''

现有 code 文件夹,在里面新建 MyModule.pymain.py

  • MyModule.py 文件中
#
# 主题:被引用的模块
#

def add(a, b):
	return a + b

if __name__ == '__main__':		# 只有当点击运行 MyModule (即 MyModule.py 是主程序)时,才会执行这下面的语句
	print(add(10, 20))		
  • main.py
#
# 主题:主程序
#

import MyModule
print(MyModule.add(10, 20))		# 30	这里不会执行 MyModule.py 中的 print 语句

#
# 主题:包
#

'''
包是一个分层次的目录结构,它将一组功能相近的模块组织在一个目录下
包(package)与目录(directory)的区别:
    包通常含有 __init__.py
    目录里通常没有 __init__.py
新建包:
    PyCharm 右键文件夹,new -> Python Package
新建目录:
    PyCharm 右键文件夹,new -> Directory
导入包:
    import 包名.模块名
包的作用:
    规范代码
    避免模块名称冲突

一个 python 程序分为多个包,一个包中分为若干模块
'''

# 导入方式一
import package1         # 先导入包
import moduleA          # 再导入模块

# 导入方式二
import package1 import moduleA      # 导入 package1 包中的 moduleA 模块

# 导入方式三
from package1.moduleA import a      # 导入 package1 包的 moduleA 模块的 a 变量

常用的内置模块

#
# 主题:常用的内置模块
#

'''
sys         与 python 解释器及其环境操作相关的标准库
time        提供与时间相关的各种函数的标准库
os          提供了访问操作系统服务功能的标准库
calendar    提供与日期相关的各种函数的标准库
urllib      用于读取来自网上(服务器)的数据标准库,用于爬虫
json        用于使用 JSON 序列化和反序列化对象,用于爬虫
re          用于在字符串中执行正则表达式匹配和替换
math        提供标准算术运算函数的标准库
decimal     用于进行精确控制运算精度、有效数位和四舍五入操作的十进制运算
logging     提供了灵活的记录事件、错误、警告和调试信息等日志信息的功能
'''

import sys
print(sys.getsizeof(24))        # 28    表示占据 28 字节
print(sys.getsizeof(True))      # 28

import time
print(time.time())              # 1633852258.7214267 秒
print(time.localtime(time.time()))
# time.struct_time(tm_year=2021, tm_mon=10, tm_mday=10, tm_hour=15, tm_min=50, tm_sec=58, tm_wday=6, tm_yday=283, tm_isdst=0)
# 即当前时间,年月日时分秒

import urllib.request
print(urllib.request.urlopen('https://www.baidu.com').read())

第三方模块的安装及使用

  • 安装第三方模块
# 在线安装方式
pip install 模块名

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值