Python 模块学习

简介:

可以将代码量较大的程序分割成多个有组织的、彼此独立但又能互相交互的代码片段,这些自我包含的有组织的代码段就是模块


模块表现形式为以.py结尾的代码文件


一个文件被看作一个独立的模块,一个模块也可以被看作是一个文件。


模块的文件名就是模块的名字加上扩展名.py


每个模块都有自己的名称空间


Python程序架构

一个python程序通常包括一个顶层程序文件和其他的模块文件(0个,1个或多个)

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

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

模块首次导入(或重载)时,Python会立即执行模块文件的顶层程序代码,声明函数对象,而位于函数体内的代码直到函数被调用后才会执行。

wKiom1XBRJGz2Zm6AAD7hBgGV_4239.jpg

模块的执行环境

模块是被导入的,但模块也可以导入和使用其他模块,这些模块可以用Python或其他编程语言写成


模块可内含变量、函数以及类来进行其工作,而函数和类可以包含变量和其他元素


如果打算以多个程序文件来组织你的Python程序,只有一个文件可以作为顶层执行文件,可以在顶层包含很多程序控制流,其他被导入的文件,都应该只包含类、变量、函数。


导入模块

在导入模块时只能使用模块名,而不是带.py后缀的模块文件名。

导入指定模块,会生成一个以模块名命名的名称空间。


impor语句导入模块:

import module

导入时可以给名称空间指定一个别名,如果使用别名,就只能使用别名调用了。

import module as module_alias

from-import 语句:

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

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


import 和 from 都是隐性赋值语句

import将整个模块对象赋值给一个变量名

from将一个或多个变量名赋值给导入此模块的模块中的同名对象,如果导入的变量和本地变量重名,则会覆盖本地的。

import的工作机制


1、寻找模块文件,2、编译成字节码,3、执行模块的代码来创建其所定义的对象。注意:模块只有在第一次导入时才会执行如上步骤; 

后续的导入操作只不过是提取内存中已加载的模块对象,reload()可用于重新加载模块;


模块搜索

Python解释器在import模块时必须先找到对应的模块文件

程序的主目录

Python path目录

标准链接库目录

任何.pth文件的内容

这四个组件组合起来即为sys.path所包含的路径,而Python会选择在搜索路径中的第一个符合导入文件名的文件。


导入一个自定义模块的过程:

创建目录,用于保存自定义模块

mkdir /usr/local/mylib


进入python命令行,添加模块的搜索路径

import sys

sys.path

sys.path.append('/usr/local/mylib')


然后就可以直接用import导入自定义的模块了


Python执行被导入的模块的__name__属性是该模块的名称,而如果是直接执行该模块文件,模块的__name__属性是'main'。 下图的if段代码则是模块的测试代码,在模块被导入时是不会执行那段代码的。 只有直接运行才会执行。


添加模块文件的测试代码

wKioL1XCwIrCynlVAAD5oDxq2sY942.jpg


Python 打包

包用于将一组模块归并到一个目录中,此目录即为包,目录名即为包名。

    包是一个有层次的文件目录结构,它定义了一个由模块和子包组成的Python应用程序执行环境

    基于包,Python在执行模块导入时可以指定模块的导入路径

    import dir1.dir2.mod1


第一个容器文件夹必须要在模块的搜索路径中,在子目录中需要建立一个__init__.py的文件,一般为空,在调用模块时只需要使用 import '子目录名'.模块名称

wKiom1XCyoPStPnTAAVhrhtyzGg520.jpg

模块的相对路径引用

from .bar import fn

表示引用当前模块中bar子模块,中的fn函数;


from .. import fn2

表示引用当前模块中.init.py文件中的fn2函数;


注:如果用相对路径引入模块,那么这个文件不能被直接执行,只能做为模块被引入。


使用disutils发布模块

wKioL1XDAd2BT8F9AAOU105cVLg715.jpg


setup.py 中可用参数:wKioL1XCzl-DQKG7AAHYZc6iELg801.jpg

platforms:平台列表

license:许可证

py_modules:各模块名称组成的列表,此些模块可能位于包的根目录下(module name),也可能位于某子包目录中(subpkg1.module name)



执行打包

python setup.py sdist   //源码包发行版

    可以为sdist指定格式:

zip,gztar,bztar,ztar,tar

使用--formats= 指定格式


python setup.py bdist   //二进制发行版

    可以为sdist指定格式:

        gztar,ztar,rpm,pkgtool,



获取帮助的方式:

    Python setup.py --help

    Python setup.py --help-commands:显示所有可以使用的命令的帮助

    Python setup.py COMMAND --help: 获取特定命令的帮助

    Python setup.py COMMAND --help-formats: 获取特定命令支持使用的格式

简单的安装工具:pip 、easy_install


安装包:

    python setup.py install

    build and install

    python setup build:

        --build-base=/path/to/buildir

        lib,lib.platform

第三方模块的默认安装路径通常为:/usr/local/python27/lib/python2.7/site-packages


自定义安装路径:

    --user= 指定安装在用户家目录下的某个路径中。

    --prefix= 指定Python库文件的安装路径

    --exec-prefix= 指定和Python无关的,由其他语言编写的模块安装路径


深度定制:

    --install-purelib=/path/ 指定纯Python编写的库文件存放的位置

    --install-platlib=/path/ 由其他语言所实现的库文件的存放位置

    --install-lib=/path/ 不加区分的将所有库安装到指定位置


    --install-scripts=/path/ 可执行文件的安装路径

    --install-data= 指定数据文件的安装路径

    --install-headers= 指定C头文件的安装路径



本文转自qw87112 51CTO博客,原文链接:http://blog.51cto.com/tchuairen/1681757

