Python学习笔记-模块

模块:

顶层文件(也是模块文件)

模块文件

模块在物理形式上表现为.py结尾的代码文件

Python中,模块本身也是对象,所以模块也有变量,函数,类

在一个模块的顶层定义的所有变量都在被导入时成为了被导入模块的属性

查看标准库模块:

help(‘modules‘)

顶层文件:包含了程序的主要控制流程

模块文件:为顶层文件或其他模块提供各种功能组件

import module [,module1[,module2]]语句    导入模块

导入指定的整个模块,包括生成一个以模块名命名的名称空间

导入模块别名(有别名以后不能再使用原名,防止重复的名字空间):

import module as module_alias

from-import语句(负面作用:会导致属性覆盖)

常用于只导入指定模块的部分属性至当前名称空间

from module import name1[,name2[,name3]]

import和from-import是赋值语句

import和from是可执行语句,类似于def,因此他们嵌套再if测试中,出现def中等等

import和from都是隐形的赋值语句

如果本程序中有声明变量a = 10 ,导入的模块中也有变量a = 20,那么模块中的变量覆盖原程序的变量,此时a = 20

import语句导入模块三个步骤:

1.找到模块文件:在指定的路径下搜索模块文件(依次查找,查到就停止)

搜索的路径:程序的主目录,PythonPath目录(如果设置了此变量),标准链接库目录,任何.pth文件的内容(如果存在.pth文件)

In [9]: import sys
In [11]: print (sys.path)
[‘‘, ‘/usr/local/python361/bin‘, ‘/usr/local/python361/lib/python36.zip‘, ‘/usr/local/python361/lib/python3.6‘, ‘/usr/local/python361/lib/python3.6/lib-dynload‘, ‘/usr/local/python361/lib/python3.6/site-packages‘, ‘/usr/local/python361/lib/python3.6/site-packages/ipython-6.1.0-py3.6.egg‘, ‘/usr/local/python361/lib/python3.6/site-packages/pexpect-4.2.1-py3.6.egg‘, ‘/usr/local/python361/lib/python3.6/site-packages/Pygments-2.2.0-py3.6.egg‘, ‘/usr/local/python361/lib/python3.6/site-packages/prompt_toolkit-1.0.14-py3.6.egg‘, ‘/usr/local/python361/lib/python3.6/site-packages/traitlets-4.3.2-py3.6.egg‘, ‘/usr/local/python361/lib/python3.6/site-packages/simplegeneric-0.8.1-py3.6.egg‘, ‘/usr/local/python361/lib/python3.6/site-packages/pickleshare-0.7.4-py3.6.egg‘, ‘/usr/local/python361/lib/python3.6/site-packages/decorator-4.0.11-py3.6.egg‘, ‘/usr/local/python361/lib/python3.6/site-packages/jedi-0.10.2-py3.6.egg‘, ‘/usr/local/python361/lib/python3.6/site-packages/ptyprocess-0.5.1-py3.6.egg‘, ‘/usr/local/python361/lib/python3.6/site-packages/wcwidth-0.1.7-py3.6.egg‘, ‘/usr/local/python361/lib/python3.6/site-packages/six-1.10.0-py3.6.egg‘, ‘/usr/local/python361/lib/python3.6/site-packages/ipython_genutils-0.2.0-py3.6.egg‘, ‘/usr/local/python361/lib/python3.6/site-packages/ipython-6.1.0-py3.6.egg/IPython/extensions‘, ‘/root/.ipython‘]

例,新建一个模块,让程序能够搜索到该模块文件

