1,在Python中,一个.py
文件就称之为一个模块(Module)
2,模块使用优势:
(1)提高了代码的可维护性
(2)编写代码不必从零开始,可以被其他地方引用
(3)可以避免函数名和变量名冲突,相同名字的函数和变量完全可以分别存在不同的模块中。但是也要注意,尽量不要与内置函数名字冲突。点这里查看Python的所有内置函数。
3,包(Package)
Python引入了按目录来组织模块的方法,可以避免模块名冲突。
文件
www.py
本身是一个模块,其模块名就是mycompany.web.www
,两个文件utils.py
的模块名分别是mycompany.utils
和mycompany.web.utils
。mycompany.web
也是一个模块
- 创建模块时要注意命名,不能和Python自带的模块名称冲突。例如,系统自带了
sys
模块,自己的模块就不可命名为sys.py
,否则将无法导入系统自带的sys
模块。 - 查看系统是否已存在该模块的方法是在Python交互环境执行
import abc
,若成功则说明系统存在此模块。
使用模块
1,以内建的sys
模块为例,编写一个hello_1
的模块:
#!/usr/bin/env python3 #使得本文件可以直接在Unix/Linux/Mac上运行
# -*- coding: utf-8 -*- #表示.py文件本身使用标准UTF-8编码
' a test module ' #表示模块的文档注释,任何模块代码的第一个字符串都被视为模块的文档注释
__author__ = 'Michael Liao' #使用__author__变量标注作者
import sys #导入sys模块
def test():
args = sys.argv
if len(args)==1:
print('Hello, world!')
elif len(args)==2:
print('Hello, %s!' % args[1])
else:
print('Too many arguments!')
if __name__=='__main__': #如果使用命令行运行模块,则运行test函数
test()
(1)sys
模块的argv
变量,用list
存储命令行的所有参数。sys.argv
是获取运行Python文件的时候命令行参数。
(2)argv
至少有一个元素,因为第一个参数永远是该.py
文件的名称,例如:
#文件a.py内容见下
import sys
a=sys.argv
b=len(sys.argv)
print(a)
print(b)
#运行程序
C:\Users\Alexia Lee>cd python_study
C:\Users\Alexia Lee\python_study>python a.py
['a.py']
1
C:\Users\Alexia Lee\python_study>python a.py Alexia
['a.py', 'Alexia']
2
(3)判断模块运行模式
if
__name__
=='__main__'
:
test()
-
main
代表模块的名称(带.py
后缀),此处为hello_1.py
- 命令行运行
hello.py
C:\Users\Alexia Lee\python_study>python hello_1.py #符合if条件,运行test函数
Hello, world!
C:\Users\Alexia Lee\python_study>python hello_1.py Alexia
Hello, Alexia!
- 启动Python交互环境,导入
hello
模块
C:\Users\Alexia Lee\python_study>python
Python 3.8.1 (tags/v3.8.1:1b293b6, Dec 18 2019, 23:11:46) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import hello_1 #跳过if判断,忽略后面的执行命令
>>> hello_1.test()
Hello, world!
2,作用域
(1)定义:作用域:程序创建、访问、改变一个变量时,都是在一个保存该变量的空间内进行,这个空间为命名空间,即作用域。
(2)通过_前缀来表示该函数或变量是在模块内部使用
- 正常的函数和变量名是公开的(public),可以被直接引用,比如:
abc
,x123
,PI
等; - 类似
__xxx__
这样的变量是特殊变量,是非公开的(private)的,可以被直接引用,但是有特殊用途,如__author__
作为文档注释等 -
private
函数或变量的作用,如:
def _private_1(name):
return 'Hello, %s' % name
def _private_2(name):
return 'Hi, %s' % name
def greeting(name):
if len(name) > 3:
return _private_1(name)
else:
return _private_2(name)
在模块里公开greeting()
函数,而把内部逻辑用private
函数隐藏起来了,这样,调用greeting()
函数不用关心内部的private
函数细节,这也是一种非常有用的代码封装和抽象的方法,即:外部不需要引用的函数全部定义成private
,只有外部需要引用的函数才定义为public
。
安装第三方模块
1,pip
安装与使用
(1)在Python中,安装第三方模块,是通过包管理工具pip
完成的
(2)在命令提示符窗口下尝试运行pip
,如果Windows提示未找到命令,下载https://bootstrap.pypa.io/get-pip.py,然后直接运行 python get-pip.py
即可
(3)安装第三方库Pillow
的命令是:
pip install Pillow
2,安装常用模块:推荐直接使用Anaconda
(1)官网下载:https://www.anaconda.com/products/distribution
(2)按流程安装,下图全选
(3)cmd
打开运行命令框,activate base
激活环境,进入Python
C:\Users\Alexia Lee>activate base
(base) C:\Users\Alexia Lee>python
Python 3.9.7 (default, Sep 16 2021, 16:59:28) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
3,模块搜索路径
(1)加载模块时,Python会在指定的路径下搜索对应的.py
文件,如果找不到,就会报错
(2)默认情况下,Python解释器会搜索当前目录、所有已安装的内置模块和第三方模块,搜索路径存放在sys
模块的path
变量中:
>>> import sys
>>> sys.path
(3)添加搜索目录
- 方法一:暂时设置——直接修改
sys.path
,添加要搜索的目录:
>>> import sys
>>> sys.path.append('/Users/michael/my_py_scripts')
- 方法二:永久设置——设置PYTHONPATH环境变量
https://blog.csdn.net/Tona_ZM/article/details/79463284