常见系统模块汇总 | 手把手教你入门Python之四十七

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 介绍了一些常见的系统模块, Sys模块提供对解释器使用或维护的一些变量的访问,以及与解释器强烈交互的函数。math模块保存了数学计算相关的方法,可以很方便的实现数学运算。random 模块主要用于生成随机数或者从一个列表里随机获取数据等。

上一篇:5个案例详解装饰器 | 手把手教你入门Python之四十六
下一篇:如何使用pip管理第三方包? | 手把手教你入门Python之四十八

本文来自于千锋教育在阿里云开发者社区学习中心上线课程《Python入门2020最新大课》,主讲人姜伟。

Python中的模块

在Python中有⼀个概念叫做模块(module)。

说的通俗点:模块就好⽐是⼯具包,要想使⽤这个⼯具包中的⼯具(就好⽐函数),就需要导⼊这个模块

⽐如我们经常使⽤⼯具 random,就是⼀个模块。使⽤ import random 导⼊⼯具之后,就可以使⽤ random 的函数。

导⼊模块

导⼊模块有五种⽅式

  • import 模块名
  • from 模块名 import 功能名
  • from 模块名 import *
  • import 模块名 as 别名
  • from 模块名 import 功能名 as 别名

import

在Python中⽤关键字 import 来引⼊某个模块,⽐如要引⼊系统模块 math,就可以在⽂件最开始的地⽅
import math 来引⼊。
语法:

import 模块1,模块2,... # 导⼊⽅式
模块名.函数名() # 使⽤模块⾥的函数

为什么必须加上模块名调⽤呢?
因为可能存在这样⼀种情况:在多个模块中含有相同名称的函数,此时如果只是通过函数名来调⽤,解释器⽆法知道到底要调⽤哪个函数。所以如果像上述这样引⼊模块的时候,调⽤函数必须加上模块名。

import math
#这样才能正确输出结果
print math.sqrt(2)
#这样会报错
print(sqrt(2))

from…import

有时候我们只需要⽤到模块中的某个函数,只需要引⼊该函数即可,此时可以⽤下⾯⽅法实现:

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

不仅可以引⼊函数,还可以引⼊⼀些全局变量、类等

注意:

通过这种⽅式引⼊的时候,调⽤函数时只能给出函数名,不能给出模块名,但是当两个模块中含有相同名称函数的时候,后⾯⼀次引⼊会覆盖前⼀次引⼊。也就是说假如模块A中有函数function(),在模块B中也有函数function( ),如果引⼊A中的function在先、B中的function在后,那么当调⽤function函数的时候,是去执⾏模块B中的function函数。

例如,要导⼊模块fib的fibonacci函数,使⽤如下语句:

from fib import fibonacci

不会把整个fib模块导⼊到当前的命名空间中,它只会将fib⾥的fibonacci单个函数引⼊。

from … import *

把⼀个模块的所有内容全都导⼊到当前的命名空间也是可⾏的,只需使⽤如下声明:

from modname import *

注意:这提供了⼀个简单的⽅法来导⼊⼀个模块中的所有项⽬。然⽽这种声明不该被过多地使⽤。

as 别名

In [1]: import time as tt # 导⼊模块时设置别名为 tt
In [2]: time.sleep(1)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-2-07a34f5b1e42> in <module>()
----> 1 time.sleep(1)
NameError: name 'time' is not defined
In [3]:
In [3]: tt.sleep(1) # 使⽤别名才能调⽤⽅法
In [4]:
In [4]: from time import sleep as sp # 导⼊⽅法时设置别名
In [5]: sleep(1)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-5-82e5c2913b44> in <module>()
----> 1 sleep(1)
NameError: name 'sleep' is not defined
In [6]:
In [6]: sp(1) # 使⽤别名才能调⽤⽅法
In [7]:

OS模块

OS全称OperationSystem,即操作系统模块,这个模块可以⽤来操作系统的功能,并且实现跨平台操作。

import os
os.getcwd() # 获取当前的⼯作⽬录,即当前python脚本⼯作的⽬录
os.chdir('test') # 改变当前脚本⼯作⽬录,相当于shell下的cd命令
os.rename('毕业论⽂.txt','毕业论⽂-最终版.txt') # ⽂件重命名
os.remove('毕业论⽂.txt') # 删除⽂件
os.rmdir('demo') # 删除空⽂件夹
os.removedirs('demo') # 删除空⽂件夹
os.mkdir('demo') # 创建⼀个⽂件夹
os.chdir('C:\\') # 切换⼯作⽬录
os.listdir('C:\\') # 列出指定⽬录⾥的所有⽂件和⽂件夹
os.name # nt->widonws posix->Linux/Unix或者MacOS
os.environ # 获取到环境配置
os.environ.get('PATH') # 获取指定的环境配置

