python\模块4

1 模块与包

1.1 模块的定义

什么是模块

模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀。

为什么使用模块

在退出python解释器然后重新进入,之前定义的函数或者变量都将丢失,因此我们通常将程序写在文件中以便永久保存下来,需要时就通过python test.py方式去执行,此时的test.py被称为脚本。

我们通常将程分成一个个的文件,这样做程序的结构更清晰,方便管理。这时我们不仅仅可以把这些文件当脚本去执行,还可以把他们当做模块来导入到其他的模块中,实现了功能的重复利用。

1.2 如何使用模块

1.2.1 import

模块可以包含可执行的语句和函数的定义,这些语句的目的是初始化模块,他们只在模块名第一次遇到导入import语句时才执行(import语句是可以在程序中的任意位置使用的,且针对同一个模块很import多次,为了防止你重复导入,python的优化手段是:第一次导入后就将模块名加载到内存了,后续的import语句仅是对已经加载大内存中的模块对象增加了一次引用,不会重新执行模块内的语句)

#spam.py
import spam#只在第一次导入时才执行spam.py内代码,此处的显示效果是只打印一次
当然其他的顶级代码也都被执行了,只不过没有显示效果
import spam
import spam
import spam
>>
from the spam.py

可以从sys.module中找到当前已经加载的模块,sys.module是一个字典,内部包含模块名与模块对象的映射,该字典决定了导入模块时是否需要重新导入。

每个模块都是一个独立的名称空间,定义在这个模块中的函数,吧这个模块的名称空间当做全局名称空间,这样我们在编写自己的模块时,就不用担心我们定义在自己模块中全局变量会在被导入时,与使用者的全局变量冲突

money=1222#全局定义变量money
from spam import money,read1#调用spam模块
print(money)
>>
from the spam.py
1000#打印spam模块中变量money

在名称空间中绑定money

#test.py
import spam
def resd1():
    print("---->")
spam.read1()#调用spam的属性
>>
from the spam.py
spam->read1->money 1000

导入模块可以同时导入多个,用逗号隔开

import sys,os,re

在名称空间中赋值read1,read1函数则不能够被调用

 

总结:首次导入模块时会做三件事

(1)     为源文件创建新的名称空间,用来存放源文件中定义的名字

(2)     基于创建的名称空间执行模块

(3)     创建名字(如spam)来引用该名称空间,文件名.名字的操作,都是以创建名字的文件为准

模块别名使用

import spam as sm#把spam模块重新起名sm
print(sm.money)#相当于print(spam.money)
>>
from the spam.py
1000

为已经导入的模块起别名的方式对编写可扩展的代码很有用,假设两个模块都定义了同一个函数,但是采用不同的输入格式。可以编写代码来选择性的挑选读取模块

 if file_format == ‘xml‘:
     import xmlreader as reader
 elif file_format == ‘csv‘:
     import csvreader as reader
 data=reader.read_date(filename)

 

1.2.2 from import

对比import spam,会将源文件的名称空间带到当前名称空间中,使用时必须是spam.名字的方式

而from语句相当于import,也会创建新的名称空间,直接使用名字就可以

from spam import money,read1
read1()
>>
from the spam.py
spam->read1->money 1000

如果当前有重命名read1,那么就会有覆盖效果

from spam import money,read1
def read1():
    print("--->")
read1()
>>
from the spam.py
--->

from语句中也可以使用别名

from spam import read1 as read

也可以导入多行

 from spam import (read1,
                 read2,
                 money)

from spam import *

把spam中所有的不是以下划线开头的名字都导入到当前位置。

缺点:不知道*导入的什么名字,很可能会覆盖掉之前定义的名字

可读性极其的

可以用__all__来控制*

执行read1时没有问题

执行read2时报错

Python不支持重新加载或卸载之前导入的模块

1.3 把模块当做脚本执行

调用模块  则不会被使用

1.4模块的搜索路径

查找模块的顺序是:内存中已经加载的模块-à内置模块-àsys.path路径中包含的模块

注意:自定义的模块名不应该与系统内置模块重名

 

1.5编译python文件

只有导入模块  import

from  import

才会产生pyc文件  模块被加载时增加速度

时间: 2024-11-10 01:09:22

python\模块4的相关文章

