本文目录

1.模块
定义模块
导入模块
调用模块中函数
方法1 模块名.函数名
方法2 from 模块名 import 函数名1.函数名2,..
方法3 from 模块名 import *
给模块取个别名
给模块中函数取个别名
以脚本的方式执行模块
__name__怎么理解
查看模块中的属性:dir函数
导入模块时sys.path怎么理解
2.包(库)
建立一个包
包中__init__.py文件作用
从包中导入单个模块
方法1
方法2
从包中导入所有模块

正文开始啦

1.模块

python模块是一个包含Python定义和语句的文件(就是一个.py结尾的脚本文件);
文件名为模块名,文件后缀为 .py;
在一个模块内部,模块名可以通过 __name__方法获得。

定义模块

定义一个模块fibo,即创建一个fibo.py文件。#fibo.py

# Fibonacci numbers moduledef fib(n):    # write Fibonacci series up to na, b = 0, 1while a < n:print(a, end=' ')a, b = b, a+bprint()def fib2(n):   # return Fibonacci series up to nresult = []a, b = 0, 1while a < n:result.append(a)a, b = b, a+breturn result

导入模块

python习惯上把所有 import 语句放在脚本的开头,全局调用。

>>> import fibo#导入模块fibo
>>> fibo.__name__#__name__方法获得模块fibo的模块名
'fibo'

调用模块中函数

方法1 模块名.函数名

>>> import fibo
>>> fibo.fib2(100)
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]

方法2 from 模块名 import 函数名1.函数名2,..........

>>> from fibo import fib,fib2#多个函数名之间使用逗号隔开
>>> fib2(100)
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]

方法3 from 模块名 import *

*表示该模块中所有的函数,会导致代码可读性差(不建议使用)。

>>> from fibo import *
>>> fibo.fib2(100)
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]

给模块取个别名

import 模块名 as 别名

>>> import fibo as fb
>>> fb.fib2(100)
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]

给模块中函数取个别名

from 模块名 import 函数名 as 函数别名

>>> from fibo import fib2 as fb2
>>> fb2(100)
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]

以脚本的方式执行模块

#fibo.py

# Fibonacci numbers module
def fib(n):    # write Fibonacci series up to na, b = 0, 1while a < n:print(a, end=' ')a, b = b, a+bprint()def fib2(n):   # return Fibonacci series up to nresult = []a, b = 0, 1while a < n:result.append(a)a, b = b, a+breturn resultif __name__ == "__main__":print("现在该模块被当做脚本执行啦!")print(("此时__name__ == %s"%(__name__)))#此时模块的__name__为__main__import sysresult = fib2(int(sys.argv[1]))print(result)

> python fibo.py 100#if __name__ == "__main__":之后代码块执行了(常用于测试)
现在该模块被当做脚本执行啦!
此时__name__ == __main__
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]

__name__怎么理解

__name__是个全局变量,存放模块的名字;
当该模块被其它模块调用时,__name__=模块名,对于fibo.py,__name__="fibo";
当该模块被当做执行脚本时,__name__为__main__( A module’s __name__ is set equal to '__main__' when read from standard input, a script, or from an interactive prompt)。
对于fibo.py,如果终端执行 python fibo.py 100 ,if __name__ == "__main__":后面代码会执行;如果在别的模块中执行import fibo,,if __name__ == "__main__":后面代码不会执行。
>>> import fibo#if __name__ == "__main__":之后代码块没执行
>>>

查看模块中的属性:dir函数