os.path.abspath(path) # 获取Path规范会的绝对路径
os.path.exists(path) # 如果Path存在,则返回True
os.path.isdir(path) # 如果path是⼀个存在的⽬录,返回True。否则返回False
os.path.isfile(path) # 如果path是⼀个存在的⽂件,返回True。否则返回False
os.path.splitext(path) # ⽤来将指定路径进⾏分隔,可以获取到⽂件的后缀名

Sys模块的使用

该模块提供对解释器使用或维护的一些变量的访问,以及与解释器强烈交互的函数。

sys.exit(code)
让程序以指定的退出码结束。

import sys

print('hello world')
sys.exit()    # 程序退出,和内置函数exit功能一致
print('呵呵呵呵')

执行结果:
image.png

sys.exit(100) 

image.png
sys.path
模块的查找路径。

print(sys.path)

执行结果:
image.png
结果是一个列表,表示查找模块的路径。

sys.stdin
标准输入。可以通过它来获取用户的输入。

sys.stdout
标准输出。可以通过修改它来改变默认输出位置

sys.stderr
错误输出。可以通过修改它来改变错误输出的默认位置

sys.stderr

1 / 0

执行结果:
image.png
sys.stdoutsys.stderr默认都是在控制台。

sys.argv
传递给Python脚本的命令行参数列表。

Math模块

math模块保存了数学计算相关的方法,可以很方便的实现数学运算。

math.factorial(6)
计算阶乘

import math
print(math.factorial(6))

执行结果:
image.png

math.floor(12.98)
向下取整

import math
print(math.floor(12.98))

执行结果:
image.png

math.ceil(15.0001)
向上取整

import math
print(math.ceil(15.0001))

执行结果:
image.png

math.pow(2, 10)
2的10次方,幂运算

import math
print(math.pow(2, 10))

执行结果:
image.png

#2 ** 10 / pow(2,10) / math.pow(2,10)
都可以计算幂运算,但是有一些细微的差别。

round()
不是math中的,属于内置函数,实现四舍五入到指定位数。

math.pi
π的值,约等于 3.141592653589793

math.sin(math.pi / 6)
正弦值,弧度计算,π=180°

import math
print(math.sin(math.pi / 6))

执行结果:
image.png

math.cos(math.pi / 3)
余弦值

import math
print(math.cos(math.pi / 3)) 

执行结果:
image.png

math.tan(math.pi / 2)
正切值

import math
print(math.tan(math.pi / 2)) 

执行结果:
image.png

math.fabs(-100)
取绝对值

import math
print(math.fabs(-100))

执行结果:
image.png

random模块

random 模块主要用于生成随机数或者从一个列表里随机获取数据。

randint(a,b)
生成[a,b]的随机整数,等价于randrange(a, b+1)。

import random
print(random.randint(2, 9)) 

执行结果:
image.png

random()
生成 [0,1)的随机浮点数。

import random
print(random.random())

执行结果:
image.png

randrange(a, b)
生成[a,b)的随机整数。

import random
print(random.randrange(20, 30)) 

执行结果:
image.png

choice()
从可迭代对象里随机取出一个元素

import random
print(random.choice(['zhangsan', 'lisi', 'jack', 'henry', 'tony'])) 

执行结果:
image.png

sample()
从可迭代对象里随机取出指定个数的元素

import random
print(random.sample(['zhangsan', 'lisi', 'jack', 'henry', 'tony'], 2)) 

执行结果:
image.png

uniform(a,b)
生成[a,b]的随机浮点数

import random
print(random.uniform(20, 30)) 

执行结果:
image.png

Datetime模块

datetime模块主要用来显示日期时间,这里主要涉及 date 类,用来显示日期; time 类,用来显示时间; datetime 类,用来显示日期时间; timedelta 类用来计算时间。

import datetime as dt
print(dt.date(2020, 1, 1)) # 创建一个日期
print(dt.time(18, 23, 45)) # 创建一个时间
print(dt.datetime.now()) # 获取当前的日期时间
print(dt.datetime.now() + dt.timedelta(3)) # 计算三天以后的日期时间

执行结果:
image.png
涉及四个类:date/time/datetime/timedelta。
我们接触过的类:内置类
list、tuple、int、str。

time模块

除了使用datetime模块里的time类以外,Python还单独提供了另一个time模块,用来操作时间。time模块不仅可以用来显示时间,还可以控制程序,让程序暂停(使用sleep函数)。