python-学习笔记之-Day5 双层装饰器 字符串格式化 python模块 递归 生成器 迭代器 序列化

1.双层装饰器 #!/usr/bin/env python # -*- coding: utf-8 -*- # author:zml LOGIN_INFO = False IS_ADMIN = False   def check_log(func): def inner(): res = func() if LOGIN_INFO: print('验证成功!') return res else: print('验证失败!') return inner   def check_admin(func)

Python模块的交叉引用问题分析

实际项目中遇到python模块相互引用问题,查资料,说是通过import局部导入的方式可以避免错误,资料如附录所述. 但更改后测试还是会出错,很疑惑!? 如果哪位读者有好的解决方法,敬请留言说明,谢谢. 所以,最好的方法是不进行交叉引用,如果需要就单独分一个模块出来. 附录:Python模块的交叉引用问题解读:How can I have modules that mutually import each other? 有下面两个文件相互引用,Python解释器报错. foo.py: from

python模块以及导入出现ImportError: No module named 'xxx'问题

python模块以及导入出现ImportError: No module named 'xxx'问题 python中,每个py文件被称之为模块,每个具有__init__.py文件的目录被称为包.只要模 块或者包所在的目录在sys.path中,就可以使用import 模块或import 包来使用 如果你要使用的模块(py文件)和当前模块在同一目录,只要import相应的文件名就好,比 如在a.py中使用b.py:  import b 但是如果要import一个不同目录的文件(例如b.py)该怎么做

python模块搜索路径

1.电脑版 (1).python安装目录中\Lib\site-packages\下建立*.pth文件,写入模块路径 (2).添加环境变量:变量名:pythonpath;变量值:模块(文件夹)路径 ,若有多个,用半角分号";"隔开 2.手机版 在resource\site.py文件中添加代码段 import syssys.path.append("模块(文件夹)路径") 发现:第一个参数都是C:\\resource 我的理解: 程序安装盘下的site.py指定模块路径

4.python模块

python 字符串 一.注释 在python中的注释分为单行注释和多行注释    (1)单行注释:为在语句的前边加"#" 例子: #!/usr/bin/env python a = 123 print a #print a #print a #print a 执行结果如下: [[email protected] ~]# python a.py 123  (2)多行注释:可以用3对单引号(比如:''' 注释内容''') 或是3对双引号(比如:"""注释内容

使用 from import方法导入Python模块

比如我们导入一个数学计算的模块 math: >>> import math>>> print math<module 'math' (built-in)>>>>>>> print math.pi #导出圆周率的值3.14159265359>>> 我们导入math模块,在python模块学习中我们会知道,这样做会得到名math的对象,这个模块对象包含了pi这样的常量,以及一些其它的方法. 我们如果直接访问

Python 八、Python模块

一.python文件概述 1.python模块概述 可以将代码量较大的程序分割成多个有组织的.彼此独立但又能互相交互的代码片段,这些自我包含的有组织的代码段就是模块 模块在物理形势上表现为以.py结尾的代码文件 一个文件被看作一个独立的模块,一个模块也可以被看作是一个文件 模块的文件名就是模块的名字加上扩展名(.py) 每个模块都有自己的名称空间 python允许导入其它模块以实现代码重用,从而也实现了将独立的代码文件组织成更大的程序系统 python中,模块也是对象 在一个模块的顶层定义的所有

python 学习第五天,python模块

一,Python的模块导入 1,在写python的模块导入之前,先来讲一些Python中的概念性的问题 (1)模块:用来从逻辑上组织Python代码(变量,函数,类,逻辑:实现一个功能),本质是.py结尾的python文件(文件名:test.py,对应的模块名:test) (2)包:用来从逻辑上组织模块的,本质就是一个目录(必须带有一个__init__.py文件) 2,导入的方法 (1)import module_name导入某个模块 (2)import module_name,module2_

七、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模块

在python编程语言中,我们一般会用到python模块,如chardet.pygame,这些模块不包含在python的默认代码中,需要从外部下载并安装.有些模块提供了自动安装的文件,比如pygame的Windows版本,直接双击安装就可以.但大多数模块没有提供这样的安装方式,有些同学没能成功安装而导致无法在程序中引入模块.在这里,介绍一下python模块http://www.maiziedu.com/course/python/393-4380/几种常见的安装方法.   1. 直接copy 下