author: UpDown published: True created: 2022年5月10日15点00分 tags: Done version: Outer
导入方法一
import module1,mudule2...
import math
#这样会报错
print sqrt(2)
#这样才能正确输出结果
print math.sqrt(2)
导入方法二
有时候我们只需要用到模块中的某个函数,只需要引入该函数即可,此时可以用下面方法实现:from 模块名 import 函数名1,函数名2....
- 通过这种方式引入的时候,调用函数时只能给出函数名,不能给出模块名,但是当两个模块中含有相同名称函数的时候,后面一次引入会覆盖前一次引入。也就是说假如模块A中有函数function( ),在模块B中也有函数function( ),如果引入A中的function在先、B中的function在后,那么当调用function函数的时候,是去执行模块B中的function函数。
- 如果想一次性引入math中所有的东西,还可以通过
from math import *
来实现,这提供了一个简单的方法来导入一个模块中的所有项目。然而这种声明不该被过多地使用。as
参考:https://blog.csdn.net/chaoguo1234/article/details/81277589
import time as tt
time.sleep(1)# 错误用法
tt.sleep(1)# 正确用法
需要注意的是,使用as语法之后,只能通过as后面名字来访问导入的moudle
模块位置的搜索顺序
当你导入一个模块,Python解析器对模块位置的搜索顺序是:
- 当前目录
- 如果不在当前目录,Python则搜索在shell变量PYTHONPATH下的每个目录。
- 如果都找不到,Python会察看默认路径。UNIX下,默认路径一般为/usr/local/lib/python/
- 模块搜索路径存储在system模块的sys.path变量中。变量里包含当前目录,PYTHONPATH和由安装过程决定的默认目录。
模块制作
https://blog.updown.world/articles/python/pythonbook/file/5/section.8.html
在Python中,每个Python文件都可以作为一个模块,模块的名字就是文件的名字。
name
if __name__ == '__main__':
# 其他文件引入后无法执行的代码,一般用来测试代码
all
- 定义了all属性,只能导入all中定义的属性,方法和类
- 放入all中所有属性均可导入,即使是以下划线开头
__all__=('func','__func','_A') #放入__all__中所有属性均可导入,即使是以下划线开头
class _A():
def __init__(self,name):
self.name=name
def func():
print 'func() is called!'
def func1():
print 'func1() is called!'
def _func():
print '_func() is called!'
def __func():
print '__func() is called!'
包
import 包名.模块名
包名.模块名.⽬标
- 包将有联系的模块组织在一起,即放到同一个文件夹下,并且在这个文件夹创建一个名字为init.py 文件,那么这个文件夹就称之为包
- init.py 控制着包的导入行为
- 在init.py文件中,定义一个all变量,它控制着 from 包名 import *时导入的模块
- python3中,如果init.py文件内容是空的,也不需要在里面写代码,那么可以不用添加init.py,但python2不行
init.py为空
仅仅是把这个包导入,不会导入包中的模块