author: UpDown published: True created: 2022年5月10日15点00分 tags: Done version: Outer

导入方法一

import module1,mudule2...

  1. import math
  2. #这样会报错
  3. print sqrt(2)
  4. #这样才能正确输出结果
  5. 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

  1. import time as tt
  2. time.sleep(1)# 错误用法
  3. tt.sleep(1)# 正确用法

需要注意的是,使用as语法之后,只能通过as后面名字来访问导入的moudle

模块位置的搜索顺序

当你导入一个模块,Python解析器对模块位置的搜索顺序是:

  1. 当前目录
  2. 如果不在当前目录,Python则搜索在shell变量PYTHONPATH下的每个目录。
  3. 如果都找不到,Python会察看默认路径。UNIX下,默认路径一般为/usr/local/lib/python/
  4. 模块搜索路径存储在system模块的sys.path变量中。变量里包含当前目录,PYTHONPATH和由安装过程决定的默认目录。

    模块制作

    https://blog.updown.world/articles/python/pythonbook/file/5/section.8.html

在Python中,每个Python文件都可以作为一个模块,模块的名字就是文件的名字。

name

  1. if __name__ == '__main__':
  2. # 其他文件引入后无法执行的代码,一般用来测试代码

all

https://www.jb51.net/article/126875.htm

  • 定义了all属性,只能导入all中定义的属性,方法和类
  • 放入all中所有属性均可导入,即使是以下划线开头
    1. __all__=('func','__func','_A') #放入__all__中所有属性均可导入,即使是以下划线开头
    2. class _A():
    3. def __init__(self,name):
    4. self.name=name
    5. def func():
    6. print 'func() is called!'
    7. def func1():
    8. print 'func1() is called!'
    9. def _func():
    10. print '_func() is called!'
    11. def __func():
    12. print '__func() is called!'

    https://blog.csdn.net/l3142600073/article/details/94777746

  1. import 包名.模块名
  2. 包名.模块名.⽬标
  • 包将有联系的模块组织在一起,即放到同一个文件夹下,并且在这个文件夹创建一个名字为init.py 文件,那么这个文件夹就称之为包
  • init.py 控制着包的导入行为
  • init.py文件中,定义一个all变量,它控制着 from 包名 import *时导入的模块
  • python3中,如果init.py文件内容是空的,也不需要在里面写代码,那么可以不用添加init.py,但python2不行

image.png

init.py为空

仅仅是把这个包导入,不会导入包中的模块