1)模块被其余模块导入时,其中的可执行语句会当即执行。所以python中提供了一种能够判断自定义模块是属于开发阶段仍是使用阶段的属性,即__name__
:print(__name__)#编写在自定义模块中
以脚本方式运行时是固定的字符串__main__
,在以模块被导入的方式运行时,会打印出自定义模块名。所以能够在自定义模块代码中编写if __name__ =='__main__:'
以用来判断是否须要直接运行模块中的语句(即判断是处于开发阶段仍是使用阶段)。python
2)一般定义函数(包含测试函数),再将函数的调用放在if __name__=='__main__':
(快捷键:main+回车)代码块下。这样当自定义模块被导入时可执行语句不会直接运行。app
3)自定义模块的使用:模块名.成员名(以import xxx
方式导入)
4)在同级目录下导入模块:直接导入。dom
5)在不一样的目录下导入模块(若相对导入能够解决就用相对导入,相对导入下文有介绍):
系统导入模块的路径:
1)内存中:若是以前成功导入过某个模块,会直接使用已经存在的模块。
2)内置路径中:在python安装路径中lib和site-packages文件夹下。
3)sys.path(没有提供源码,用c语言编写直接集成在解释器上):是一个路径的列表(动态可修改)。
4)查看sys.path内容:import sys print(sys.path)
打印出的列表第一个元素是当前脚本路径,第二个元素是当前项目的路径。
5)__file__
可获取当前文件的绝对路径。可以使用os模块获取一个文件路径的父路径:import os os.path.dirname(__file__)
6)将自定义模块文件夹所在的路径添加到sys.path中:
python import os import sys sys.path.append('模块文件夹路径')
6)自定义模块书写标准:一般一个脚本中都会包含if __name__=='__main__':
函数
def func(): ...... def main(): #测试函数 pass if __name__=='__main__': main()
import xxx
:导入一个模块的全部成员。必须使用模块名做为前缀。import xxx,yyy,....
:一个性导入多个模块的成员,不推荐这种写法,建议分开写。但常常将这两个模块放在一块写:import os,sys
from xxx import y
:从某个模块中导入指定的成员。from xxx import a,b,c,......
:从某个模块中导入多个成员。from xxx import *
:默认从某个模块中导入所有成员,不用使用模块名做为前缀,直接使用成员名便可。为了不导入多余的成员python默认使用了一个指令__all__
,它是一个列表,用于表示本模块能够被外界使用的成员,元素是成员名组成的字符串。即在自定义模块中编写__all__=['','',...]
列表中应是可被导入用的成员。但__all__
只对此种导入方法起做用。import xxx as z
导入xxx模块重命名为z。from xxx import yyy as z
导入xxx模块将成员名重命名为z。1)针对某个项目中的不一样模块之间进行导入,称为相对导入(模块间必须有同一个文件夹路径)。测试
2)相对导入只有一个语法:from 相对路径 import xxx
相对路径:包含了点号的一个相对路径。
.:表示当前的路径。
..:表示的是父路径
...:表示的是父路径的父路径
..x.y:表示的是父路径下x文件夹下的y文件(夹)code
举例:在python文件夹下有t1和t2两个文件夹,t1和t2文件夹下分别有pt1.py和pt2.py两个模块。python文件夹在WorkSpace文件夹下,WorkSpace下有一个main.py文件。orm
#相对导入(在pt1.py文件中编写): #1.将pt1做为对外界的接入口: from ..t2 import pt2 #..:从当前的路径(不包含当前文件,即/WorkSpace/python/t1)的父目录(/WorkSpace/python/)下找t2,在从t2中找pt2。 #测试相对导入(在main.py文件中编写): import os,sys sys.path.append(os.path.dirname(__file__)) #把项目所在的父路径加到sys.path中。 from python.t1 import pt1 #使用pt1.py模块文件导入的pt2.py模块中的成员: pt1.pt2.成员名 #但不推荐这样写。容易向外界暴露pt2模块。 #更改方法(真正的相对导入): #相对导入(在pt1.py文件中编写): #1.将pt1做为对外界的接入口: from ..t2.pt2 import * #直接导入pt2模块 #测试相对导入(在main.py文件中编写): import os,sys sys.path.append(os.path.dirname(__file__)) #把项目所在的父路径加到sys.path中。 from python.t1 import pt1 #使用pt1.py模块文件导入的pt2.py模块中的成员: pt1.成员名 #成员名:能够是pt1和pt2模块的成员。 #不用相对导入(不推荐): #1.在pt1模块下编写: import os,sys sys.path.append(as.path.dirname(os.path.dirname(__file__))+'/t2') from pt2 import *
1)random模块(pseudo-random,伪随机数):提供了随机数获取的方法
1)random.random():获取[0.0,1.0)范围内的浮点数。
2)random.randint(a,b):获取[a,b]范围内的一个整数。
3)random.uniform(a,b):获取[a,b]范围内的一个浮点数数。
4)random.shuffle(x):把参数指定的数据中的元素打乱,参数必须是一个可变的数据类型。没有返回值(由于是直接将x打乱,调用改函数后x会被改变,与append无返回值缘由相同。)(不支持元祖,可用sample打乱)
5)random.sample(x,k):从x中随机抽取k个数据,组成一个列表返回。
6)random.randrange(start,stop,step):生成一个[start,stop)之间以step为步长的随机整数。默认步长为1。
7)random.seek(a):设置初始化随机数种子。a,随机数种子,能够是整数或浮点数。使用random库产生随机数不必定要设置随机数种子,若是不设置,random库默认以系统时间产生当作随机数种子。设置随机数种子的好处是能够重复在现相同的随机数序列。内存