013 模块

1.模块概述

举个例子来形容一下模块,我们在准备一个新房的时候,我们会在里面置备一些物品,例如电饭煲、微波炉、电话、电脑等,电饭煲为我们提供煲饭、煲粥、蒸米饭等功能,微波炉为我们提供低温加热、中温加热、高温加热等功能,手机为我们提供接电话、打电话、存号码等功能、电脑为我们提供编程、查阅资料、网络维护等功能。如果我们再买来一台榨汁机,榨汁机为我们提供了榨果汁、做奶昔、做果酱等功能。

我们可以把电饭煲、微波炉、电话、电脑等最初就在家中准备好的物品看作是内部模块,我们在家中就可以直接使用它们的功能,也就是说我们只要把这个物品拿出来我们就可以使用,而后来买的榨汁机,我们可以看作是我们从第三方库中引入的模块,我们只要从第三方库中买来之后,我们才可以拿出来使用它的一系列功能。

我们总结一下,内部模块就是存储在内部可以直接调用的模块,调用了这个模块我们就可以使用它的功能,而第三方库中的模块则是需要我们先下载,下载完之后我们才可以调用来使用。

013 模块

import random#从系统库中引入这个模块

test = random.randint(1,10)#使用random模块中的randint()方法
print('生成一个随机数:',test)

013 模块
当我们使用模块中的功能时一定要先引入这个模块,如果不引入会出现下面的情况:
013 模块

1.1 模块的调用方式

a、 import 模块名

这种方式就是我们常用的调用方式,直接调用了模块中的所有方法,我们可以直接在程序中使用。
当我们调用了random之后,我们在使用的时候可以看到它所包含的一系列方法。如下图。
013 模块

b、 import 模块名 as 别名

import math as t
test = t.cos(2.5)
print(test)

013 模块

这种方式等同于给这个模块又取了一个名字,我们可以通过这个别名来使用模块中的方法。

c、 from 模块名 import 函数名

这种方式仅仅调用了模块中的一个函数,我们在使用这函数的时候可以直接使用。

from random import randint
test = randint(1,10)
print(test)

013 模块
总结:

一般来说我们会采用第三种方式去使用某一种方法,避免我们的程序中因为变量名和模块中的名字相同而出现错误

2.自定义模块

  • 我们引入的模块通常有三种类型,一种是系统库中存在的模块,一种是第三方模块,最后一种就是我们自己定义来的模块。
  • 当我们在写一个程序的时候,为了避免一个主程序的代码过于复杂,我们会将一些函数或功能写在单独的文件中,然后通过主程序调用这些自己定义的模块,我们自己定义的模块注意扩展名要以.py结尾。

发牌游戏来学习自定义模块 : 4个人玩牌,电脑随机将52张牌(不含大小王)发给4个人,在屏幕上显示每位牌手的牌。 分析:

  1. 52张牌,按梅花0-12,方块13-25,红桃26-38,黑桃39-51顺序编号并存储在pocker列表中(未洗牌之前)。
  2. 定义一个洗牌功能,随机产生两个位置索引,交换两个牌的位置,进行100次随机交换,达到洗牌的目的。
  3. 发牌时,交换后pocker列表,按顺序加到四个牌手的列表中。
  4. 52张牌发给4个人,每人13张,13轮循环,每次循环发给四个人。
  5. 每人发一张牌的动作一样,用函数main实现。
  6. 发一张牌的动作可以包含两部分:获取花色,获取数值,分别用get_color和get_value实现。

2.1 创建模块

首先完成获取颜色的模块及其函数:【 模块名为getcolor.py】

def get_color(n):
    if n<13:
        return '梅花'
    elif n<26:
        return '方块'
    elif n<39:
        return '红桃'
    else:
        return '黑桃'

接下来创建获取值的模块及其函数:【getvalue.py】

def get_value(n):
    if n==0 or n==13 or n==26 or n==39:
        return 'A'
    elif n==12 or n==25 or n==38 or n==51:
        return 'K'
    elif n==11 or n==24 or n==37 or n==50:
        return 'Q'
    elif n==10 or n==23 or n==36 or n==49:
        return 'J'
    else:
        return n%13

2.2 调用模块

import random
from getcolor import get_color
from getvalue import get_value

n = 52 # 一共52张牌

def gen_pocker(n):
    random.shuffle(n)
    return n

