python_模块_包

  1. 模块Module

模块是一个包含有一系列数据,函数,类等组成的程序组
模块是一个文件,模块文件名通常以.py结尾

作用:让一些相关的数据,函数,类等有逻辑的组织在一起,使逻辑结构更加清晰
模块中的数据,函数和类等可提供给其他模块或程序使用

模块的分类:
(1)内置模块(builtins),在解析器的内部可以直接使用
(2)标准库模块,安装python时已安装且可直接使用
(3)第三方模块(通常为开源),需要自己安装
(4)用户自己完成的模块(可以作为其他人的第三方模块)

  1. import语句

语法:
import 模块名1 [as 模块新名1][,模块名2 as 模块新名2],…

示例:

#导入数学模块
import math
#将math取别名
#import math as m  之后的sqrt等函数要用m.sqrt()

#导入系统模块sys和os模块
import sys,os

作用:将某模块整体导入到当前模块
函数用法:模块.属性名

from import语句
from 模块名 import 模块属性名1 [as 属性新名1] [,模块属性名2[as 属性新名2]]

作用:
将某模块内的一个或多个属性导入到当前模块的作用域

示例:

from math import pi
from math import pow,sqrt
from math import factorial as fac

#这样导入的模块内的函数可以不加模块使用
pow(2,2)
sqrt(4)
fac(5)					#5!=120

from import * 语句
语法:from 模块名 import *

说明:将某模块的所有属性都导入到当前模块

不推荐使用,容易出现名称冲突

dir函数:
dir([对象]) 返回一个当前模块内所有变量名称的字符串列表

作用:
一、如果没有参数调用,则返回当前作用域内的所有变量的列表
二、如果给定一个对象作为参数,则返回这个对象的所有变量的列表
(1)对于一个模块,返回这个模块的全部属性
(2)对于一个类对象,返回类对象的所有变量的属性

time模块

时间元组使一个9个整形元素组成的,这9个元组自前至后依次为:

  • 四位的年(如:1993)
  • 月(1-12)
  • 日(1-31)
  • 时(0-23)
  • 分(0-59)
  • 秒(0-59)
  • 星期几(0-6,周一是0)
  • 元旦开始日(1-366)
  • 夏令时修正时间(-1,0 or 1)

注意如果年份值小于100,则会自动转换为加上1900后的值

math中的常用函数

math.e				#自然对数的底数
math.ceil(x) 		#对x向上取整
math.floor(x)		#对x向下取整
math.factorial(x) 	#求x的阶乘
math.fabs(x)		#返回浮点数x的绝对值
math.log(x[,base])	#以base为底的x的对数,默认为e为低
math.degree(x) 		#弧度x转换为度数
math.radiants(x)	#度数x转换为弧度

时间模块time
UTC时间为Greenwich时间,是全时间的公认时间

time中常用函数

time.time				#返回当前时间距离UTC的秒数
time.sleep(x)			#使程序暂停x秒
time.gmtime(x)			#用给定秒数转换为用UTC表达的时间元组
						#缺省返回当前时间元组
time.asctime([tuple])	#将时间元组转换为日期时间字符串
time.mktime([tuple])	#将本地日期时间元组转换为新纪元秒数时间(UTC为准)
time.localtime([secs])	#将UTC秒数时间转换为日期元组(以本地时间为准)

系统sys模块

sys常用函数

#变量
sys.path		#导出模块搜索时的路径
sys.modules		#输出已导入模块的字典
sys.version		#python解释器版本的字符串
sys.version.info	#返回版本号的命名元组
sys.platform	 	#返回当前运行的操作系统的字符串linux、win
sys.argv		#绑定用户启动程序时命令行参数的列表
sys.builtin_module_names	#返回所有内建模块名称的元组

#方法
sys.exit(arg)		#程序在该条代码程序直接退出(完全退出,不论多少层函数)
					#正常退出是sys.exit(0)
sys.getrecursionlimit()		#得到递归嵌套层次限制(栈的深度)
sys.getrecursionlimit(arg)	#设置递归嵌套的层次
  1. 自定义模块

自定义模块的模块名必须符合"标识符"的命名规则(同变量名,不能以中文、数字开头)

模块有各自独立的作用域,同时导入两个整体模块不会冲突
但以下使用会出现冲突:

#方法1:
from mymod1 import *
from mymod2 import *
#方法2
from mymod1 import name1
from mymod2 import name1

模块化编程优点:
(1)有利于多人合作开发
(2)使代码更易于维护
(3)提高代码的复用率
(4)有利于解决变量名冲突问题

import语句搜索模块的路径顺序
(1)搜索程序运行时的路径(当前路径)
(2)sys.path提供的路径
(3)搜索内置模块

导入方法:
(1)可以将模块文件mv到sys.path的文件夹中,可以不再当前路径下import

在终端下 mv mymod.py [sys.path打印的路径之一]
然后就可以import mymod

(2)在sys.path中追加模块的文件路径

import sys
sys.path.append('home/pinkman/modules/')
import mymod

模块的加载过程:
(1)在模块导入时,模块的所有语句会执行
(2)如果一个模块已经导入,则再次导入时不会重新执行模块的语句
示例:

