目录

模块的导入方式一:import

模块导入方式二:from

模块当脚本使用

获取模块中定义的属性名或方法名

模块
Python中的一个py文件就是一个模块,文件名就是模块名

模块的导入

1. 模块的导入,只导入一次,放到sys.modules字典中2. 模块导入的名称,可以通过全局函数查看globals()3. 修改了模块内容,必须重启服务,python不支持自动更新模块4. 模块导入建议遵循PEP8规则,先内置,再第三方,最后自定义的,每种类型间空一行

模块执行的顺序

内存中已经加载的模块---> 内置模块 ---> sys.path路径列表中包含的模块【从左至右查找】!!!如果您导入模块或包时出现找不到该模块,记得回想下模块的导入顺序

test.py文件内容

def my_test():   print("from test.py:学习模块")my_test()

模块的导入方式一:import

语法:import 模块名

import testimport test"""结果为:from test.py:学习模块"""# 发现导入多次,仅仅执行一次,这是Python的优化,第一次导入就加载进了内存,后面再导入是对内存的模块增加一次引用

特点:

1. 每个模块拥有自己的独立空间,模块中定义的变量或方法,并不会与调用者自己定义的相同名字的变量或方法冲突,因为使用的时候是以模块名.变量或方法名来调用的

为模块其别名:import 模块名 as 别名

一次导入多个模块

import os,sys,time

模块导入方式二:from

语法:from 模块名 import  需要的方法或属性名特点:1. 仅仅将需要导入的模块中的部分导入到当前模块的命名空间中,相对于import导入,调用是需要"模块名.属性名或方法",而from的方式导入,可以直接使用导入的名字import testtest.my_test()from test import my_testmy_test()2. 如果从模块导入的方法名或属性名,与当前文件中的名称重合,则根据调用时的顺序看是否被当前环境对应的方法或属性名覆盖如当前环境:from test import my_testmy_test()  ---> from test.py:学习模块def my_test():   print(f"from {__name__}.py")my_test()  ---> from __main__.py# 因此为了防止这种情况发生,我们一般为导入模块的方法名或属性名,再起个别名,这样就不会出现覆盖现象from test import my_test as o_testo_test()  ---> from test.py:学习模块

一次导入多个:from 模块名 import (属性名1,属性名2)

模糊导入:【不建议使用】from 模块名 import *

1. 这种是将模块中的所有【非下划线(_xxx)开头定义的属性或方法名】都导入到当前空间,但你要知道原模块中有哪些方法名或属性名,才能使用,且这种情况很容易与当前环境中相同名称的属性或方法发生覆盖现象2. 在原模块中增加一行下面的代码,则from xx import * 的方式只会导入列表中的名称,模块中定义的其他的名字,没写进去,是没法导入的,这种在很多第三方包中可以看到__all__=["my_test",……]

模块当脚本使用
python通过全局变量name 来查看模块的名字,python规定如下:

name=="main"时,表示直接执行当前脚本,相当于控制台输入python 模块名.py

name==模块名 时,表示被别的模块引用

# test.pydef test():    print("from test.py")if __name__ == '__main__':    print(__name__)    test()# 故以上代码,如果当脚本直接执行,就会执行if下的语句,如果当模```块引用,if下的语句就不会被执行当我们不知道模块的路径时,可以通过python -m 模块名 当脚本执行,我们在安装离线包时就用到了这种方法,它会搜索sys.path查找含对应模块名或包,并将其当脚本来执行

查看python的官方文档,下面命令就会启动一个http server,在浏览器中打开,http://localhost:9000

python -m pydoc -p 9000

启动一个http Server,可查看执行目录下的所有文件,支持浏览器下载

python -m http.server 8000

获取模块中定义的属性名或方法名

dir(模块名)

import sys
import builtins
import test_model

print(dir(builtins)) # 获取内置模块的属性名或方法名
print(dir(test_model)) # 获取指定模块中定义的属性名或方法名
print(sys.path) # 获取当前模块的搜索路径列表
print(sys.modules) # 获取当前解析器环境中导入的模块,包含内置模块

**包**Python中的包是通过使用.模块名,来组织Python模块名称空间的方式。本质:文件夹中含有__init__文件的目录,就是包导入方式:import 包名  或from 包名.模块名 import 方法或属性名导入包的本质:就是导入__init__,所以你能看到很多第三方包,都把实现能力的方法或变量导入到该文件下,我们就不用关心包里面的目录结构,只需包名.属性或方法名即可使用,非常方便绝对导入:以项目根目录为起始相对导入:以.或..的方式为起始(相对当前文件的位置,只能在一个包中使用,不能用于不同目录内)小结:如果您担心您的包或模块导入报错,就将其加入当前解析器环境中吧,sys.path.app(根目录),始终记住导包时,是以当前目录下找对应的模块的,没有就去sys.path中找,还没有,就报找不到该模块的异常
©著作权归作者所有:来自51CTO博客作者mob604756e88498的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. Shopify 是如何迁移到模块化单体架构的?
  2. python里使用rabbitmq模块
  3. 深浅COPY
  4. 0-10V转0-10V隔离器,信号转换器,信号分配模块
  5. 调用函数以及常用模块
  6. 重构单体为微服务
  7. 苏宁大数据离线任务开发调度平台实践:任务调度模块架构设计
  8. HBase数据导入工具总结
  9. 态路小课堂丨QSFP-DD封装模式光模块接口类型:LC/MPO12/MPO16/MPO2

随机推荐

  1. 小学徒进阶系列—JVM对String的处理
  2. 关于几个位运算的算法分析
  3. Java保存特大数据
  4. javascript 设计模式之观察者模式
  5. hbase编程:通过Java api操作hbase
  6. 初学Java:我为什么来学Java?
  7. 使用Java中的Scala:将函数作为参数传递
  8. 【JAVA】用java编写程序时总提示缺少方法
  9. 来谈谈JAVA面向对象 - 鲁班即将五杀,大乔
  10. MongoDB中的按组计算的字段