Python 基础合集9:模块和包(上)

一、前言

本小节主要梳理类的模块和包的基本知识点。介绍什么是模块,怎么下载、学习和使用模块。

环境说明:Python 3.6、windows11 64位

二、了解模块和包

模块简单来说就是一个Python文件,常见的Python文件的后缀名是.py,里面可以有类,函数和变量。模块的名称就是文件名。

注:除了.py,还有这几类文件:.pyo.pyc.pyd.so.dll

模块之上还有一级,就是包。包可以简单理解为一个文件夹,里面包含了一个或多个模块,这些模块中会有一个特殊的模块__init__.py
函数和类是初级的复用,模块是更高一级的复用,而包则是最高程度的复用。一般一个包会有一个完美的解决方案。
注意:模块的命名经常是初学者的大坑!切记切记不要和Python自带的模块或需要用到的第三方模块重名,不然可能会出现很多意想不到的bug。推荐一个稳妥的方式,加个my_前缀,或者用Testxxx

封装模块的目的也是可以把程序代码和数据存放起来以便再次利用。
我们新建一个.py后缀的Python代码文件保存之后,便可以通过其他的Python代码文件调用它。
image.png

# Test1.py
# 类的定义
class My_class:
    my_name = 'Xindata'

    @classmethod
    def my_func1(cls):
        cls.my_eye = 'black'
        print(cls.my_eye)

    @staticmethod
    def my_func2():
        My_class.t_shirt = 'white'
        print(My_class.t_shirt)

    def my_func3(self):  # 创建实例方法
        self.hobby = 'writting'  # 创建实例属性
        print(self.hobby)

My_class.hair = 'black'
@classmethod
def func4(cls):
    cls.skill_1 = 'Python'
    print(cls.skill_1)
My_class.my_func4 = func4

# 创建实例属性和方法
my_eg = My_class()  # 类的实例化,实例my_eg拥有类的所有属性和方法
my_eg.height = 175

def func5(self):
    self.skill_2 = 'SQL'
    print(self.skill_2)
My_class.my_func5 = func5  # 注意这里还是My_class,而不是my_eg


# Test2.py
import Test1
Mine = Test1.My_class()
print(Mine.my_name)
Mine.my_func1()
Test1.func5(Mine)

# 打印结果为:
# Xindata
# black
# SQL

2.1 调用模块的三种方法

1)import
调用模块语法:import [模块名],如上一小节的import Test1
调用模块中的变量使用:[模块名].[变量名]
调用模块中的函数使用:[模块名].[函数名]([参数])
实例化模块中的类使用:[模块名].[类名]([参数])
实例化之后,调用实例的属性和方法跟在同一个文件定义的类的实例调用属性和方法类似,相关知识点可参考:《类和实例》的2.2.2 实例化调用

2)import…as…
用法:import [模块名] as [别名]
调用模块中的变量使用:[别名].[变量名]
调用模块中的函数使用:[别名].[函数名]([参数])
实例化模块中的类使用:[别名].[类名]([参数])
实例化之后,调用实例的属性和方法跟在同一个文件定义的类的实例调用属性和方法类似。
如下代码,给Test1命一个别名t,之后使用到Test1模块的对象都通过t调用,结果和直接使用Test1一致。

# Test2.py
import Test1 as t
Mine = t.My_class()
print(Mine.my_name)
Mine.my_func1()
t.func5(Mine)

3)from…import…
用法: 从模块中导入一个指定的部分到当前模块(函数、变量、类名)。
例如,只导入Test1My_class类,其他的都不要,然后对类进行实例化并调用my_name属性和my_func1()方法。

# Test2.py
from Test1 import My_class
Mine = My_class()
print(Mine.my_name)
Mine.my_func1()

2.2 程序的入口