def main():
    List = []   # 代表一副牌,现在表示还没有牌,只是一个牌盒
    List1 = []  # 定义4个牌手
    List2 = []
    List3 = []
    List4 = []

    # 洗牌
    for i in range(0, 52):
        List.append(i)  # 按顺序往牌盒中放入52张牌
    List = gen_pocker(List)  # 将牌盒中的牌打乱顺序

    # 发牌
    for i in range(0, 52):  # 实现发牌
        if i < 13:  # 打乱后的前13张牌发给牌手1,实现牌手1手牌中如何含有花色和数字
            List1.append(get_color(List[i]) + str(get_value(List[i])))
        elif i < 26:
            List2.append(get_color(List[i]) + str(get_value(List[i])))
        elif i < 39:
            List3.append(get_color(List[i]) + str(get_value(List[i])))
        else:
            List4.append(get_color(List[i]) + str(get_value(List[i])))
    # 显示牌
    print(List)
    print("牌手1", List1)
    print("牌手2", List2)
    print("牌手3", List3)
    print("牌手4", List4)

if __name__ == '__main__':
    main()

013 模块
在这个题中,我们采用的是导入模块的第三种方式,直接引入模块的函数功能。

3.math模块

Python的math模块为我们提供了一系列关于数学方面的功能,可以帮助我们进行指数、对数、平方根、三角函数等运算。

3.1 幂和对数

我们在求某个数的平方根或者是平方和又或者是幂运算的时候,往往要借助math模块。

  • 取对数运算

math.log(x[,底数]),这种方式会返回一个以基数为底的x的对数,如果省略底数就是以2为底。

import math
a = math.log(144,12)
b = math.log(36,6) # 6^2=36
print(a)
print(b)

013 模块

  • 取平方根运算

math.sqrt(x),返回x的平方根。

import math
a = math.sqrt(16)
b = math.sqrt(256)
print(a)
print(b)

013 模块

  • 取幂运算

pow(x,y),返回的是x的y次幂。

import math
a = math.pow(2,4)
b = math.pow(10,3)
print(a)
print(b)

013 模块

3.2 三角函数

三角函数的使用和上面的用法类似。
三角正弦值:math.sin(x)
三角余弦值:math.cos(x)
三角正切值:math.tan(x)
弧度的反正弦:math.asin(x)
弧度的反余弦:math.acos(x)
弧度的反正切:math.atan(x)

如果是将弧度转换为角度或者将角度转换为弧度,采用下面的用法。
弧度转角度:math.degress(x)
角度转弧度:math.radinans(x)

import math
a = math.sin(30)
b = math.cos(30)
c = math.tan(30)
d = math.asin(0.6)
e = math.acos(0.6)
f = math.atan(0.6)
g = math.degrees(2 * math.pi)
h = math.radians(360 / math.pi)
print(a)
print(b)
print(c)
print(d)
print(e)
print(f)
print(g)
print(h)

013 模块

需要注意的是我们在Python里使用math.pi来表示‘π’。

3.3 舍入函数

  • math.ceil(x):返回大于x或等于x的最小整数。
  • math.floor(x):返回小于x或等于x的最大整数。
  • 同时在Python中有一个内置函数round(x)为我们提供四舍五入的操作。
import math
a = math.ceil(3.5) # 返回大于x或等于x的最小整数。
b = math.floor(3.5) #返回小于x或等于x的最大整数。
c = round(3.5)
d = round(3.4)
print(a)
print(b)
print(c)
print(d)

013 模块

  • math模块中的函数只适用于整数和浮点数
  • 如果是复数的话我们要采用cmath模块
  • math模块是系统内置的模块,在设计到数学运算的时候我们可以直接进行引入并使用。

4.random模块

random模块主要为我们提供一些生成随机数的功能,下面表格总结了random模块中几个常用函数。

013 模块

4.1 random.random()

import random

# random.random() 生成一个[0,1)的实数。
a = random.random()
b = random.random()
c = random.random()
print(a)
print(b)
print(c)

013 模块

返回的浮点数的值和位数都不一定相同。

4.2 random.randint(a,b)

randint是包含a和b,相当于【】,可以取到a和b

import random
a = random.randint(1,3)
b = random.randint(1,3)
c = random.randint(1,3)
print(a)
print(b)
print(c)

013 模块

4.3 random.randrange(a,b)

import random
a = random.randrange(1,3)
b = random.randrange(1,3)
c = random.randrange(1,3)
d = random.randrange(1,3)
print(a)
print(b)
print(c)
print(d)

013 模块

