概述
预览
下载方式
高清思维导图下载
关注下方公众号
回复:“py12”
长按上方二维码即可关注
回复:“py12”领取
什么是模块
一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀。
import加载的模块分为四个通用类别
1 使用python编写的代码(.py文件)
2 已被编译为共享库或DLL的C或C++扩展
3 包好一组模块的包
4 使用C编写并链接到python解释器的内置模块
为何要使用模块?
如果你退出python解释器然后重新进入,那么你之前定义的函数或者变量都将丢失,因此我们通常将程序写到文件中以便永久保存下来,需要时就通过python test.py方式去执行,此时test.py被称为脚本script。
随着程序的发展,功能越来越多,为了方便管理,我们通常将程序分成一个个的文件,这样做程序的结构更清晰,方便管理。这时我们不仅仅可以把这些文件当做脚本去执行,还可以把他们当做模块来导入到其他的模块中,实现了功能的重复利用,
学习python
http://dida100.com/it/
模块的使用
示例文件:自定义模块my_module.py,文件名my_module.py,模块名my_module
次导入模块my_module时会做三件事
1.为源文件(my_module模块)创建新的名称空间,在my_module中定义的函数和方法若是使用到了global时访问的就是这个名称空间。
2.在新创建的命名空间中执行模块中包含的代码,见初始导入import my_module
In fact function definitions are also ‘statements’ that are ‘executed’; the execution of a module-level function definition enters the function name in the module’s global symbol table.
4 事实上函数定义也是“被执行”的语句,模块级别函数定义的执行将函数名放入模块全局名称空间表,用globals()可以查看3.创建名字my_module来引用该命名空间
这个名字和变量名没什么区别,都是‘第一类的’,且使用my_module.名字的方式可以访问my_module.py文件中定义的名字,my_module.名字与test.py中的名字来自两个完全不同的地方。
为模块名起别名,相当于m1=1;m2=m1
1 import my_module as sm
2 print(sm.money)
示范用法一:有两中sql模块mysql和oracle,根据用户的输入,选择不同的sql功能
#mysql.py
def sqlparse():
print("from mysql sqlparse")
#oracle.py
def sqlparse():
print("from oracle sqlparse")
#test.py
db_type=input(">>: ")
if db_type =="mysql":
import mysql as db
elif db_type == "oracle":
import oracle as db
db.sqlparse()
示例用法1
示范用法二:为已经导入的模块起别名的方式对编写可扩展的代码很有用,假设有两个模块xmlreader.py和csvreader.py,它们都定义了函数read_data(filename):用来从文件中读取一些数据,但采用不同的输入格式。可以编写代码来选择性地挑选读取模块,例如
if file_format == "xml":
import xmlreader as reader
elif file_format =="csv":
import csvreader as reader
data=reader.read_date(filename)
在一行导入多个模块
1 import sys,os,re
from ... import...
对比import my_module,会将源文件的名称空间'my_module'带到当前名称空间中,使用时必须是my_module.名字的方式而from 语句相当于import,也会创建新的名称空间,但是将my_module中的名字直接导入到当前的名称空间中,在当前名称空间中,直接使用名字就可以了、 1 from my_module import read1,read2这样在当前位置直接使用read1和read2就好了,执行时,仍然以my_module.py文件全局名称空间
#测试一:导入的函数read1,执行时仍然回到my_module.py中寻找全局变量money
#demo.py
from my_module import read1
money=1000
read1()
执行结果:
from the my_module.py
spam->read1->money 1000
# 测试二:导入的函数read2,执行时需要调用read1(),仍然回到my_module.py中找read1()
# demo.py
from my_module import read2
def read1():
print("==========")
read2()
执行结果:
from the my_module.py
my_module->read2 calling read1
my_module->read1->money 1000
如果当前有重名read1或者read2,那么会有覆盖效果。
#测试三:导入的函数read1,被当前位置定义的read1覆盖掉了
#demo.py
from my_module import read1
def read1():
print("==========")
read1()
执行结果:
from the my_module.py
需要特别强调的一点是:python中的变量赋值不是一种存储操作,而只是一种绑定关系,如下:
from my_module import money,read1
money=100 #将当前位置的名字money绑定到了100
print(money) #打印当前的名字
read1() #读取my_module.py中的名字money,仍然为1000
from the my_module.py
my_module->read1->money 1000
也支持as
from my_module import read1 as read
也支持导入多行
from my_module import (read1,ead2, money)
from my_module import *
把my_module中所有的不是以下划线(_)开头的名字都导入到当前位置,大部分情况下我们的python程序不应该使用这种导入方式,因为*你不知道你导入什么名字,很有可能会覆盖掉你之前已经定义的名字。而且可读性极其的差,在交互式环境中导入时没有问题。
from my_module import * #将模块my_module中所有的名字都导入到当前名称空间
print(money)
print(read1)
print(read2)
print(change)
执行结果:
from the my_module.py
<function read1 at 0x1012e8158>
<function read2 at 0x1012e81e0>
<function change at 0x1012e8268>
模块搜索路径
模块的查找顺序是:内存中已经加载的模块->内置模块->sys.path路径中包含的模块
特别注意的是:我们自定义的模块名不应该与系统内置模块重名。
详见博客
dir()函数
内建函数dir是用来查找模块中定义的名字,返回一个有序字符串列表
import my_module
dir(my_module)
如果没有参数,dir()列举出当前定义的名字dir()不会列举出内建函数或者变量的名字,它们都被定义到了标准模块builtin中,可以列举出它们,
import builtins
dir(builtins)
`
下载方式
高清思维导图下载
关注下方公众号
回复:“py12”
长按上方二维码即可关注
回复:“py12”领取
阅读更多
思维导图:python字符串
思维导图:Python爬虫
思维导图:python列表
思维导图:python字典
思维导图:python标准库6张图
思维导图:10个python常用库
思维导图:最全python学习路线图
6张思维导图,带你征服java编程
一张图秒懂C语言函数
一张图秒懂C语言( 指针 )
一张图秒懂C语言( 数组 )
C语言系列教程10篇
最后
以上就是淡淡薯片为你收集整理的学python必会的12个模块什么是模块的全部内容,希望文章能够帮你解决学python必会的12个模块什么是模块所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复