模块

模块

python把功能相近的函数或者类放到一个.py文件中,一个.py文件就是一个模块。
Python不止提供了标准库中的标准模块,还有很多第三方模块。
模块中可以包含函数、变量、类。

好处:
提高代码复用性、可维护性。
避免函数名和变量名重名发生的冲突。

创建模块

以py后缀命名,不要与python自带标准模块名称相同。
模块名区分大小写。

模块导入

1.使用import导入,使用as给模块取别名。
使用时需要以模块.函数名来执行模块中的函数。

语法

import test #导入test模块
import test,tips,difflib #导入多个模块,不推荐
import test as m #导入test模块并以m为别名
m.fun_bmi() #使用test模块中的fun_bim函数

案例

#定义一个calculate.py模块,并添加以下内容
#模块中的变量
number=1000

#模块中的函数
def add(num):
    print('正在使用{}进行加法运算'.format(num))

#模块中的类
class Calculate:
    def __init__(self,mum1):
        self.num1 = mum1

    def test(self):
        print('你正在使用{}进行运算'.format(self.num1))

#定义一个test.py文件引入calculate.py模块
#导入模块
import calculate
#使用模块变量
print(calculate.number)
#使用模块函数
calculate.add(5)
#使用模块类
result = calculate.Calculate(5)
result.test()
'''
---------------脚本执行结果--------------------
1000
正在使用5进行加法运算
你正在使用5变量进行运算
'''

2.使用from...import语句导入模块
使用时需要确认模块中的变量函数或者类是否同名,如果同名则后导入的同名变量、函数、类会覆盖先导入的。

语法

from modelname import member
#modelname:模块名
#member:模块中的函数,变量或者类

案例

#在test.py文件中导入模块calculate.py中的add函数,number变量,Calculate类
from calculate import add,number,Calculate
#或者
from calculate import * #直接导入模块所有内容
#使用模块变量
print(number)
#使用模块函数
add(5)
#使用模块类
result = Calculate(5)
result.test()

3.使用__all__限制*能导入的内容。
案例

#在calculate.py模块中,添加__all__变量限制*只能导入add函数跟number变量
__all__=['add','number']
#模块中的变量
number=1000

#模块中的函数
def add(num):
    print('正在使用{}进行加法运算'.format(num))

#模块中的类
class Calculate:
    def __init__(self,mum1):
        self.num1 = mum1

    def test(self):
        print('你正在使用{}进行运算'.format(self.num1))

#使用*导入calculate.py模块后,运行test.py文件会报错,因为受__all__变量限制,不能使用模块中的Calculate类
from calculate import *
#使用模块变量
print(number)
#使用模块函数
add(5)
#使用模块类
result = Calculate(5)
result.test()
'''
Traceback (most recent call last):
  File "E:/python/module/test.py", line 8, in <module>
    result = Calculate(5)
NameError: name 'Calculate' is not defined
'''

模块搜索目录

  1. 在当前脚本文件所在目录下查找
  2. 到pythonpath环境变量下的每个目录中查找
  3. 到python默认安装目录下查找

以上目录路径可通过sys.path变量输出

import sys
print(sys.path) 
#out: C:\Users\Administrator\AppData\Local\Programs\Python\Python36\python.exe E:/python/test.py ...

增加目录的三种方式

1.临时添加目录
只在当前py文件中有效。

import sys
sys.path.append('E:/program/Python/Code') #注意反斜杠,使用\\或者/

2.增加.pth文件(推荐)
在Python的安装目录下,C:\Users\Administrator\AppData\Local\Programs\Python\Python36\Lib\site-packages中,创建一个xxx.pth文件,文件名随意,将目录写在文件中即可。


xxx.pth文件内容为:

注意:此方法只在当前版本python中生效。

3.在python环境变量中添加
在环境变量中创建系统变量:


注意:此方法可在不同版本的python中生效。


以主程序的形式执行

