python—-模块与包1

模块与包

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\\模块‘) #排在前面的目录,优先被搜索

  

 
时间: 2024-11-06 18:53:21

python—-模块与包1的相关文章

简述Python模块和包

我们常常会使用别人写的包,假如我们使用的是Python3.4版本,安装在windows的C盘根目录下,那么外部的包一般放在:C:\Python34\Lib\sit-packages下,此目录下有以.py单独存在的文件,也有以文件夹存在的包,下面我们简单说一下Python中的模块和包,看完之后,也许会对这个目录看的更清楚一些. 一.模块 我们编写文件:a.py,放在C:\Python34\Lib\sit-packages下,里面写上一句代码为: print('this is a') 之后我们就可以

Python/模块与包之包

Python/模块与包之包 1. 包是一种通过使用模块名 来组织Python模块名称空间的方式,一个类似于目录并存有__init__.py文件的被称为包 包的本质就是一个包含__init__.py文件的目录.包A和包B下有同名模块也不会冲突,如A.a与B.a来自俩个命名空间 无论是import形式还是from...import形式,凡是在导入语句中(而不是在使用时)遇到带点的,都要第一时间提高警觉:这是关于包才有的导入语法 包 通常包总是一个目录,可以使用import导入包,或者from + i

Python/模块与包之模块

Python/模块与包之模块 1.什么是模块? 模块就是py文件 2.为什么要用模块? 如果在解释器上进行编码,把解释器关闭之前写的文件就不存在了,如果使用模块的话就能永久保存在磁盘中. 3.如何使用模块? 3.1 import    通过import导入要使用的模块 1 #spam.py 2 print('from the spam.py') 3 4 money=1000 5 6 def read1(): 7 print('spam->read1->money',1000) 8 9 def

python模块与包

模块是包括python定义和声明的文件.文件名=模块名+".py".模块名保存在全局变量__name__中. 1.模块中的执行语句,只是在导入时执行一次.这些语句通常用于初始化模块. 2.被导入的模块被放到全局语义表中. 3.import用法 +import moduleName +from moduleName import moudleContent +from moudleName import * 导入所有的除了以下划线开头的命名. 4.导入module查找路径:先从当前目录中

七、Python模块和包

Python模块 Python模块是组织代码的基本方式 Python的脚本都是用扩展名为py的文本文件保存的,一个脚本可以单独运行,也可以导入另一个脚本中运行.当脚本被导入运行时,将其称为模块 cat test.py #!/usr/bin/python #coding:utf-8 from __future__ import division def a(x,y): print x+y def b(x,y): print x*y cat new.py #!/usr/bin/python impo

python模块与包的导入

1. 模块与包的区别 模块,即module,一个包含python语句的.py文件就是一个模块!每个源代码文件都会自动成为模块!没有额外的语法用来声明模块. 包,又称模块包,即module package,是一个目录,该目录中包含.py文件,其中必须有一个__init__.py文件,该文件用于声明和初始化模块包.第一次在进程中导入某个目录(包)时,python会自动运行__init__.py文件中的代码.该目录会在内存中创建一个模块对象,__init__.py中赋值的变量则会变成该模块对象的属性.

python模块和包

模块和包的引入格式如下,后面详细举例说明 import 文件名 from 目录名 import 文件名 from 目录名.文件名 import 类名 一.模块 1.模块可以使代码复用,降低工作量,易于维护:实现代码共享,多人开发,lib库引用 模块是Python组织代码的基本方式,Python程序(.py)可以单独运行,也可以被其他程序调用,当被导入执行时,可以看做是一个模块(module),简单的说:一个.py文件就是一个模块,模块名与文件名相同 现有两个文件zhzhgo.py和module.

python模块与包加载机制

模块的搜索路径: When a module named spam is imported, the interpreter searches for a file named spam.py in the current directory, and then in the list of directories specified by the environment variable PYTHONPATH. This has the same syntax as the shell var

python 模块和包

一.模块 1. import 2. from ...import... 3. 把模块当作脚本执行 4.模块搜索路径 5.编译python文件 二.包 1. import 2. from...import... 3. __init__.py文件 4. from glance.api import * 5. 绝对导入和相对导入 6. 单独导入包 原文地址:https://www.cnblogs.com/zhuzhaoyang/p/8510903.html