模块与包
1 什么是模块?
一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀
2 为何要使用模块?
如果你对出python解释器然后重新进入,那么你之前定义的函数或者变量都将丢失,因此我们通常将程序写到文件中以便永久保存下来,需要时就通过python test.py方式去执行,此时test.py被称为脚本script
3 如何使用模块?
实例文件:spam.py ,文件名spam.py ,模块名spam
print("from the spam.py")
money=1000
def read1():
print("spam-->read1-->money,money")
def read2():
print("spam-->read2-->")
read1()
def change():
global money
money=0
3.1.1 模块可以包含可执行的语句和函数的定义,这些语句的目的是初始化模块,它们只在模块名第一次遇到导入import语句时才执行
python的优化手段是:第一次导入后就将模块名加载到内存了,后续的import语句仅是对已经加载大内存中的模块对象增加了一次引用,不会重新执行模块内的语句
import spam #只在第一次导入时才执行spam.py内代码,
# 此时的显示效果是只打印一次“from the spam.py"
import spam
import spam
import spam 执行结果为:
from the spam.py
3.1.2 每个模块都是一个独立的名称空间,定义在这个模块中的函数,把这个函数的名称空间当做全局名称空间。
这样我们在编写自己的模块时,就不用担心我们在定义在自己模块中全局变量会在被导入时,与使用者的全局变量冲突
#测试一:money与spam.money 不冲突
#test.py
import spam
money=100
print(spam.money) 执行结果:
from the spam.py
1000
#测试二:read1与spam.read1 不冲突
#test.py
import spam
def read1():
print("read1")
spam.read1() 执行结果:
from the spam.py
spam-->read1-->money,money
#测试三:执行spam.change()操作的全局变量money仍然是spam中
#test.py
import spam
money=10
spam.change()
print(money) 执行结果:
from the spam.py
10
总结:导入模块会执行文件
第一件事:创建名称空间,用来存放spam.py中定义的名字
第二件事:基于刚刚创建的名称空间来执行spam.py
第三件事:创建名字spam指向该名称空间,spam.名字的操作,都是以spam.py为准
3.1.3 为模块名起别名,相当于m1=1;m2=m1
import spam as sm
print(sm.money) 执行结果:
from the spam.py
1000
3.1.4 在一行导入多个模块
import sys,os,re
3.2 from ……import…..
3.2.1 对比import spam,会将源文件的名称空间“spam”带到当前名称空间时,使用时必须是spam.名字的方式。
而from语句相当于import。也会创建新的名称空间,但是将spam的名字直接导入到当前的名称空间中,在当前的名称空间中,直接使用名字就可以了
from spam import read1,read2
这样在当前位置直接使用read1和read2就好了,执行时,仍然以spam.py文件全局名称空间
#测试一:导入的函数read1,执行时仍然回到spam.py中寻找全局变量money
#test.py
from spam import read1
money=1000
read1() 执行结果
from the spam.py
spam-->read1-->money,money
#测试二:导入的函数read2,执行时需要调用read1(),仍然回到spam.py中找read()
#test.py
from spam import read2
read2() 执行结果
from the spam.py
spam-->read2-->
spam-->read1-->money,money
如果当前有重名read1或者read2,那么会有覆盖效果
#测试三:导入的函数read1,会被当前位置定义的read1覆盖掉
#test.py
from spam import read1
def read1():
print("----->")
read1() 执行结果
from the spam.py
----->
需要特别强调的一点是:python中的变量赋值不是一种存储操作,而只是一种绑定关系
from spam import money,read1
money=100
print(money)
read1() 执行结果为:
from the spam.py
100
spam-->read1-->money,money
3.2.2 也支持as
form spam import read1 as read
3.2.3 支持导入多行
from spam import (read1,
read2,
money)
3.2.4 from spam import * 与__all__ * 控制来使用
在spam.py中新增一行
_all_=["money","read1"] #字符串形式
#test.py
from spam import * #不建议去用,避免重名
print(money)
print(read1) 执行结果
from the spam.py
1000
<function read1 at 0x02543390>
3.3 把模块当做脚本执行
我们通过模块的全局变量__name__来看模块名
当做脚本运行:
__name__等于”__main__”
当做模块导入:
__name__
print(__name__)
#test.py
import spam 执行结果
spam
作用:用来控制.py文件在不同的应用场景下执行不同的逻辑
if __name__ == '__main__':
print("文件当做脚本去执行") 执行结果
文件当做脚本去执行
3.4 模块搜索路径
结模块的查找顺序是:内存中已经加载的模块->内置模块->sys.path路径中包含的模块
import spam #先找内存:sys.modules-----》再找内建-----》最后找sys.path
在初始化后,python程序可以修改sys.path 路径放到前面优先于标准库被加载
import sys
sys.path.append(r'F:\\python_fullstack_s4\\day35\\模块')
sys.path.insert(0,r'F:\\python_fullstack_s4\\day35\\模块') #排在前面的目录,优先被搜索
python—-模块与包1的更多相关文章
-
Python/模块与包之模块
Python/模块与包之模块 1.什么是模块? 模块就是py文件 2.为什么要用模块? 如果在解释器上进行编码,把解释器关闭之前写的文件就不存在了,如果使用模块的话就能永久保存在磁盘中. 3.如何使用 ...
-
Python模块、包、异常、文件(案例)
Python模块.包.异常.文件(案例) python.py #模块 # Python中的模块(Module),是一个Python文件,以.py文件结尾,包含了Python对象定义和Python语句, ...
-
【Python】解析Python模块与包
模块 模块是非常简单的Python文件,单个Python文件就是一个模块,两个文件就是两个模块. import语句是用来导入模块或者从模块里导入特定的类或者函数.如前面我们用过的math模块,从而可以 ...
-
python 模块和包深度学习理解
python 模块和包 简单说相当于命名空间 1,python 模块 python模块就是一个文件,里面有函数,变量等 import 模块 模块.方法 from 模块 import fu ...
-
(三)运用Python模块和包
1 引言 为了能够在Python项目中高效地运用Python模块和包,我们需要进一步地来了解它们是如何在Python项目中进行定义.使用和工作的. 2 Python模块和包 Python模块和包的基本 ...
-
Python模块04/包/logging日志
Python模块04/包/logging日志 目录 Python模块04/包/logging日志 内容大纲 1.包 2.logging日志 3.今日总结 内容大纲 1.包 2.logging日志 1. ...
-
Python模块和包
模块和包是python组织代码的基本方式. 模块: python的每一个脚本文件都可称之为模块,模块的名称就是脚本的文件名.例如当我们写了一个test.py的脚本文件,则可以在同目录下的另外一个脚本m ...
-
python模块与包的导入
1. 模块与包的区别 模块,即module,一个包含python语句的.py文件就是一个模块!每个源代码文件都会自动成为模块!没有额外的语法用来声明模块. 包,又称模块包,即module packag ...
-
python模块及包的导入
一.模块 通常模块为一个文件,直接使用import来导入就好了.可以作为module的文件类型有".py".".pyo".".pyc".&q ...
-
简述Python模块和包
我们常常会使用别人写的包,假如我们使用的是Python3.4版本,安装在windows的C盘根目录下,那么外部的包一般放在:C:\Python34\Lib\sit-packages下,此目录下有以.p ...
随机推荐
-
Aspose.Words 16.8 破解版、添加自定义HTML导出Jpeg压缩质量配置
0x01 Aspose.Words 介绍Aspose.Words是一个商业.NET类库,可以使得应用程序处理大量的文件任务.Aspose.Words支持Doc,Docx,RTF,HTML,OpenDo ...
-
autolayout
autolayout.因为之前都是用frame,用代码来做,并且在布局时也很少用storyboard和xib.使得我再这方便经验很欠缺,想用,但是又怕用不好,出现各种意想不到的bug.但是又忽然想到, ...
-
终极解决方案:windows10资源管理器假死
想解决这个问题有以下几点: 1,不要相信所谓的powershell里面输命令可以重装系统自带应用从而解决假死问题! 2,不要相信烂大街的“自启动User Manager”服务可以解决假死问题! 3,不 ...
-
HDOJ/HDU 2203 亲和串(简单的判断~Java的indexOf()方法秒)
Problem Description 人随着岁数的增长是越大越聪明还是越大越笨,这是一个值得全世界科学家思考的问题,同样的问题Eddy也一直在思考,因为他在很小的时候就知道亲和串如何判断了,但是发现 ...
-
JAVA大数类
JAVA大数类api http://man.ddvip.com/program/java_api_zh/java/math/BigInteger.html#method_summary 不仅仅只能查J ...
-
【Howie玩docker】-命令行只显示-bash-4.1#
灵雀云上面用docker建了个centOS的实例,首个免费,正好当云主机来玩. 但是,打开有个问题,命令行不显示当前用户和路径. 只显示: -bash-4.1# 简单,配置文件不全而已. 下面对其重新 ...
-
Beta Scrum Day 3
听说
-
Vue 学习笔记 -- inline-template
简书 更方便的使用私有子组件 定义一个私有子组件时,如果子组件的template过长会使得代码非常难以阅读 这时可以使用内联模版 但是如果写成这样 为毛用要子组件呢?
-
Linux - Linux 终端命令格式
Linux 终端命令格式 目标 了解终端命令格式 知道如何查阅终端命令帮助信息 01. 终端命令格式 command [-options] [parameter] 说明: command:命令名,相应 ...
-
[译]ABP vNext微服务演示,项目状态和路线图
译注: ABP的主要负责人hikalkan最近又发布了一篇博客, 说明了ABP vNext的微服务演示,项目状态和路线图.其中特意对ABP的中文社区进行了感谢! 本文翻译自该博客文章(https:// ...