import time
print(time.time()) # 获取从1970-01-01 00:00:00 UTC 到现在时间的秒数
print(time.strftime("%Y-%m-%d %H:%M:%S")) # 按照指定格式输出时间
print(time.asctime()) #Mon Apr 15 20:03:23 2019
print(time.ctime()) # Mon Apr 15 20:03:23 2019
print('hello')
print(time.sleep(10)) # 让线程暂停10秒钟
print('world')

执行结果:
image.png
ctime()给定一个秒数,生成一个时间。传递一个时间戳。
asctime()传递的是一个元组。
image.png

calendar模块

calendar模块用来显示一个日历。

c = calendar.calendar(2019) # 生成2019年的日历,并且以周日为起始日期码
print(c) #打印2019年日历

calendar.setfirstweekday(calendar.SUNDAY) # 设置每周起始日期码。周一到周日分别对应 0 ~ 6

calendar.firstweekday()# 返回当前每周起始日期的设置。默认情况下,首次载入calendar模块时返回0,即星期一。

print(calendar.isleap(2000)) # True.闰年返回True,否则返回False

count = calendar.leapdays(1996,2010) # 获取1996年到2010年一共有多少个闰年
print(count)

print(calendar.month(2019, 3)) # 打印2019年3月的日历

执行结果:
image.png
image.png
image.png
image.png
image.png
image.png

hashlib模块

hashlib是一个提供字符加密功能的模块,包含MD5SHA的加密算法,支持md5,sha1, sha224,sha256, sha384, sha512等算法。 该模块用户登录面广泛,文本加密也很见。

加密方式:单向加密:只有加密的过程,不能解密md5/sha、
对称加密、非对称加密rsa

需要将加密的内容转化为二进制

import hashlib

x = hashlib.md5() # 生成一个md5对象
x.update('abc'.encode('utf8'))
print(x.hexdigest())

执行结果:
image.png

import hashlib

h1 = hashlib.sha1('123456'.encode())
print(h1.hexdigest())
h2 = hashlib.sha224('123456'.encode())  #  224位 一个十六进制占4位
print(h2.hexdigest())
h3 = hashlib.sha256('123456'.encode())
print(h3.hexdigest())
h4 = hashlib.sha384('123456'.encode())
print(h4.hexdigest())

执行结果:
image.png

hmac模块

HMAC算法也是一种单项加密算法,并且它是基于上面各种哈希算法/散列算法的,只是它可以在运算过程中使用一个密钥来增强安全性。hmac模块实现了HAMC算法,提供了相应的函数和方法,且与hashlib提供的api基本一致。

hmac加密可以指定密钥

import hmac

h = hmac.new('h'.encode(),'你好'.encode())
result = h.hexdigest()
print(result) # 获取加密后的结果

执行结果:
image.png

copy模块

copy模块里有copy和deepcopy两个函数,分别用来对数据进行深复制和浅复制。

import copy

nums = [1, 5, 3, 8, [100, 200, 300, 400], 6, 7]
nums1 = copy.copy(nums) # 对nums列表进行浅复制
nums2 = copy.deepcopy(nums) # 对nums列表进行深复制

print(nums1)
print(nums2)

执行结果:
image.png

uuid模块

UUID是128位的全局唯一标识符,通常由32字节的字母串表示,它可以保证时间和空间的唯一性,也称为GUID。通过MAC地址、时间戳、命名空间、随机数、伪随机数来保证生产的ID的唯一性。随机生成字符串,可以当成token使用,当成用户账号使用,当成订单号使用。

方法 作用
uuid.uuid1() 基于MAC地址,时间戳,随机数来生成唯一的uuid,可以保证全球范围内的唯一性。
uuid.uuid2() 算法与uuid1相同,不同的是把时间戳的前4位置换为POSIX的UID。不过需要注意的是python中没有基于DCE的算法,所以python的uuid模块中没有uuid2这个方法。
uuid.uuid3(namespace,name) 通过计算一个命名空间和名字的md5散列列值来给出一个uuid,所以可以保证命名空间中的不同名字具有不同的uuid,但是相同的名字就是相同的uuid了。namespace并不是一个自己手动指定的字符串或其他量,而是在uuid模块中本身给出的一些值。比如uuid.NAMESPACEDNS,uuid.NAMESPACEOID,uuid.NAMESPACE_OID这些值。这些值本身也是UUID对象,根据一定的规则计算得出。
uuid.uuid4() 通过伪随机数得到uuid,是有一定概率重复的
uuid.uuid5(namespace,name) 和uuid3基本相同,只不过采用的散列算法是sha1

一般而言,在对uuid的需求不是很复杂的时候,uuid1或者uuid4方法就已经够用了,使用方法如下:

import uuid

print(uuid.uuid1()) # 根据时间戳和机器码生成uuid,可以保证全球唯一   32个长度,每一个字符有16个选择,16**32