语法:if __name__ == '__main__':
用法:当直接运行的文件时,则会执行if __name__ == '__main__': 下的语句;
当文件作为模块是被其他程序导入时,代码if __name__=='__main__'下的代码则不会执行。
例如:运行Test1.py,会执行if __name__=='__main__'下的代码,调用My_class类的属性my_name和方法my_func1()my_func2()my_func3();但是调用Test2.py的时候,不会执行if __name__=='__main__'下的代码。

# Test1.py
# 类的定义
class My_class:
    my_name = 'Xindata'

    @classmethod
    def my_func1(cls):
        cls.my_eye = 'black'
        print(cls.my_eye)

    @staticmethod
    def my_func2():
        My_class.t_shirt = 'white'
        print(My_class.t_shirt)

    def my_func3(self):  # 创建实例方法
        self.hobby = 'writting'  # 创建实例属性
        print(self.hobby)

if __name__ == '__main__':
    print(My_class.my_name)
    My_class.my_func1()
    My_class.my_func2()
    My_class().my_func3()
    
# 打印结果为:
# Xindata
# black
# white
# writting


# Test2.py
import Test1
Mine = Test1.My_class()
print(Mine.my_name)
Mine.my_func1()

# 打印结果为:
# Xindata
# black

三、模块和包的下载

除了使用自己创建模块和包之外,也可以使用Python自带的模块和包或Python的第三方模块和包,也就是别人发布的模块和包(关于模块和包的发布下节介绍)。

讲下载之前先说说关于下载路径的问题,如果你已经安装过好像模块和包,或许你会发现,有时候一些模块和包的安装位置在以下的路径下:

C:\Users[你的用户名]\AppData\Roaming\Python\Python36\site-packages

而不是在你安装Python的路径下,比如我是安装在D盘,包的路径是:D:\Python3\Lib\site-packages
如果想让所有的模块和包都下载到Python的安装路径下,可以通过以下操作实现:
打开文件【D:\Python3\Lib\site.py】,该文件内容比较多,可以通过打开查找(Ctrl+F)工具,输入【USER_SITE = None】搜索定位。
image.png
接下来,把上面两个路径修改为Python的安装路径,保存即可。

USER_SITE = "D:\\Python3\\Lib\\site-packages"
USER_BASE = "D:\\Python3\\Scripts"

注意:要用\\以免受到转义的影响。
怎么判断修改是否有效呢?可以在修改前后在命令符输入python -m site观察。

下面介绍模块和包的下载安装常用的四种方式。

3.1 使用pip直接安装

这是最简单的安装方式,在没有任何配置的情况下,下载源默认是Python官方网站,在网络不好的情况下,会出现链接超时。
Windows:打开cmd,输入 pip install [模块名/包名],回车。
Mac:打开终端,输入pip3 install [模块名/包名],回车。

3.2 通过镜像源安装

镜像源是什么意思呢?简单讲就是一个中转站,把Python官方网站的模块和包同步到国内的一个“大仓库”,方便开发者调取“货品”使用。

常用的镜像源:

清华大学镜像:https://pypi.tuna.tsinghua.edu.cn/simple/
阿里云:http://mirrors.aliyun.com/pypi/simple/
中科大镜像:https://pypi.mirrors.ustc.edu.cn/simple/
豆瓣镜像:http://pypi.douban.com/simple/
中科大镜像2:http://pypi.mirrors.ustc.edu.cn/simple/

以清华镜像源为例
Windows:打开cmd,输入 pip install [模块名/包名] -i https://pypi.tuna.tsinghua.edu.cn/simple,回车。
Mac:打开终端,输入 pip3 install [模块名/包名] -i https://pypi.tuna.tsinghua.edu.cn/simple,回车。

3.3 先下载.whl文件,再用pip安装

再下载安装模块和包的时候,如果仔细看返回的信息,可以发现,通常会先安装一个.whl文件,有时候通过pip安装会卡在搜索和下载.whl文件阶段,这是后便有了另外一种安装方式,就是先下载.whl文件,然后通过pip install [.whl文件](Windows)或pip3 install [.whl文件](Mac)进行安装。
.whl文件的下载地址:

