Python 模块详解及import本质
同在当前目录下的模块和包导入
模块定义
- 本质就是.py结尾的python文件. 用来从逻辑上组织python代码(变量,函数,类,逻辑)
- 文件名: test.py; 对应的模块名 : test
模块导入方式
- import module_name
- 调用时需要加module_name. (有点类似java中的类名.调用)
- import module1_name, module2_name
- 调用时需要加module_name (有点类似java中的类名.调用)
- from module_name import *
- 不建议用这种方法. 若导入的包中变量名或方法名与当前文件的变量名或方法名一样, 这样会有冲突. 当前文件中同名的方法会覆盖导入文件中的同名方法.
- 调用时可以直接调用变量名或方法名, 不需要加module_name. (有点像java中调用同一个类中的方法, 直接用就行, 不用加类名.)
- from module_name import logger as logger_alex (导入和当前文件中方法同名的方法时可以起个别名logger_alex,以避免和当前文件中的方法冲突)
- 调用时可以直接调用变量名或方法名, 不需要加module_name. (有点像java中调用同一个类中的方法, 直接用就行, 不用加类名.)
导入模块本质
- 导入模块的本质就是把python文件解释一遍
例:
module_alex
name='alex'
def say_hello():
print('hello alex') def logger():
print('logger')
# 导入方法1, 导入指定变量名或方法
import module_alex print(module_alex.name)
module_alex.say_hello() # 导入方法2, 导入某个文件全部 (相当于把导入文件的代码加到当前文件中, 所以调用其方法不需要再加文件名,可直接调用)
from module_alex import *
logger() # 若当前文件中也有一个方法名叫logger(), 这样会有冲突. 当前文件的logger()会覆盖导入文件中的logger()方法
包定义
- 本质就是一个目录(必须有一个__init__.py文件)
- 用来从逻辑上组织模块
包导入方式
- import package_name
- 包导入的本质
- 导入包的本质就是执行该包下的__init__.py文件4
- 若包下面除了__init__.py还有其它文件, 想要调用这些文件, 直接 package_name.test1是不行的, 因为导入包的本质是执行下面的__init__.py文件.
- 这种情况下, 需要在__init__.py文件中导入该package_name下的其它文件
- 也可以在__init__.py文件中用from.import test1 (代表从当前目录下导入test1)的方法导入同一目录下的另一个python文件test1.