[[email protected] ~]# mkdir -pv /opt/python361/ 
mkdir: created directory `/opt/python361/‘
[[email protected] ~]# touch /opt/python361/mymod.py
[[email protected] ~]# vim /opt/python361/mymod.py
#! /usr/bin/python36
#
a = 10
def printInfo():
    print a + 30
class Mym():
    im = ‘hello Mym‘
    def __init__(self,x):
        self.name = x
    def printName(self):
        print self.im, self.name

直接导入会搜索不到

In [13]: import mymod
---------------------------------------------------------------------------
ModuleNotFoundError Traceback (most recent call last)
<ipython-input-13-7215bcbec8da> in <module>()
----> 1 import mymod
ModuleNotFoundError: No module named ‘mymod‘

添加sys.path路径

In [14]: sys.path.append(‘/opt/python361‘)
In [15]: import mymod
In [16]:
In [17]: print (mymod.a)
10

2.编译成字节码:文件导入时就会编译,因此,顶层文件的.pyc字节码文件在内部使用后会被丢弃,只有被导入的文件才会留下.pyc文件

3.执行模块的代码来创建其所定义的对象:执行里面的顶层文件

如果一个模块被导入,则__name__属性保存的是自己的模块名称

如果不是被导入,而是自己执行,则__name__属性保存的是__main__

[[email protected] python361]# cat /opt/python361/mymod.py 
#! /usr/bin/python36
#
a = 10
def printInfo():
    print a + 30
class Mym():
    im = ‘hello Mym‘
    def __init__(self,x):
        self.name = x
    def printName(self):
        print self.im, self.name
if __name__ == ‘__main__‘:           ##自我测试测试代码
    printInfo()
    ins1 = Mym(‘jerry‘)
    print ins1.im
    print ins1.name
In [27]: mymod.__name__
Out[27]: ‘mymod‘
[[email protected] python361]# python mymod.py 
40
hello Mym
jerry

注意:

第一次导入才会执行三个步骤,重复导入没有意义,只是在内存中提取已加载的模块。

reload()可用于重新加载模块

时间: 2024-10-18 23:58:38

Python学习笔记-模块的相关文章

Python学习笔记-模块介绍(三)-模块包和搜索路径

一个python文件就是一个模块,使用独立的命名空间,但实际使用过程中单单用模块来定义python功能显然还不够.因为一个大型的系统几千上万个模块是很正常的事情,如果都聚集在一起显然不好管理并且有命名冲突的可能,因此python中也出现了一个包的概念. 一.python中的包介绍 包是通过使用"点模块名称"创建Python模块命名空间的一种方法.列如,模块名称 A.B 表示一个在名为 A的包下的名为B的子模块.就像使用模块让不同模块的作者无需担心彼此全局变量名称(冲突)一样,点模块名称

Python学习笔记-模块介绍(一)-模块概念和基本使用

python是由一系列的模块组成的,每个模块就是一个py为后缀的文件,同时模块也是一个命名空间,从而避免了变量名称冲突的问题.模块我们就可以理解为lib库,如果需要使用某个模块中的函数或对象,则要导入这个模块才可以使用,除了系统默认的模块不需要导入外.导入直接使用如下语法: import 模块名称(不要.py后缀) 这样导入成功后,就可以在另外一个模块中使用被导入模块的功能函数或对象了.先举例如下,比如在D:\temp目录下建立python模块:module_1.py,内容如下: # -*- c

Python学习笔记-模块介绍(二)-模块导入和执行

之前的一篇博文介绍了python中模块的概念和基本使用方法,模块作为python语言中的基本单元,可以用来编写公用库函数或对象以便重复使用.同时模块还可以作为独立文件进行运行,之前也已经提到,只要是导入了模块文件,那么PVM就会依次执行模块文件中的所有语句.本篇主要介绍模块使用的一些进阶,首先定义一个模块module_2.py,内容如下: # -*- encoding:utf-8 -*-'''module_2.py模块的内容''' print(__name__) def sum(a,b):ret

python 学习笔记 14 -- 常用的时间模块之datetime

书接上文,前面我们讲到<常用的时间模块之time>,这次我们学习datetime -- 日期和时间值管理模块 使用apihelper 查看datetime 模块,我们可以看到简单的几项: date       ---  日期对象,结构为date(year, month, day) time       ---  时间值对象,结构为 time([hour[, minute[, second[, microsecond[, tzinfo]]]]]).时间对象所有的参数都是可选的.tzinfo 可以

python 学习笔记 13 -- 常用的时间模块之time

Python 没有包含对应日期和时间的内置类型,不过提供了3个相应的模块,可以采用多种表示管理日期和时间值: *    time 模块由底层C库提供与时间相关的函数.它包含一些函数用于获取时钟时间和处理器的运行时间,还提供了基本解析和字符串格式化工具 *    datetime 模块为日期.时间以及日期时间值提供一个更高层接口.datetime 中的类支持算术.比较和时区配置. *    calendar 模块可以创建周.月和年的格式化表示.它还可以用来计算重复事件.给定日期是星期几,以及其他基

Python学习笔记-安装MySQLdb模块

模块下载地址: MySQL-python 1.2.3 for Windows and Python 2.7, 32bit and 64bit versions http://www.codegood.com/archives/129 直接点击安装exe即可,如果缺少dll文件,可以百度下载相关dll文件. Python学习笔记-安装MySQLdb模块

python 学习笔记 13 -- 经常使用的时间模块之time

Python 没有包括相应日期和时间的内置类型.只是提供了3个相应的模块,能够採用多种表示管理日期和时间值: *    time 模块由底层C库提供与时间相关的函数.它包括一些函数用于获取时钟时间和处理器的执行时间,还提供了基本解析和字符串格式化工具 *    datetime 模块为日期.时间以及日期时间值提供一个更高层接口. datetime 中的类支持算术.比較和时区配置. *    calendar 模块能够创建周.月和年的格式化表示. 它还能够用来计算反复事件.给定日期是星期几,以及其

OpenCV之Python学习笔记

OpenCV之Python学习笔记 直都在用Python+OpenCV做一些算法的原型.本来想留下发布一些文章的,可是整理一下就有点无奈了,都是写零散不成系统的小片段.现在看 到一本国外的新书<OpenCV Computer Vision with Python>,于是就看一遍,顺便把自己掌握的东西整合一下,写成学习笔记了.更需要的朋友参考. 阅读须知: 本文不是纯粹的译文,只是比较贴近原文的笔记:         请设法购买到出版社出版的书,支持正版. 从书名就能看出来本书是介绍在Pytho

python学习笔记12-模块使用

python学习笔记12-模块使用 模块os,sys 什么是模块? 模块os,sys 模块是Python组织代码的一种基本方式 一个Python脚本可以单独运行,也可以导入到另外一个脚本运行,用import hello语句来导入,不用加入.py 什么是Python的 包? Python的模块可以按照目录组织为包 创建一个包的步骤: 创建一个名字为包名的目录 在改目录下创建一个__init__.py文件 根据需要,在该目录下存放脚本文件或已编译的扩展及子包 import pack.m1,pack.