day15自定义模块的导入

摘要:
模块中出现的变量称为模块的成员。这样当自定义模块被导入时可执行语句不会直接运行。3)自定义模块的使用:模块名.成员名4)在同级目录下导入模块:直接导入。可使用os模块获取一个文件路径的父路径:importosos.path.dirname6)将自定义模块文件夹所在的路径添加到sys.path中:pythonimportosimportsyssys.path.append6)自定义模块书写标准:通常一个脚本中都会包含if__name__=='__main__':deffunc():......defmain():#测试函数passif__name__=='__main__':main()导入模块的方式:importxxx:导入一个模块的所有成员。容易向外界暴露pt2模块。
目录
自定义模块
  1. 什么是模块:本质就.py文件,封装语句的最小单位。
  2. 自定义模块:
    • 编写自定义模块开头最好用多行注释说明模块内容。
    • 模块中出现的变量(for循环、if结构、函数定义等)称为模块的成员。
    • 模块的运行方式:
      1)脚本方式:直接用解释器执行,或者在Pycharm中右键运行。
      2)模块方式(导入方式):被其他的模块导入,为导入它的模块提供资源(变量、函数定义、类定义等)。
导入自定义模块:

1)模块被其他模块导入时,其中的可执行语句会立即执行。因此python中提供了一种可以判断自定义模块是属于开发阶段还是使用阶段的属性,即__name__print(__name__)#编写在自定义模块中以脚本方式运行时是固定的字符串__main__,在以模块被导入的方式运行时,会打印出自定义模块名。因此可以在自定义模块代码中编写if __name__ =='__main__:'以用来判断是否需要直接运行模块中的语句(即判断是处于开发阶段还是使用阶段)。

2)通常定义函数(包含测试函数),再将函数的调用放在if __name__=='__main__':(快捷键:main+回车)代码块下。这样当自定义模块被导入时可执行语句不会直接运行。

3)自定义模块的使用:模块名.成员名(以import xxx方式导入)
4)在同级目录下导入模块:直接导入。

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()
导入模块的方式:
  1. import xxx:导入一个模块的所有成员。必须使用模块名作为前缀。
    2)import xxx,yyy,....:一个性导入多个模块的成员,不推荐这种写法,建议分开写。但经常将这两个模块放在一块写:import os,sys
    3)from xxx import y:从某个模块中导入指定的成员。
    4)from xxx import a,b,c,......:从某个模块中导入多个成员。
    5)from xxx import *:默认从某个模块中导入全部成员,不用使用模块名作为前缀,直接使用成员名即可。为了避免导入多余的成员python默认使用了一个指令__all__,它是一个列表,用于表示本模块可以被外界使用的成员,元素是成员名组成的字符串。即在自定义模块中编写__all__=['','',...]列表中应是可被导入用的成员。但__all__只对此种导入方法起作用。
    6)用3,4,5方法容易导致命名冲突。在后面定义的成员生效,会吧前面重名的成员覆盖。
    7)为了避免6所叙述的问题,可以使用别名(alias,缩写为as)导入:import xxx as z 导入xxx模块重命名为z。
    8):from xxx import yyy as z导入xxx模块将成员名重命名为z。
相对导入:

1)针对某个项目中的不同模块之间进行导入,称为相对导入(模块间必须有同一个文件夹路径)。

2)相对导入只有一个语法:from 相对路径 import xxx
相对路径:包含了点号的一个相对路径。
.:表示当前的路径。
..:表示的是父路径
...:表示的是父路径的父路径
..x.y:表示的是父路径下x文件夹下的y文件(夹)

举例:在python文件夹下有t1和t2两个文件夹,t1和t2文件夹下分别有pt1.py和pt2.py两个模块。python文件夹在WorkSpace文件夹下,WorkSpace下有一个main.py文件。

#相对导入(在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 *
常用模块:random(后续更新)

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库默认以系统时间产生当做随机数种子。设置随机数种子的好处是可以重复在现相同的随机数序列。

免责声明:文章转载自《day15自定义模块的导入》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇RN app打包Linux 内核编译步骤及配置详解下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

C#程序执行Python脚本

方法介绍:      通过调用“Python.exe”程序,执行脚本文件。所以,本方式要求电脑上已经安装了Python,拥有程序Python.exe程序。 现在,有如下py脚本:Add.py import sys def Add(a,b): return a+b if __name__=='__main__': X = int(sys....

python paramiko 模块

1.什么是paramiko? paramiko模块提供了基于ssh连接,进行远程登录服务器执行命令和上传下载文件的功能。这是一个第三方的软件包,使用之前需要安装。 pip homepage: http://www.paramiko.org/ pip github addr: https://github.com/paramiko 官方推荐安装方法: pip...

python机器学习sklearn 岭回归(Ridge、RidgeCV)

  1、介绍     Ridge 回归通过对系数的大小施加惩罚来解决 普通最小二乘法 的一些问题。 岭系数最小化的是带罚项的残差平方和,          其中,α≥0α≥0 是控制系数收缩量的复杂性参数: αα 的值越大,收缩量越大,这样系数对共线性的鲁棒性也更强。        2、参数         alpha:{float,array-like}...

Python进阶 学习笔记(三)

(涉及内容:定制类) __str__和__repr__ 如果要把一个类的实例变成 str,就需要实现特殊方法__str__(): class Person(object): def __init__(self, name, gender): self.name = name self.gender = ge...

关于Python的post请求报504错误

这是个奇葩的问题,我也是奇葩的研究了好几天,最后发现,哈,原来是这个原因,在此记录下曲折的心路历程 接口Content-Type没有,body用的是postman中的raw数据,格式是text 程序如下: importrequests url = "https://XXXXXX.com/api/user_device" headers = {...

python torch 解决OSError: [WinError 126] 找不到指定的模块。 Error loading "D:Anaconda3libsite-packages orchlibasmjit.dll" or one of its dependencies.(安装完torch模块后出现找不到指定模块的问题)

昨天安装了一下python的torch模块,然后出现了以下错误: 根据叙述是因为dll文件,后来 经过我的思考...,升级了一下numpy库,就没有问题了。 根据叙述是因为dll文件,后来 经过我的思考...,升级了一下numpy库,就没有问题了。 如果上述解决不了,那么可能是因为缺少C++运行库,如下图。然后下载了个Visual Studio C++。...