Windows(可通过Ctrl+F搜索):https://www.lfd.uci.edu/~gohlke/pythonlibs/
Mac(官网直接搜索模块和包名,找到对应版本的下载文件的界面,便可看到):https://pypi.org/

3.4 通过安装包

以上都是需要用到pip工具辅助安装,还有一种安装方式不用pip,通过压缩包离线安装。
首先可以到官方网站或镜像源网站下载压缩文件,文件的后缀是.tar.gz,下载完解压,将整个文件夹放到Python安装目录的Lib\site-packages下。如:我把Python安装在D盘的Python3文件夹下,那么我对应的目录就是D:\Python3\Lib\site-packages
打开解压后的文件夹,可以看到里面有一个setup.py文件,需要执行该文件才能完成安装,执行方法参考如下:
● 方法1:进入解压后的文件夹,然后在地址栏输入%comspec%(如下图),回车。这时候会调出终端命令行,输入python setup.py install等待安装完成即可;
在这里插入图片描述

● 方法2:也可以自行调出终端(Windows快捷键win+R,输入cmd,回车),然后切换路径到解压后的文件夹地址下,输入python setup.py install等待安装完成即可。

另外,如果你的好友已经有安装好的模块和包,在版本合适的情况下,直接拷贝一份放到Python的安装目录的Lib\site-packages下,便可直接调用。

三、自学模块

1)搜索模块的py文件

方法1:在终端,输入python调出测试环境(标识>>>),再输入import [模块名],然后输入 [模块名].__file__
例如我的random模块(Python自带)

>>> import random
>>> random.__file__
'D:\\anaconda3\\lib\\random.py'

image.png
注:测试环境都是指在终端输入python之后调出的环境。
方法2:查看某个模块、方法、属性的内容,可以在编辑器中输入对应英文,按住Ctrl,然后把光标放在该英文上,会出现类似链接的标志,左键单击,便会调出相应的.py文件。(前提是有安装Python和相关模块
image.png

2)查看相关函数及用法

方法1:在测试环境中,输入import [模块名],然后输入dir([模块名])回车可看到相关的函数,输入help([模块名].[函数名])可查看相关函数的用法。

  • 如下例子,查看random模块的函数,并查看randint方法的用法:返回a~b的随机整数,包括两个端点,即包含a和b。
>>> import random
>>> dir(random)
['BPF', 'LOG4', 'NV_MAGICCONST', 'RECIP_BPF', 'Random', 'SG_MAGICCONST', 'SystemRandom', 'TWOPI', '_Sequence', '_Set', '__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', '_accumulate', '_acos', '_bisect', '_ceil', '_cos', '_e', '_exp', '_floor', '_inst', '_log', '_os', '_pi', '_random', '_repeat', '_sha512', '_sin', '_sqrt', '_test', '_test_generator', '_urandom', '_warn', 'betavariate', 'choice', 'choices', 'expovariate', 'gammavariate', 'gauss', 'getrandbits', 'getstate', 'lognormvariate', 'normalvariate', 'paretovariate', 'randbytes', 'randint', 'random', 'randrange', 'sample', 'seed', 'setstate', 'shuffle', 'triangular', 'uniform', 'vonmisesvariate', 'weibullvariate']
>>> help(random.randint)
Help on method randint in module random:

randint(a, b) method of random.Random instance
    Return random integer in range [a, b], including both end points.
>>>

方法2:通过百度,如搜索:python xx模块
方法3:查看官方文档,可通过搜索:python xx模块官方文档,逐一甄别。(由于算法问题,官方的文档一般不会展示在前面,以下搜索结果官方文档在第二页的第二条,算法推荐随时改变,不一定你搜索的时候也是出现在这里,可能在第一页就可以看到,可能在第三页,以实际为准,自行甄别)
image.png
image.png
如果是Python的标准库,可以通过该链接直达:Python标准库




<下节预告:模块和包(下)>


- End -

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Xin学数据

为你点亮一盏灯,愿你前进无阻。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值