# 使用命名空间和字符串生成uuid.
# 注意以下两点:
# 1. 命名空间不是随意输入的字符串,它也是一个uuid类型的数据
# 2. 相同的命名空间和相同的字符串,生成的uuid是一样的
print(uuid.uuid3(uuid.NAMESPACE_DNS, 'hello')) # 生成固定的uuid
print(uuid.uuid5(uuid.NAMESPACE_OID, 'hello')) # 生成固定的uuid

print(uuid.uuid4()) # 随机生成uuid,可能会有重复

执行结果:
image.png

配套视频

相关文章
|
13天前
|
机器学习/深度学习 人工智能 算法
猫狗宠物识别系统Python+TensorFlow+人工智能+深度学习+卷积网络算法
宠物识别系统使用Python和TensorFlow搭建卷积神经网络,基于37种常见猫狗数据集训练高精度模型,并保存为h5格式。通过Django框架搭建Web平台,用户上传宠物图片即可识别其名称,提供便捷的宠物识别服务。
169 55
|
22天前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
2天前
|
存储 缓存 监控
局域网屏幕监控系统中的Python数据结构与算法实现
局域网屏幕监控系统用于实时捕获和监控局域网内多台设备的屏幕内容。本文介绍了一种基于Python双端队列(Deque)实现的滑动窗口数据缓存机制,以处理连续的屏幕帧数据流。通过固定长度的窗口,高效增删数据,确保低延迟显示和存储。该算法适用于数据压缩、异常检测等场景,保证系统在高负载下稳定运行。 本文转载自:https://www.vipshare.com
90 66
|
13天前
|
Python
Python Internet 模块
Python Internet 模块。
108 74
|
23天前
|
机器学习/深度学习 人工智能 算法
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
宠物识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了37种常见的猫狗宠物种类数据集【'阿比西尼亚猫(Abyssinian)', '孟加拉猫(Bengal)', '暹罗猫(Birman)', '孟买猫(Bombay)', '英国短毛猫(British Shorthair)', '埃及猫(Egyptian Mau)', '缅因猫(Maine Coon)', '波斯猫(Persian)', '布偶猫(Ragdoll)', '俄罗斯蓝猫(Russian Blue)', '暹罗猫(Siamese)', '斯芬克斯猫(Sphynx)', '美国斗牛犬
129 29
【宠物识别系统】Python+卷积神经网络算法+深度学习+人工智能+TensorFlow+图像识别
|
4天前
|
存储 算法 Python
文件管理系统中基于 Python 语言的二叉树查找算法探秘
在数字化时代,文件管理系统至关重要。本文探讨了二叉树查找算法在文件管理中的应用,并通过Python代码展示了其实现过程。二叉树是一种非线性数据结构,每个节点最多有两个子节点。通过文件名的字典序构建和查找二叉树,能高效地管理和检索文件。相较于顺序查找,二叉树查找每次比较可排除一半子树,极大提升了查找效率,尤其适用于海量文件管理。Python代码示例包括定义节点类、插入和查找函数,展示了如何快速定位目标文件。二叉树查找算法为文件管理系统的优化提供了有效途径。
35 5
|
23天前
|
测试技术 开发者 Python
探索Python中的装饰器:从入门到实践
装饰器,在Python中是一块强大的语法糖,它允许我们在不修改原函数代码的情况下增加额外的功能。本文将通过简单易懂的语言和实例,带你一步步了解装饰器的基本概念、使用方法以及如何自定义装饰器。我们还将探讨装饰器在实战中的应用,让你能够在实际编程中灵活运用这一技术。
37 7
|
23天前
|
机器学习/深度学习 人工智能 算法
深度学习入门:用Python构建你的第一个神经网络
在人工智能的海洋中,深度学习是那艘能够带你远航的船。本文将作为你的航标,引导你搭建第一个神经网络模型,让你领略深度学习的魅力。通过简单直观的语言和实例,我们将一起探索隐藏在数据背后的模式,体验从零开始创造智能系统的快感。准备好了吗?让我们启航吧!
61 3
|
7月前
|
人工智能 Java Python
python入门(二)安装第三方包
python入门(二)安装第三方包
107 1
|
2月前
|
机器学习/深度学习 Python
【10月更文挑战第5天】「Mac上学Python 6」入门篇6 - 安装与使用Anaconda
本篇将详细介绍如何在Mac系统上安装和配置Anaconda,如何创建虚拟环境,并学习如何使用 `pip` 和 `conda` 管理Python包,直到成功运行第一个Python程序。通过本篇,您将学会如何高效地使用Anaconda创建和管理虚拟环境,并使用Python开发。
80 4
【10月更文挑战第5天】「Mac上学Python 6」入门篇6 - 安装与使用Anaconda