>>> import fibo
>>> dir(fibo)
['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'fib', 'fib2']

以__开头和结尾的属性为python的内置属性;
'fib', 'fib2'为自定义属性。

导入模块是sys.path怎么理解

sys.path收集python模块的所有搜索路径,可以自己添加搜索路径(sys.path.append('yourpath'))举个栗子:

#test.py
#!/usr/bin/python
import sys
sys.path.append('~/biosoft/')
print(sys.path)
> python test.py
['/home/pylearning', '/home/software/anaconda3/lib/python37.zip','/home/software/anaconda3/lib/python3.7', '/home/.local/lib/python3.7/site-packages',
'/home/software/anaconda3/lib/python3.7/site-packages',
'~/biosoft/'
]

任何一个python程序执行时,会搜索其导入模块的路径,先搜索内置模块路径;
然后搜索sys.path收集的路径,sys.path中路径依次为:

['/home/pylearning', #被执行程序test.py所在路径'/home/software/anaconda3/lib/python37.zip','/home/software/anaconda3/lib/python3.7', #环境变量PYTHONPATH中路径'/home/.local/lib/python3.7/site-packages', #标准库路径'/home/software/anaconda3/lib/python3.7/site-packages',#标准库路径'~/biosoft/'#自己添加路径]


2.包(库)

建立一个包

sound包包含formats,effects,filters三个子包。

sound/                          #Top-level package(顶层包sound)__init__.py              #该文件可以为空,只有该文件存在时sound才会被当做包而不是目录formats/                  #Subpackage(子包)__init__.py     #同上,该文件存在时,formats才会被当做包而不是目录wavread.pywavwrite.pyaiffread.pyaiffwrite.pyauread.pyauwrite.pyhaha.py...effects/                  Subpackage for sound effects__init__.pyecho.pysurround.pyreverse.pyhaha.py...filters/                  Subpackage for filters__init__.pyequalizer.pyvocoder.pykaraoke.py...

包中__init__.py文件作用
只有目录中添加__init__.py文件时,目录才会被当做包而不是目录;
__init__.py 可以为空;
__init__.py中可以设置 __all__ 变量,这个变量主要影响包的导入
- 对于上文的sound包,sound/filters/__init__.py中输入__all__ == ["equalizer", "vocoder"]时,from sound.filters import *时不会导入karaoke模块。

从包中导入单个模块

导入sound包中子包effects中的echo模块

方法1

import sound.effects.echo引用它时必须使用它的全名,sound.effects.echo(xxx)。

方法2

from sound.effects import echo引用方法,echo(xxx)

从包中导入所有模块

from sound.effects import *引用方法,echo(xx)


参考资料

https://docs.python.org/zh-cn/3.8/library/__main__.html?highlight=__main__#module-__main__https://www.zhihu.com/question/49136398https://blog.konghy.cn/2017/04/24/python-entry-program/https://docs.python.org/zh-cn/3/tutorial/modules.html


往期精彩回顾适合初学者入门人工智能的路线及资料下载中国大学慕课《机器学习》(黄海广主讲)机器学习及深度学习笔记等资料打印机器学习在线手册深度学习笔记专辑《统计学习方法》的代码复现专辑
AI基础下载本站qq群955171419,加入微信群请扫码:

【Python】详解Python模块、包、库相关推荐

  1. qpython能使用json吗l_[python] 详解Python在使用JSON时需要注意的编码问题

    Python 中的字符编码 在 Python3 中, 字符 在内存中是使用 Unicode 存储的, 常规的字符使用 两个字节 表示, 一些很生僻的字符就需要 四个字节. 默认使用 Unicode 存 ...

  2. map函数的用法python,详解Python map函数及Python map()函数的用法

    python map函数 map()函数 map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list ...

  3. 选择排序法python详解-Python选择排序算法(三)

    优化选择排序算法,大致思路是每次循环分别找到最大值和最小值,放到列表的头部和尾部 代码如下: #! coding:utf8 import random def select_sort(arr): fo ...

  4. python 协程可以嵌套协程吗_Python | 详解Python中的协程,为什么说它的底层是生成器?...

    今天是Python专题的第26篇文章,我们来聊聊Python当中的协程. 我们曾经在golang关于goroutine的文章当中简单介绍过协程的概念,我们再来简单review一下.协程又称为是微线程, ...

  5. 用于生成随机数的python标准库模块是_详解Python基础random模块随机数的生成

    详解Python基础random模块随机数的生成 来源:中文源码网    浏览: 次    日期:2019年11月5日 [下载文档:  详解Python基础random模块随机数的生成.txt ] ( ...

  6. python中heapq的库是什么_详解Python中heapq模块的用法

    详解Python中heapq模块的用法 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  详解Python中heapq模块的用法.txt ] (友情提示:右键点上行t ...

  7. python xlrd安装_详解python中xlrd包的安装与处理Excel表格

    一.安装xlrd 地址 下载后,使用 pip install .whl安装即好. 查看帮助: >>> import xlrd >>> help(xlrd) Help ...

  8. 详解Python序列解包(5)

    如果一个函数需要以多种形式来接收参数,定义时一般把位置参数放在最前面,然后是默认值参数,接下来是一个星号的可变长度参数,最后是两个星号的可变长度参数:调用函数时,一般也按照这个顺序进行参数传递.调用函 ...

  9. 详解Python序列解包(4)

    本文主要介绍调用函数传递参数时序列解包的用法.在定义函数时在形参前面加2个星号**表示可变长度参数,可以收集若干关键参数形式的参数传递并存放到一个字典之中.与之相对,如果实参是个字典,可以使用两个星号 ...

  10. 【可解释性机器学习】详解Python的可解释机器学习库:SHAP

    详解Python的可解释机器学习库:SHAP SHAP介绍 SHAP的用途 SHAP的工作原理 解释器Explainer 局部可解释性Local Interper 单个prediction的解释 多个 ...

最新文章

  1. 发现一个好的索引-阳神
  2. mysql从库执行delete停止_MySQL主库大表执行delete语句,Ctrl+C具体发生了什么分析...
  3. python复制文件的代码_python 复制文件流程
  4. python add_argument()用法解析
  5. top,parent,opener,iframe
  6. 基于CentOs的Hadoop集群全分布式部署
  7. java中计算明年今天的日期_计算今天之后的下一个周年日
  8. VS2010 C# 4.0新特性一览
  9. MongoDB学习笔记(二)
  10. mingw编译boost中bjam的toolset问题
  11. Shell脚本学习-阶段十二-在CentOS 7上给一个网卡分配多个IP地址
  12. Ubuntu 20.04安装字体
  13. MAC 安装homebrew流程
  14. vue插槽的理解 slot slot-scop,三种插槽方式,默认插槽,具名插槽,作用域插槽
  15. python中import requests是什么意思_python中requests库使用方法详解
  16. java web开发入门学习笔记(手打超细版)
  17. html页面内容分页【转】
  18. 一个让我感到 细思极恐 的开源项目!
  19. C++ 学习方法汇总
  20. 原生JavaScript实现随机点名

热门文章

  1. 3.5 实例讲解Lucene索引的结构设计
  2. 6.1 从分析到设计
  3. fabricjs 高级篇(自定义类型)
  4. Python+selenium环境搭建
  5. php+nginx上传文件配置
  6. python字符串,列表,字典的常用方法
  7. 面向对象编程之:封装、继承、多态
  8. 使用DFS求任意两点的所有路径
  9. PHP程序员的技术成长规划(转)
  10. 17个你必须牢记的Win7快捷键[转]