在很多情况下,你在a文件里写的函数,在其他地方也可以用到。但同时不想要a文件其他的内容时,可以使用__name__变量。
当直接执行a.py文件时,文件中的__name__变量等于 'main',当这段脚本被导入其他程序的时候,name 变量等于a.py文件的名字。
由此可以使用if判断来决定我们想要执行的函数或类以及变量等。

案例

#a.py文件内容如下
def test():
    print('我只想要test函数')

#以下内容不想要
test()
print('我不想要其他的内容!')

#在main.py中导入a.py文件,我们只想要使用test()函数,执行发现输出了我们不想要的内容
from a import *
'''
---------------脚本执行结果-------------------
我只想要test函数
我不想要其他的内容!
'''

#修改a.py文件如下
def test():
    print('我是测试')

#输出当前__main__变量的值
print('__name__的值为:',__name__)
#这里定义一个if判断是否以a.py文件执行,是则执行后续内容
if __name__ == '__main__':
    test()
    print('我不想要其他的内容!')
'''
---------------脚本a.py执行结果------------------
__name__的值为: __main__
我是测试
我不想要其他的内容!
'''

#在main.py中导入a.py
from a import *
'''
---------------脚本main.py执行结果------------------
__name__的值为: a
'''
#由此可见,变量__name__可以判断是否由主程序执行,如果不是,则值为导入文件名。

Python中的包

就是文件夹,文件夹中且包含一个__init__.py文件。
作用:避免模块名重名引发的冲突

使用包

有三种方式导入包中的模块。

1.通过import 包名.模块名导入
2.通过from 包名 import 模块名导入
3.通过from 包名.模块名 import 变量名、类名、函数导入

案例
定义一个article包,包含models.py模块。
定义一个user包,包含models.py模块。

#article包中的models.py模块代码如下
class Article:
    def __init__(self,name,author):
        self.name = name
        self.author = author

    def show(self):
        print('发表这篇文章《{}》的作者是{},'.format(self.name,self.author))

#user包中的models.py模块代码如下
class User:
    def __init__(self,username,password):
        self.username = username
        self.password = password

    def login(self,username,password):
        if username == self.username and password == self.password:
            print('登录成功')
        else:
            print('登录失败')

#test.py代码如下
#方法一导入包中的模块(使用时需要输入完整的名称)
import article.models
u = article.models.Article('python从run到Error', 'tz')
u.show()

#方法二导入包中的模块(使用时需要输入模块名.类名)
from user import models
u=models.User('tz','123456')
u.login('tz','123456')

#方法三导入包中的模块(使用时可直接输入模块中的类名变量函数等)
from user.models import User
u=User('tz','123456')
u.login('tz','123456')

引用其他模块

1.导入和使用标准模块
python有大约200个内置的标准模块供我们使用。

案例

#导入python标准模块random生成四位验证码
import random
if __name__ == '__main__':
    checkcode = ''
    for i in range(4): #生成0 1 2 3 即循环4次
        index = random.randrange(0,4) #生成范围0-3的随机数
        if index != i and index + 1 != i: #生成小写字母
            checkcode += chr(random.randint(97,122)) #随机生成97-122的数字并转成字母,97-122是a-z的ascii码
        elif index +1 ==i:
            checkcode += chr(random.randint(65,90)) #生成A~Z随机大写字母
        else:
            checkcode += str(random.randint(1,9)) #生成1-9随机数
    print(checkcode)
#这种生成验证码的方法别树一帜,触及到我知识的盲区→数学概率

2.第三方模块下载和安装
登录网站下载
https://pypi.org/ 传送
http://pypi.python.org/pypi 传送

使用pip工具下载

pip install numpy #安装numpy模块
pip uninstall numpy #卸载numpy模块
pip list #查看安装的模块

学习来自:《python从入门到项目实践》明日科技 第十三章(视频)

B站大学 P161-P162

posted @ 2020-11-25 19:59  努力吧阿团  阅读(135)  评论(0编辑  收藏  举报