相关文章
|
2月前
|
存储 算法 API
【01】整体试验思路,如何在有UID的情况下获得用户手机号信息,python开发之理论研究试验,如何通过抖音视频下方的用户的UID获得抖音用户的手机号-本系列文章仅供学习研究-禁止用于任何商业用途-仅供学习交流-优雅草卓伊凡
【01】整体试验思路,如何在有UID的情况下获得用户手机号信息,python开发之理论研究试验,如何通过抖音视频下方的用户的UID获得抖音用户的手机号-本系列文章仅供学习研究-禁止用于任何商业用途-仅供学习交流-优雅草卓伊凡
290 82
|
1天前
|
数据采集 机器学习/深度学习 自然语言处理
Python学习的自我理解和想法(16)
这是我在B站千锋教育课程中学Python的第16天总结,主要学习了`datetime`和`time`模块的常用功能,包括创建日期、时间,获取当前时间及延迟操作等。同时简要介绍了多个方向的补充库,如网络爬虫、数据分析、机器学习等,并讲解了自定义模块的编写与调用方法。因开学时间有限,内容精简,希望对大家有所帮助!如有不足,欢迎指正。
|
1天前
|
数据挖掘 Python
Python学习的自我理解和想法(14)
这是学习Python第14天的总结,基于B站千锋教育课程内容。重点介绍了`math`模块的常用功能,如取绝对值、向上/向下取整、计算π值、幂运算、对数、三角函数等。这些函数广泛应用于科学计算、数据分析和工程领域。通过掌握`math`模块,可实现高效数学运算,甚至编写计算器程序。尽管开学后时间有限,但仍坚持每天学习一到两个模块,希望读者谅解内容简略之处。如有错误,欢迎指正!
|
1天前
|
Python
Python学习的自我理解和想法(12)
本文记录了学习Python第12天的内容,主要包括回调函数、闭包函数、函数作用域、filter方法、map方法和装饰器函数等核心概念。通过定义、语法、实例及优缺点分析,深入浅出地讲解了这些技术的应用场景与实现方式。其中,回调函数适合异步编程,闭包可访问外部变量,装饰器用于增强函数功能而不改变原代码。文章基于B站千锋教育课程整理,非原创代码,旨在分享学习心得,欢迎指正!
|
1天前
|
Python
Python学习的自我理解和想法(15)
这是作者学习Python第15天的总结,基于B站千锋教育课程内容。文章主要介绍了`OS模块`和`random模块`的常用功能。`OS模块`涵盖文件与文件夹的操作,如获取当前目录、创建/删除文件夹、重命名、判断文件是否存在等;`random模块`则包含生成随机数及从列表中随机抽取数据的功能。因开学时间有限,内容精简为每天一到两个模块的学习笔记,附带作者的理解与语法示例,欢迎指正交流。
|
1天前
|
Python
Python学习的自我理解和想法(13)
这是我在学习Python第13天的总结,基于B站千锋教育课程内容。主要学习了模块的基础知识和pip工具的使用。模块是包含Python定义和语句的文件,可通过多种方式导入(如import、from...import等)。pip用于管理Python扩展包,支持安装、卸载、更新等功能。虽然开学后时间有限,但我会坚持学习并不断完善理解。如有错误,欢迎指正!
|
1月前
|
人工智能 自然语言处理 Shell
[oeasy]python070_如何导入模块_导入模块的作用_hello_dunder_双下划线
本文介绍了如何在Python中导入模块及其作用,重点讲解了`__hello__`模块的导入与使用。通过`import`命令可以将外部模块引入当前环境,增强代码功能。例如,导入`__hello__`模块后可输出“Hello world!”。此外,还演示了如何使用`help()`和`dir()`函数查询模块信息,并展示了导入多个模块的方法。最后,通过一个实例,介绍了如何利用`jieba`、`WordCloud`和`matplotlib`模块生成词云图。总结来说,模块是封装好的功能部件,能够简化编程任务并提高效率。未来将探讨如何创建自定义模块。
44 8
|
1月前
|
缓存 Shell 开发工具
[oeasy]python071_我可以自己做一个模块吗_自定义模块_引入模块_import_diy
本文介绍了 Python 中模块的导入与自定义模块的创建。首先,我们回忆了模块的概念,即封装好功能的部件,并通过导入 `__hello__` 模块实现了输出 "hello world!" 的功能。接着,尝试创建并编辑自己的模块 `my_file.py`,引入 `time` 模块以获取当前时间,并在其中添加自定义输出。
45 4
|
2月前
|
存储 API 数据安全/隐私保护
【02】整体试验思路,在这之前我们发现sec_uid,sec_uid是什么和uid的关系又是什么?相互如何转换?python开发之理论研究试验,如何通过抖音视频下方的用户的UID获得抖音用户的手机号-本系列文章仅供学习研究-禁止用于任何商业用途-仅供学习交流-优雅草卓伊凡
【02】整体试验思路,在这之前我们发现sec_uid,sec_uid是什么和uid的关系又是什么?相互如何转换?python开发之理论研究试验,如何通过抖音视频下方的用户的UID获得抖音用户的手机号-本系列文章仅供学习研究-禁止用于任何商业用途-仅供学习交流-优雅草卓伊凡
125 6
|
2月前
|
C语言 Python
Python学习:内建属性、内建函数的教程
本文介绍了Python中的内建属性和内建函数。内建属性包括`__init__`、`__new__`、`__class__`等,通过`dir()`函数可以查看类的所有内建属性。内建函数如`range`、`map`、`filter`、`reduce`和`sorted`等,分别用于生成序列、映射操作、过滤操作、累积计算和排序。其中,`reduce`在Python 3中需从`functools`模块导入。示例代码展示了这些特性和函数的具体用法及注意事项。