模块让你能够有逻辑地组织你的Python代码段。
把相关的代码分配到一个模块里能让你的代码更好用,更易懂。
模块也是Python对象,具有随机的名字属性用来绑定或引用。
简单地说,模块就是一个保存了Python代码的文件,能起代码归类的作用。模块能定义函数,类和变量。模块里也能包含可执行的代码。
Python之所以应用越来越广泛,在一定程度上也依赖于其为程序员提供了大量的模块以供使用。
在python中称之为模块,而在其他语言中称之为类库,在使用模块的时候需要【先导入】后【使用】。
import s1 import lib.com s1.f1() lib.com.f1() # 输出 this is s1.py lib/com.py
模块分为三种:
- 自定义模块
- 第三方模块
- 内置模块
自定义模块
在Python中,每个Python文件都可以作为一个模块,模块的名字就是文件的名字。
模块的名称很重要,在创建模块名时,一定不要和内置模块重名。
写一个自己的模块(模块文件要和代码文件在同一目录下)
#vim moudle_test.py
#!/usr/bin/env python3
def f1():
print ('自定义 moudle')
# 调用
#vim test.py
#!/usr/bin/env python3
# 导入自定义模块
import moudle_test
moudle_test.f1()
导入模块有以下几种方法:
import module from module.xx.xx import xx from module.xx.xx import xx as rename from module.xx.xx import *
import:
import s1 s1.f1() # 输出 this is s1.py
from:
from s1 import login login() # 输出 this is s1.login() # 从文件夹中导入模块 from lib import commons # 取别名 from src import commons as src_commons
单模块推荐使用import,如果是嵌套在文件下推荐使用from xxx import xxx,也可以加as 来设置别名
导入模块其实就是告诉Python解释器去解释哪个py文件
- 导入一个py文件,解释器解释该py文件
- 导入一个包,解释器解释该包下的__init__.py文件【py2.7】
那么问题来了,导入模块时是根据哪个路径作为基准进行的呢?
import sys
for item in sys.path:
print(item)
如果sys.path路径列表没有你想要的路径,可以通过sys.path.append('路径')添加。
通过os模块可以获取各种目录,例如:
import sys
import os
pre_path = os.path.abspath('../')
sys.path.append(pre_path)
第三方模块
非Python本身自带的模块,就是所谓的第三方模块,那如下载使用第三方模块呢:
1.pip3
pip3 install requests
2.源码
- 下载源码包
- 解压
- python3 setup.py install
内置模块
在介绍内置模块之前先补习一个知识点,就是python模块中特殊变量('*'开头的为常用):
__doc__ 获取文件的注释
__cached__ 获取字节码存放的位置
*__file__ 获取当前py文件所在的路径
*__name__ 特性:只有执行当前文件时,当前文件的特殊变量__name__ == "__main__",一般在主文件里这么写
__package__ 获取文件在哪个包里面
from bin import admin
print(admin__package__)
# 输出
bin
sys模块
用于提供对Python解释器相关的操作:
sys.argv 命令行参数List,第一个元素是程序本身路径 sys.exit(n) 退出程序,正常退出时exit(0) sys.version 获取Python解释程序的版本信息 sys.maxint 最大的Int值 sys.path 返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值 sys.platform 返回操作系统平台名称 sys.stdin 输入相关 sys.stdout 输出相关 sys.stderror 错误相关
1 import sys,time 2 3 4 def view_bar(num,total): 5 rate = num / total 6 rate_num = int(rate * 100) 7 r = '\r%s>%d%%' % ("="*num, rate_num ) # \r回到当前行的首个位置 8 sys.stdout.write(r) 9 sys.stdout.flush() 10 11 12 if __name__ == '__main__': 13 for i in range(0, 101): 14 time.sleep(0.1) 15 view_bar(i,100)