一 模块
每一个 Python 脚本文件都可以被当成是一个模块。模块以磁盘文件的形式存在。当一个模块变得过大,并且驱动了太多功能的话,就应该考虑拆一些代码出来另外建一个模块。模块里的代码可以是一段直接执行的脚本,也可以是一堆类似库函数的代码,从而可以被别的模块导 入(import)调用。模块可以包含直接运行的代码块、类定义、 函数定义或这几者的组合。
推荐所有的模块在Python模块的开头部分导入。而且最好按照这样的顺序:
- Python标准库模块
- Python第三方模块
- 应用程序自定义模块:
import
在Python中用关键字import来引入某个模块,比如要导入模块time,就可以在文件最开始的地方用import time来引入
#语法
import module1
import module2[
......
import moduleN]
# 也可以在一行内倒入多个模块
import module1[, module2[,... moduleN]]
'''
import 模块名[,模块名]。。。
导入整个模块
通过 模块名.方法名 调用
'''
import time
print('start')
# sleep(5) 错误调用
time.sleep(5) #正确调用
print('stop')、
'''
from…import
Python的from语句让你从模块中导入一个指定的部分到当前命名空间中
#语法
from modname import name1[, name2[, ... nameN]]
from 模块名 import 函数名
从指定的模块中导入指定的部分
'''
from time import sleep
print('start')
sleep(5)
print('stop')
from…import *
导入一个模块的所有内容
#语法
from modname import*
#导入模块中的所有内容
from math import *
print(ceil(1.1)) #向上取整
print(floor(1.1)) #向下取整
扩展import语句(as)
有时候你导入的模块名称已经在你的程序中使用了, 或者你不想使用现有的名称。可以使用一个新的名称替换原始的名称。(给导入的模块去别名)
#实列:
import pandas #原始的名称
import pandas as pd #使用as重新命名
#给导入的模块取别名
import math as m
print(m.ceil(1.1)) #向上取整
print(m.floor(1.1)) #向下取整
from math import ceil as c #不建议,函数名组好简化或者区别名
print(c(1.1)) #向上取整
模块制作
模块调用
既然可调用系统模块,那么可不可以自己创建一个模块,然后通过另一个程序调用? 当然可以,对于一个软件项目来说不可能把所有代码都放在一个文件中实现,它们一般会按照一定规则在不同的目录和文件中实现。
1.同级目录
import test #引入同级目录中的test模块
print(test.test_add(2,3))
from test import test_add
print(test_add(2,3))
2.跨模块引入(模块为兄弟目录)
import study.test2 #模块名.函数名
print(study.test2.test2_add(2,3))
from study import test2
print(test2.test2_add(2,3))
from study.test2 import test2_add
print(test2_add(2,3))
3.跨模块引入(模块为父亲兄弟目录)
使用sys.path.append(‘…\’)或者sys.path.append(‘…/’) #返回上一级目录 (相对路径和绝对路径)
4.覆盖标准模块
from msg import math #自定义的模块
print(math.ceil(1.1)) #向上取整
print(math.floor(1.1))
math.getInfo()
三 dir()函数
dir()函数一个排好序的字符串列表,内容是一个模块里定义过的名字。返回的列表容纳了在一个模块里定义的所有模块,变量和函数。
四 包
包是一种管理 Python 模块命名空间的形式,采用"点模块名称"。比如一个模块的名称是 A.B, 那么他表示一个包 A中的子模块B
目录中只有包含一个叫做__init__.py的文件才会被认作是一个包
在导入包的时候,Python会从sys.path中的目录来寻找这个包中包含的子目录
创建 __init __.py
- 目录中只有包含了叫做__init __.py的文件,才能被程序认作是包,模块才能被导入成功。现在我们就在msg文件夹下创建一个 __init __.py文件,并且一定要在文件中写入 __all __
- 目录中只有包含了叫做 __init __.py的文件,才能被程序认作是包,模块才能被导入成功。现在我们就在msg文件夹下创建一个 __init __.py文件,并且一定要在文件中写入 __all __
- 可以在 __init __.py中编写其他内容,在导入时,这些编写的内容就会被执行。
- 可以在 __init __.py中向sys.path添加当前被调用模块路径。
#通过from一次性导入所有的模块
#做一个包一定要创建一个__init__.py 这么文件中一定要设置 __all__ = ['允许导入的模块名']
from msg import *
send.sendMsg()
recv.recvMsg()
math.getInfo()
重新加载
import test
# import test #引入两边只输出一句hahaha
import imp
imp.reload(test) #重新导入test模块