#mymod模块中有print语句

import mymod
#这里打印:mymod模块被加载
import mymod
#语句执行过一次后再次加载不会执行
#因为python解释器已经把mymod加载到内部了,此时修改mymod文件
#则新加入的mymod语句不会被执行
#可以sys.modules['mymod'] 查询mymod的搜索路径

模块的重新加载:

import mymod
import imp			#imp模块专门用来管理导入模块
imp.reload(mymod)	

模块导入和执行的过程:
(1)先搜索相关路径找模块(.py)
(2)判断是否有此模块对应的.pyc文件,如果存在pyc文件且比.py文件新,则直接加载.pyc文件
(3)否则用.py

模块的属性
属性的实质是变量(是模块内的全局变量)

模块内预置的属性:

__doc__属性:用来绑定模块的文档字符串
模块内第一个没有赋值给任何变量的字符串为模块的文档字符串

'''这是模块的文档字符串的标题
						#书写文档字符串空行上面为标题
这是文档字符串的内容		#空行下面为描述
此模块包含两个函数和两个变量
'''

__file__属性:绑定模块对应的文件路径名
(1)对于内建模块,不绑定路径(没有__file__属性)
(2)对于其他模块,绑定路径名的字符串

__name__属性:此属性用来记录模块的自身名字
作用:
(1)记录模块名
(2)用来判断是否为主模块(最先运行的模块
说明:

#当此模块为主模块时,__name__绑定 '__main__'
#档次模块不是主模块时,此属性绑定模块名
#验证是否是主模块

def f1():
	print('f1被调用')
if __name__ == '__main':
	print('mymod.py正在当作主模块运行')
else:
	print('mymod.py正在被其他模块导入')
	print('模块名为:',__name__)

模块的__all__列表
模块中的__all__列表是一个用来存放可导出属性(import *)的字符串列表

作用:当用from import *语句导入时,只导入__all__列表内的属性

'''此模块示意__all__列表的作用和用法
'''

#限制用from mymod import *时导入的变量数
__all__ = ['f1','var1']

def f1()::
	pass
def f2():
	pass
def f3():
	pass

var1 = 'hello'
var2 = 'world'
#此模块被import *导入时,只导入f1和var1

模块的隐藏属性
模块内以’_’(单下划线)开头的属性,在from import *语句导入时,将不被导入,通常称这些属性为隐藏属性

  1. random随机模块
    random函数:
    import random as R
R.random()		#返回一个[0,1)之间的随机实数
R.uniform(a,b)	#返回[a,b)区间内的随机整实数
R.randrange([start,]stop[,step])
#返回range(start,stop,step)中的随机数
R.choice(seq)	#从序列中返回随机元素(类似抽牌,抽签)
R.shuffle(seq[,random])	#使指定序列乱序
R.sample(seq[,n])		#从序列中选择n个随机且不同的元素
  1. 包(模块包)package

包是将模块以文件夹的组织形式进行分组管理的方法

作用:
将一系列模块进行分类管理,有利于防止命名冲突
可以在需要时加载一个或部分模块而不是全部模块

包示例:

mypack/
		__init__.py		#可以为空,但必须要有才表示是个包
		menu.py
		games/
				__init__.py
				contra.py
				supermario.py
				tanks.py
		office/
				__init__.py
				excel.py
				word.py 

init.py文件
常规包内必须存在的文件
init.py会在包加载时被自动调用

作用:
编写此包的内容
在内部编写此包的文档字符串

例如:



#mypack/__init__.py

'''这是mypack包的标题

此包含有一个menu模块
此包还含有两个自包:
	games
	office
'''
print('mypack包被加载')
import mypack		#检查内部是否有__init__.py,若有则是包
					#可以当作.py文件的模块加载

包的导入:
用三条import语句可以导入包(同模块的导入的规则)

import 包名 [as 包别名]
import 包名.模块名 [as 模块新名]
import 包名.子包名.模块名

from 包名 import 模块名 [as 模块新名]
from 包名.子包名.模块名 import 属性名 [as 属性新名]
from 包名.子包名.模块名 import 属性名 [as 属性新名]

from 包名 import *
from 包名.模块名 import *

例如:使用menu中的show_menu()函数

#方法1
import mypack.menu
mypack.menu.show_menu()

#方法2
import mypack.menu as m
m.shou_menu()

#方法3
from mypack.menu import show_menu as menu
menu()

说明:包的导入顺序是若先导入大包,则要使用之内的小包仍需导入;若先导入小包,则大包会在小包前也被导入

包的__init__.py文件内的__all__列表
作用:用来记录此包中有哪些子包或模块在用from 包 import *语句导入时是否被导入

说明:__all__列表只对from import *语句起作用

__all__ = ['contra','tanks']	#列表内为模块名

包的相对导入:
包的相对导入是指包内模块的相互导入

语法:
from 相对路径或模块 import 模型或模块名

from 相对路径包或模块 import *

相对路径:

. 		#代表当前目录
..		#代表上一级目录
...		#代表上二级目录
....	#以此类推

注:相对导入时不能超出包的外部

包的加载路径:
同模块的加载路径相同
1.当前文件夹
2.sys.path给出的路径

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值