例:
import package_test
不在当前目录下的模块和包导入
默认情况下, 不在当前目录下无法导入.
导入模块动作解析:
找到要导入的模块的路径再导入 (在sys.path中寻找. sys.path中存储的第一个路径就是当前路径)
import module_name ----> module_name.py ----> 找到module_name.py的路径 ----> sys.path
要想导入不在当前目录下的模块或包, 要把它的绝对路径(os.path.abspath(__file__))加入sys.path.
path = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.append(path) # 这样这个路径会在最后面,每次都要遍历到最后才能找到(如果中途没有同名文件的话)
sys.path.insert(0,path) # 将该路径插到前面去 import module_alex # 加完路径再导入就可以了
module_alex.logger() # 调用时要加module_name.来调用
导入优化
# 若一段代码中多次调用另一个文件中的一个方法, 这样调用会在各个方法中反复找该方法
import module_test def logger():
module_test.test()
print('in the logger') def search():
module_test.test()
print('in the search') # 优化
from module_test import test def logger():
test()
print('in the logger') def search():
test()
print('in the search')
Python 模块详解及import本质的更多相关文章
- 小白的Python之路 day5 python模块详解及import本质
一.定义 模块:用来从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能) 本质就是.py结尾的python文件(文件名:test.py,对应的模块名:test) 包:用来从逻辑上组织模块 ...
- Python模块详解以及import本质,获得文件当前路径os.path.abspath,获得文件的父目录os.path.dirname,放到系统变量的第一位sys.path.insert(0,x)
模块介绍 1.定义: 模块:用来从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能),本质就是.py结尾的python文件(文件名:test.py,对应的模块名:test) 包:用来从逻 ...
- Python:模块详解及import本质
转于:http://www.cnblogs.com/itfat/p/7481972.html 博主:东大网管 一.定义: 模块:用来从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能), ...
- 模块详解及import本质
一.模块的定义 用来从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能) 本质就是.py结尾的Python文件(文件名test.py,对应的模块名:test) 包:用来从逻辑上组织模块的 ...
- python模块详解
什么是模块? 常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 但其实import加载的模块分为四个通用类别: 1 使用python编写的代码(.p ...
- python模块详解 | selenium(持续更新中)
目录: 关于selenium Selenium 安装Selenium 安装浏览器驱动 配置环境变量 selenium方法详解 定位元素 元素操作 浏览器操作 鼠标事件 浏览器事件 设置元素等待 多表单 ...
- python模块详解 random os
random模块 常用方法 random.random() 随机产生一个小于1的浮点数 import random print(random.random()) #0.4153761818276826 ...
- python模块详解 | shutil
简介: shutil是python的一个内置模块,提供了许多关于文件和文件集合的高级操作,特别提供文件夹与文件操作.归档操作了支持文件复制和删除的功能. 文件夹与文件操作: copyfileobj(f ...
- python模块详解 sys shutil
sys模块 sys.argv 命令行参数List,第一个元素是程序本身路径 sys.exit(n) 退出程序,正常退出时exit(0) sys.version 获取Python解释程序的版本信息 sy ...
随机推荐
- 8 个实用的 Bootstrap 3 案例教程
Bootstrap 3发布各大设计论坛议论纷纷.这次Bootstrap 3最大的特点就是--扁平化.下面就是一些早期的Bootstrap 3例子,不过亲们注意咯,因为大部分最早期的测试案例,可能用到一 ...
- SharePoint 调用WebService操作List小记
简述:在SharePoint的使用中,经常需要进行系统集成这样的操作,我们作为SharePoint开发,就需要给其他系统提供接口,而SharePoint提供的WebService就很好的提供了这样的功 ...
- obj-c编程03:多个参数方法的定义
好吧,虽说本猫不能自吹精通十几种语言,但是也见过十几种语言的语法啊.像obj-c这样奇葩,或者说另类的写法还是头一次见到,完整写法我都不知道怎么起方法名了.虽说有简短写法,可和C比起来那个" ...
- LeetCode(30)-Pascal's Triangle
题目: Given numRows, generate the first numRows of Pascal's triangle. For example, given numRows = 5, ...
- Javascript、CSS、HTML面试题
1 JS中的三种弹出式消息提醒(警告窗口.确认窗口.信息输入窗口)的命令是什么? alert confirm prompt 2声明一个已经存在一个CSS有几种方式? 1.导入一个已经存 ...
- gitolite服务器部署中的一些坑
1.秘钥登录问题可参考< 安装gitolite,并ssh公钥无密码登录>http://www.cnblogs.com/tr0217/p/4517952.html,该文中推荐了阮一峰的< ...
- 移动端h5实现复制功能
首先遇到这个需求是就各种百度,但是发现基本都是用js实现,而且兼容性还非常不好. 但是在寻觅和尝试的过程中,发现只需要css代码也可以完全实现的,对需要复制内容的标签加上下面这几行代码就可以了. -w ...
- XGBoost算法--学习笔记
学习背景 最近想要学习和实现一下XGBoost算法,原因是最近对项目有些想法,准备做个回归预测.作为当下比较火的回归预测算法,准备直接套用试试效果. 一.基础知识 (1)泰勒公式 泰勒公式是一个用函数 ...
- Taurus.MVC 支持Asp.Net Core 的过程
前言: 这些天,似乎.NET Core相关的新闻和文章经常在我眼前晃~~~ 昨天,微软又发布了.Core 2.1,又愰了一下,差点没亮瞎我的眼睛. 好吧,大概是上天给我的暗示,毕竟 CYQ.Data ...
- leetCode刷题(将字符串转成W形状的字符串再以Z形字符串输出)
The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like ...