python之import模块及包的调用
模块概念
在Python中,一个.py文件就称之为一个模块(Module)。使用模块组织代码,最大的好处是大大提高了代码的可维护性
模块一共三种:python标准库、第三方模块、应用程序自定义模块。
相同名字的函数和变量完全可以分别存在不同的模块中,因此,我们自己在编写模块时,不必考虑名字会与其他模块冲突。但是也要注意,尽量不要与内置函数名字冲突。
模块导入
import语句
1 import module1[, module2[,... moduleN]
import一个模块的实质就是把这个python文件从头到尾执行一遍
import模块的查找模块的顺序
1、先从当前目录下找
2、当前目录下找不到的话,在从sys.path的路径找
从上面两个目录都找不到,那就报错
每次import的时候,都会相应的开辟内存空间存放被import的内容,但是与调用import的文件开辟的内存空间相互独立。例如import foo.py在新建的名称空间里执行源文件(foo.py)代码时,所有对全局名称空间的引用或修改,都是以foo.py为准。
注意:
一个模块可以在当前位置import多次,但是只有第一次导入会执行内容,其他的都为引用内存
更改调用名称:将logging更改为log
1 import logging as log
2 log.critical("www")
from...import语句
1 from modname import name1[, name2[, ... nameN]]
这个声明不会把整个modulename模块导入到当前的命名空间中,只会将它里面的name1或name2单个引入到执行这个声明的模块的全局符号表。
moudel_name.py

# -*- coding:utf-8 -*-
print("This is module_name.py") name = 'Hello' def hello():
print("Hello")

module_test04.py

# -*- coding:utf-8 -*-
import module_name def a():
module_name.hello()
print("fun a") def b():
module_name.hello()
print("fun b") a()
b()


运行结果:
E:\PythonImport>python module_test04.py
This is module_name.py
Hello
fun a
Hello
fun b

多个函数需要重复调用同一个模块的同一个方法,每次调用需要重复查找模块。所以可以做以下优化:
module_test05.py

# -*- coding:utf-8 -*-
from module_name import hello def a():
hello()
print("fun a") def b():
hello()
print("fun b") a()
b()


运行结果:
E:\PythonImport>python module_test04.py
This is module_name.py
Hello
fun a
Hello
fun b

可以使用"from module_name import hello"进行优化,减少了查找的过程。
包的调用
为了避免模块名冲突,Python又引入了按目录来组织模块的方法,称为包(Package)。

每一个包目录下面都会有一个__init__.py的文件,这个文件是必须存在的,否则,Python就把这个目录当成普通目录(文件夹),而不是一个包。__init__.py可以是空文件,也可以有Python代码,因为__init__.py本身就是一个模块,而它的模块名就是对应包的名字。调用包就是执行包下的__init__.py文件。
跨包调用(当前目录下有modulepack1包):
1 from modulepack1[.modulepack2] import module
如果当前目录下能够找到要调用的包,可以直接from包import模块,如果当前目录找不到要调用的包,需要向sys.path添加包的所在绝对路径。
import一个包名,就等于执行了这个包下的__init__文件。
示例:

在nod1里import hello是找不到的,需要手动添加包路径,如果找到那是因为pycharm给加了不必要的路径,以命令行执行为准。
1 import sys,os
2 BASE_DIR=os.path.dirname(os.path.dirname(os.path.abspath(__file__))) #__file__获取执行文件相对路径,整行为取上一级的上一级目录
3 sys.path.append(BASE_DIR) #添加路径
4 import hello
5 hello.hello1()
将包设置为程序代码的根目录

模块调用测试
1 if __name__=='__main__': #__name__方法判断
2 print('ok')
在一个py模块直接执行print(__name__)会输出__main__,表示当前这个文件属于执行文件,如果从其他的py模块中导入一个py模块,执行被导入的py模块中的print(__name__)会输出被导入的模块的模块名称,那么if判断就不会成功,所以导入的时候不会执行判断内的代码。
主要用在调试功能,即一个模块被调用的时候不执行内容,而自己调试模块的时候可以顺利的执行模块内容。
内建函数
可以通过 "print(dir(__builtins__))" 查看Python中的内建函数
非内建函数需要使用"import"导入。Python中的模块文件在"安装路径\Python\Python35\Lib"目录下。

python之import模块及包的调用的更多相关文章
- 【python】import 模块、包、第三方模块
xx.py文件,称为模块(module),把不同模块归整到一起的文件夹,叫做包(package) 不同包下的模块可以重名,但是都不能和系统内建模块重名 包里面一定要有个__init__.py文件,否则 ...
- Python中函数、类、模块和包的调用
初学python阶段,大多数人对函数.类.模块和包的调用都搞得不是很清楚,这篇随笔就简单的进行说明. (1)函数 当函数定义好之后,可以直接调用. 比如:def summ(add1,add2),那么 ...
- 二十五. Python基础(25)--模块和包
二十五. Python基础(25)--模块和包 ● 知识框架 ● 模块的属性__name__ # my_module.py def fun1(): print("Hello& ...
- 当导用模块与包的import与from的问题(模块与包的调用)
当在views.py里写impor models会不会报错呢? 1.Python里面的py文件都是每一行的代码. 2.Python解释器去找一个模块的时候,只去sys.path的路径里找 3.djan ...
- 【Python实战】模块和包导入详解(import)
1.模块(module) 1.1 模块定义 通常模块为一个.py文件,其他可作为module的文件类型还有".pyo".".pyc".".pyd&qu ...
- Python类、模块、包的区别
类 类的概念在许多语言中出现,很容易理解.它将数据和操作进行封装,以便将来的复用. 模块 模块,在Python可理解为对应于一个文件.在创建了一个脚本文件后,定义了某些函数和变量.你在其他需要这些功能 ...
- Python进阶之模块与包
模块 .note-content {font-family: "Helvetica Neue",Arial,"Hiragino Sans GB","S ...
- 浅析python 的import 模块(转)
摘要: 学习python有几天了,对import一直不是很清楚,和C里面的include是否一样,重复引入有问题么?搜索路径是怎样的?整理解决下我的疑问. 一 模块的搜索路径 模块的搜索路径都放在了s ...
- python之路模块与包
一.import加载的模块分为四个通用类别: 1 使用python编写的代码(.py文件) 2 已被编译为共享库或DLL的C或C++扩展 3 包好一组模块的包 4 使用C编写并链接到 ...
随机推荐
- TestNg 3.忽略测试
有些测试本身不想执行,但是删掉显得不合理,需要忽略这个测试用例 package com.course.testng; import org.testng.annotations.Test; publi ...
- Doing Homework HDU - 1074 (状压dp)
Ignatius has just come back school from the 30th ACM/ICPC. Now he has a lot of homework to do. Every ...
- position:fixed固定定位的用法
一.position:fixed:固定定位 1.实现某个元素在可视窗口的居中位置显示 1)给自身设置宽高: 2)给自身加position:fixed: 3)用margin向左移动自身宽度的一半,向上移 ...
- SSH框架下ajax调用action并生成JSON再传递到客户端【以get和post方式提交】
需要完成的任务: 主要是把JSP页面上图片ID传给服务器端,服务器读取cookie看是否有username,如果有则根据ID读取MongoDB数据库,读出图片URL,再存放到mysql中的collec ...
- (字典序问题) nyoj1542-最小字符串
题目描述: 给你一个由小写字母组成的字符串,最多删除其中一个字符,使其字典序最小. 字典序概念在数学中,字典或词典顺序(也称为词汇顺序,字典顺序,字母顺序或词典顺序)是基于字母顺序排列的单词按字母顺序 ...
- eclipse设置
一.更改文件默认编码 一般每个项目及其项目中的文件的编码都要保持一致,主要是为了不让保存的内容出现乱码:一般会设置UTF-8这个编码格式 设置文件默认编码: windows-->General- ...
- python自动化开发-[第二十一天]-form验证,中间件,缓存,信号,admin后台
今日概要: 1.form表单进阶 2.中间件 3.缓存 4.信号 5.admin后台 上节课回顾 FBV,CBV 序列化 - Django内置 - json.dumps(xxx,cls=) Form验 ...
- [ZJOI2007]棋盘制作 悬线法dp 求限制下的最大子矩阵
https://www.luogu.org/problemnew/show/P1169 第一次听说到这种dp的名称叫做悬线法,听起来好厉害 题意是求一个矩阵内的最大01交错子矩阵,开始想的是dp[20 ...
- JAVA核心技术I---JAVA基础知识(抽象类和接口)
一:抽象类 (一)定义 类:属性(0或多个)+方法(0或多个)一个完整(健康)的类:所有的方法都有实现(方法体)类可以没有方法,但是有方法就肯定要有实现,这才是一个完整的类一个完整的类才可以被实例化, ...
- python 面向对象(六)MRO C3算法 super
########################总结################ 面向对象回顾 类:对某一个事物的描述,对一些属性和方法的归类 class 类名: var=123#类变量 def ...