通过测试结果我们可以看出只有1和2,是不包含下界3的

4.4 random.shuffle(x)

它可以将一个序列进行重新排序,但是需要注意,它只针对于可改变的序列,因此它常被用于打乱列表中的元素。

import random
a = ['d','o','t','c','p','p']
print('打乱前的列表:',a)
random.shuffle(a)
print('打乱后的列表:',a)

013 模块

4.5 random.choice(x)

random.choice(x)可以返回一个序列中的一个随机元素

import random
a = ['d','o','t','c','p','p']
b = 'dotcpp'
c = ('d','o','t','c','p','p')
print(random.choice(a))
print(random.choice(b))
print(random.choice(c))

013 模块

4.6 random.uniform(a,b)

用于生成指定范围内的随机浮点数

import random
a = random.uniform(1.1,3.3)
b = random.uniform(5,6)
c = random.uniform(100,200)
print(a)
print(b)
print(c)

013 模块

5.datetime模块

当我们在Python中需要使用到时间的时候,有两个关于时间的模块,分别是time和datetime。

  • time模块偏底层,在部分函数运行的时候可能会出现不同的结果,
  • 而datetime模块提供了高级API,使用起来更为方便,我们通常在使用的时候会涉及到包含时间和日期的datetime、只包含日期的date以及只包含时间的time

5.1 datetime

013 模块

5.1.1 datetime.datetime.now()

import datetime
t = datetime.datetime.now()#返回当前日期及时间
print(t)

013 模块

5.1.2 date()

import datetime
t = datetime.datetime.now()#返回当前日期及时间
print(t.date())#输出当前的日期

013 模块

5.1.3 time()

import datetime
t = datetime.datetime.now()#返回当前日期及时间
print(t.time())#输出当前的时间

013 模块

5.1.4 utctimetuple()

返回UTC时间元组

import datetime
t = datetime.datetime.now()#返回当前日期及时间
print(t.utctimetuple())#输出当前的日期

013 模块

5.2 date

date对象是日期的专属对象,语法格式如下:

datetime.date(year,month,day) #参数分别代表年月日。

5.2.1 datetime.date.today()

import datetime
t = datetime.date.today()#返回当前日期
print(t)

013 模块

5.2.2 datetime.date.fromtimestamp()

import datetime
import time
c = time.time()#返回当前的时间戳
print('当前的时间戳为:',c)
t = datetime.date.fromtimestamp(c)#与时间戳对应的日期
print('当前时间戳对应的日期为:',t)

013 模块

这个例题中我们先引入了time模块中的方法,time模块中的time.time()能返回当前时间戳,然后我们使用上面的方法可以返回与时间戳对应的日期。

5.3 time

time类中包含了一整天的信息,语法结构如下:

datetime.time(hour,moniute,second,microsecond,tzinfo=None)
import datetime
t = datetime.time(19,42,34,12)
print(t)

013 模块

由于datetime模块中封装了time模块,所以我们使用datetime模块可以保证数据更为精确,在使用过程中也可以穿插着time模块中的部分功能,例如暂停time.sleep()等方法。

6.第三方模块

6.1 安装

6.1.1 cmd中安装

在安装第三方模块之前我们可以先进行查看,看看我们计算机中已安装的第三方模块有哪些,首先要进入cmd界面,快捷进入方式,按左下角的win+r,然后输入cmd并回车,进入下面的页面,然后输入pip list查看。

013 模块
第三方模块的下载,下载命令为:

pip install 模块名

当我在下载的时候出现下面图中的问题:
013 模块
也就是说我的pip版本过低,需要让我更新一下pip的版本,那么我们就输入python -m pip install --upgrade pip进行pip的更新,更新如下图:
013 模块
013 模块
这样就显示我们已经安装成功并可以使用该模块中的一些功能。

6.1.2 Pycharm中安装

在Pycharm中安装第三方插件就简单了很多,我们直接点击Pycharm的左上角【File】键,然后在里面找到并打开【Settings】,进入如下页面,然后我们可以进行模块的下载,点击最右边的‘+’按钮, 点击下面的按钮到最后显示安装成功即可。
013 模块
这里的【demo】是 我建立的项目
013 模块

6.1.3 Pycharm实例中安装

013 模块
013 模块

6.2 卸载

卸载命令:

pip uninstall numpy

013 模块

上一篇:嵌入式100题(013):孤儿进程、僵尸进程、守护进程的概念


下一篇:013 Java内存分析简述