Python标准库概览

news2024/11/18 9:27:24

Python标准库概览

知识点

  • 标准库: turtle库(必选)
  • 标准库: random库(必选)、time库(可选)

知识导图

img

1、turtle库概述

  • turtle(海龟)是Python重要的标准库之一,它能够进行基本的图形绘制。
  • turtle库绘制图形有一个基本框架:一个小海龟在坐标系中爬行,其爬行轨迹形成了绘制图形。对于小海龟来说,有“前进”、“后退”、“旋转”等爬行行为,对坐标系的探索也通过“前进方向”、“后退方向”、“左侧方向”和“右侧方向”等小海龟自身角度方位来完成。
  • 使用import保留字对turtle库的引用有如下三种方式
  • 第一种,import turtle,则对turtle库中函数调用采用 turtle.<函数名>() 形式。
import turtle
turtle.circle(200)
  • 第二种,from turtle import *,则对turtle库中函数调用直接采用 <函数名>()形式,不在使用turtle.作为前导。
from turtle import *
circle(200)
  • 第三种,import turtle as t,则对turtle库中函数调用采用更简洁的 t.<函数名>() 形式,保留字as的作用是将turtle库给予别名t。
import turtle as t
t.circle(200)

1.1 turtle库与基本绘图

  • turtle库包含100多个功能函数,主要包括窗体函数、画笔状态函数、画笔运动函数等三类。

1.2 窗体函数

  • turtle.setup(width, height, startx, starty)

作用:设置主窗体的大小和位置

参数:

width :窗口宽度,如果值是整数,表示的像素值;如果值是小数,表示窗口宽度与屏幕的比例;

height::窗口高度,如果值是整数,表示的像素值;如果值是小数,表示窗口高度与屏幕的比例;

startx:窗口左侧与屏幕左侧的像素距离,如果值是None,窗口位于屏幕水平中央;

starty:窗口顶部与屏幕顶部的像素距离,如果值是None,窗口位于屏幕垂直中央;

1.3 画笔状态函数

函数描述
pendown()放下画笔
penup()提起画笔,与pendown()配对使用
pensize(width)设置画笔线条的粗细为指定大小
color()设置画笔的颜色
begin_fill()填充图形前,调用该方法
end_fill()填充图形结束
filling()返回填充的状态,True为填充,False为未填充
clear()清空当前窗口,但不改变当前画笔的位置
reset()清空当前窗口,并重置位置等状态为默认值
screensize()设置画布的长和宽
hideturtle()隐藏画笔的turtle形状
showturtle()显示画笔的turtle形状
isvisible()如果turtle可见,则返回True
  • turtle中的画笔(即小海龟)可以通过一组函数来控制,其中turtle.penup()和turtle.pendown()是一组,它们分别表示画笔的提起和落下,函数定义如下:

turtle.penup() 别名 turtle.pu(), turtle.up()

作用:抬起画笔,之后,移动画笔不绘制形状

参数:无

turtle.pendown() 别名 turtle.pd(), turtle.down()

作用:落下画笔,之后,移动画笔将绘制形状

参数:无

  • turtle.pensize()函数用来设置画笔尺寸

turtle.pensize(width) 别名 turtle.width()

作用:设置画笔宽度,当无参数输入时返回当前画笔宽度

参数:

width :设置的画笔线条宽度,如果为None或者为空,函数则返回当前画笔宽度。

  • turtle.pencolor()函数给画笔设置颜色

turtle.pencolor(colorstring) 或者 turtle.pencolor((r,g,b))

作用:设置画笔颜色,当无参数输入时返回当前画笔颜色

参数:

colorstring :表示颜色的字符串,例如:“purple”、“red”、"blue"等(r,g,b): 颜色对应RGB的01数值,例如:1, 0.65, 0

1.4 画笔运动函数

函数描述
forward()沿着当前方向前进指定距离
backward()沿着当前相反方向后退指定距离
right(angle)向右旋转angle角度
left(angle)向左旋转angle角度
goto(x,y)移动到绝对坐标(x,y)处
setx( )将当前x轴移动到指定位置
sety( )将当前y轴移动到指定位置
setheading(angle)设置当前朝向为angle角度
home()设置当前画笔位置为原点,朝向东。
circle(radius,e)绘制一个指定半径r和角度e的圆或弧形
dot(r,color)绘制一个指定半径r和颜色color的圆点
undo()撤销画笔最后一步动作
speed()设置画笔的绘制速度,参数为0-10之间
  • turtle.fd()函数最常用,它控制画笔向当前行进方向前进一个距离

turtle.seth()函数用来改变画笔绘制方向turtle.fd(distance) 别名 turtle.forward(distance)

作用:向小海龟当前行进方向前进distance距离

参数:

distance :行进距离的像素值,当值为负数时,表示向相反方向前进。

  • turtle.seth()函数用来改变画笔绘制方向

turtle.seth(to_angle) 别名 turtle.setheading(to_angle)

作用:设置小海龟当前行进方向为to_angle,该角度是绝对方向角度值。

参数:

to_angle :角度的整数值。

  • turtle.circle()函数用来绘制一个弧形

turtle.circle(radius, extent=None)

作用:根据半径radius绘制extent角度的弧形。

参数:

radius :弧形半径,当值为正数时,半径在小海龟左侧,当值为负数时,半径在小海龟右侧;

extent : 绘制弧形的角度,当不给该参数或参数为None时,绘制整个圆形。

2、random库概述

  • 使用random库主要目的是生成随机数
  • 这个库提供了不同类型的随机数函数,其中最基本的函数是random.random(),它生成一个[0.0, 1.0)之间的随机小数,所有其他随机函数都是基于这个函数扩展而来。
from random import *
print(random())
# 0.5780913011344704
print(random())
# 0.20609823213950174

2.1 random库与随机数运用

  • random库的常用函数
函数描述
seed(a=None)初始化随机数种子,默认值为当前系统时间
random()生成一个[0.0, 1.0)之间的随机小数
randint(a, b)生成一个[a,b]之间的整数
getrandbits(k)生成一个k比特长度的随机整数
randrange(start, stop[, step])生成一个[start, stop)之间以step为步数的随机整数
uniform(a, b)生成一个[a, b]之间的随机小数
choice(seq)从序列类型(例如:列表)中随机返回一个元素
shuffle(seq)将序列类型中元素随机排列,返回打乱后的序列
sample(pop, k)从pop类型中随机选取k个元素,以列表类型返回
  • random库使用random.seed(a)对后续产生的随机数设置种子a。
from random import *
seed(10)
print(random())
# 0.5714025946899135
print(random())
# 0.4288890546751146
seed(10) #再次设置相同的种子,则后续产生的随机数相同
print(random())
# 0.5714025946899135
print(random())
# 0.4288890546751146
  • 设置随机数种子的好处是可以准确复现随机数序列,用于重复程序的运行轨迹。对于仅使用随机数但不需要复现的情形,可以不用设置随机数种子。n 如果程序没有显式设置随机数种子,则使用随机数生成函数前,将默认以当前系统的运行时间为种子产生随机序列。

3、time库概述

  • 处理时间是程序最常用的功能之一,time库是Python提供的处理时间标准库。time库提供系统级精确计时器的计时功能,可以用来分析程序性能,也可让程序暂停运行时间。
import time
print(time.localtime())
'''
time.struct_time(tm_year=2017, tm_mon=12,
tm_mday=2, tm_hour=14, tm_min=44, tm_sec=9,
tm_wday=4, tm_yday=26, tm_isdst=0)'''
  • time库的功能主要分为3个方面:时间处理、时间格式化和计时。

• 时间处理主要包括4 个函数: time.tiem ( ) 、time.gmtime()、time.localtime() 、time.ctime()。

• 时间格式化主要包括3个函数:time.mktime()、time.strftime()、time.strptime()。

• 计时主要包括3 个函数: time.sleep ( ) 、time.monotonic()、time.perf_counter()

  • 使用time.time()获取当前时间戳
import time
print(time.time())
# 1516939876.6022282
  • 使用time.gmtime(secs)获取当前时间戳对应的struct_time对象
import time
print( time.gmtime(now))
'''
time.struct_time(tm_year=2020, tm_mon=1,
tm_mday=26, tm_hour=4, tm_min=11, tm_sec=16,
tm_wday=4, tm_yday=26, tm_isdst=0)'''
  • 使用time.localtime(secs)获取当前时间戳对应的本地时间的struct_time对象
import time
print( time.localtime(now))
'''
time.struct_time(tm_year=2020, tm_mon=1, tm_mday=26,
tm_hour=12, tm_min=11, tm_sec=16, tm_wday=4,
tm_yday=26, tm_isdst=0)'''
  • 注意结果与gmtime的区别,UTC时间已自动转换为北京时间。
  • 使用time.ctime(secs)获取当前时间戳对应的易读字符串表示,内部会调用time.localtime()函数以输出当地时间。
import time
print( time.ctime(now))
# 'Fri Jan 26 12:11:16 2020'
  • time库使用time.mktime()、time.strftime()、time.strptime()进行时间格式化。
  • 使用time.mktime(t) 将struct_time对象t转换为时间戳,注意t代表当地时间。struct_time对象的元素如下
下标属性
0tm_year年份,整数
1tm_mon月份[1, 12]
2tm_mday日期[1, 31]
3tm_hour小时[0, 23]
4tm_min分钟[0, 59]
5tm_sec秒[0, 61]
6tm_wday星期[0, 6](0表示星期一)
7tm_yday该年第几天[1, 366]
8tm_isdst是否夏时令,0否, 1是, -1未知
  • 调用time.mktime(t)函数
import time
t = time.localtime(now)
print( time.mktime(t))
# 1516939876.0
print( time.ctime(time.mktime(t)))
# 'Fri Jan 26 12:11:16 2020'
  • time.strftime()函数是时间格式化最有效的方法,几乎可以以任何通用格式输出时间。该方法利用一个格式字符串,对时间格式进行表达。
import time
lctime = time.localtime()
print( lctime)
'''
time.struct_time(tm_year=2020, tm_mon=1, tm_mday=26,
tm_hour=12, tm_min=55, tm_sec=20, tm_wday=4, tm_yday=26,
tm_isdst=0)
'''
print( time.strftime("%Y-%m-%d %H:%M:%S", lctime))
# '2020-01-26 12:55:20'
  • strftime()方法的格式化控制符
格式化字符串日期/时间值范围和实例
%Y年份0001~9999,例如:1900
%m月份01~12,例如:10
%B月名January~December,例如:April
%b月名缩写Jan~Dec,例如:Apr
%d日期01 ~ 31,例如:25
%A星期Monday~Sunday,例如:Wednesday
%a星期缩写Mon~Sun,例如:Wed
%H小时(24h制)00 ~ 23,例如:12
%I小时(12h制)01 ~ 12,例如:7
%p上/下午AM, PM,例如:PM
%M分钟00 ~ 59,例如:26
%S00 ~ 59,例如:26
  • strptime()方法与strftime()方法完全相反,用于提取字符串中时间来生成strut_time对象,可以很灵活的作为time模块的输入接口
import time
timeString = '2020-01-26 12:55:20'
print( time.strptime(timeString, "%Y-%m-%d %H:%M:%S"))
'''
time.struct_time(tm_year=2020, tm_mon=1, tm_mday=26,
tm_hour=12, tm_min=55, tm_sec=20, tm_wday=4, tm_yday=26,
tm_isdst=-1)'''

4、time库与程序计时

  • 程序计时是非常常用的功能,尤其是对于运行时间较长的程序,往往需要先进行小规模(短时间)的实验,并根据实验结果预估最终程序的大致运行时间。
  • 程序计时主要要包含三个要素:程序开始/结束时间、程序运行总时间、程序各核心模块运行时间。
  • 下面以1千万次循环计时为例介绍程序计时的实现,并进一步理解time模块相关函数的运用。
  • 以1千万次循环为主体,模拟实际程序的核心模块,用time.sleep()来模拟实际程序的其他模块。
import time
def coreLoop():
    limit = 10**8
    while (limit > 0):
        limit -= 1
def otherLoop1():
    time.sleep(0.2)
def otherLoop2():
    time.sleep(0.4)
    
def main():
    startTime = time.localtime()
    print('程序开始时间:', time.strftime('%Y-%m-%d %H:%M:%S', startTime))
    startPerfCounter = time.perf_counter()
    otherLoop1()
    otherLoop1PerfCounter = time.perf_counter()
    otherLoop1Perf = otherLoop1PerfCounter - startPerfCounter
    coreLoop()
    coreLoopPerfCounter = time.perf_counter()
    coreLoopPerf = coreLoopPerfCounter - otherLoop1PerfCounter
    otherLoop2()
    otherLoop2PerfCounter = time.perf_counter()
    otherLoop2Perf = otherLoop2PerfCounter - coreLoopPerfCounter
    endPerfCounter = time.perf_counter()
    totalPerf = endPerfCounter - startPerfCounter
    endTime = time.localtime()
    print("模块1运行时间是:{}秒".format(otherLoop1Perf))
    print("核心模块运行时间是:{}秒".format(coreLoopPerf))
    print("模块2运行时间是:{}秒".format(otherLoop2Perf))
    print("程序运行总时间是:{}秒".format(totalPerf))
    print('程序结束时间:', time.strftime('%Y-%m-%d %H:%M:%S', endTime))
main()
  • 程序运行的输出效果如下
程序开始时间: 2017-12-26 13:46:39
模块1运行时间是:0.20003105182731706秒
核心模块运行时间是:5.987101639820927秒
模块2运行时间是:0.40018931343066555秒
程序运行总时间是:6.587323585324574秒
程序结束时间: 2017-12-26 13:46:45

5、实例解析:雪景艺术绘图

  • turtle图形艺术,指利用turtle库画笔创造性绘制绚丽多彩艺术图形的过程。
  • turtle图形艺术效果中隐含着很多随机元素,如随机颜色、尺寸、位置和数量等。在图形艺术绘制中需要引入随机函数库random。常
  • 用randint()函数,生成指定范围内的随机数,
  • “雪景”图形艺术背景为黑色,分为上下两个区域,上方是漫天彩色雪花,下方是由远及近的灰色横线渐变。该图运用了随机元素,如雪花位置、颜色、大小、花瓣数目、地面灰色线条长度、线条位置等,需要使用turtle库和random库。
  • 绘制分为三个步骤

\1. 构建图的背景

\2. 绘制雪花效果

\3. 绘制雪地效果

  • 第一步,构建图的背景

设定窗体大小为800x600像素,窗体颜色为black。然后,定义上方雪花绘制函数drawSnow()和下方雪地绘制函数drawGround()。

  • 第二步,绘制雪花效果。

为体现艺术效果,drawSnow()函数首先隐藏turtle画笔、设置画笔大小、绘制速度,然后使用for循环绘制100朵雪花。雪花大小snowsize、雪花花瓣数dens都分别设定为一定数值范围随机数。最后通过for循环绘制出多彩雪花。

  • 第三步,绘制雪地效果。

drawGround()函数使用for循环绘制地面400个小横线,画笔大小pensize、位置坐标x、y、线段长度均通过randint()函数作为随机数产生。

# SnowView.py
from turtle import *
from random import *
def drawSnow():
    hideturtle()
    pensize(2)
    for i in range(100):
        r, g, b = random(), random(), random()
        pencolor(r,g,b)
        penup()
        setx(randint(-350,350))
        sety(randint(1,270))
        pendown()
        dens = randint(8,12)
        snowsize = randint(10,14)
        for j in range(dens):
            forward(snowsize)
            backward(snowsize)
            right(360/dens)
def drawGround():
    hideturtle()
    for i in range(400):
        pensize(randint(5,10))
        x = randint(-400,350)
        y = randint(-280,-1)
        r, g, b = -y/280, -y/280, -y/280
        pencolor((r,g,b))
        penup()
        goto(x,y)
        pendown()
        forward(randint(40,100))
setup(800,600,200,200)
tracer(False)
bgcolor("black")
drawSnow()
drawGround()
done()

小结

本次主要讲解了3个重要的Python标准库:turtle、random和time,分别用于基本图形绘制、随机数运用和时间处理。再详细讲解各函数库功能基础上,通过雪景随机艺术画的绘制进一步帮助读者掌握这三个有趣且有用的标准库。

能够用Python绘图了,最想绘制的图形是什么?最想送给谁?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/921175.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ubuntu18.04复现yolo v8之最终章,realsenseD435i+yolo v8完美运行

背景&#xff1a;上一篇博客我们已经为复现yolov8配置好了环境&#xff0c;如果前面的工作顺利进行&#xff0c;我们已经完成了90%&#xff08;学习类程序最难的是环境配置&#xff09;。 接下来将正式下载yolov8的相关代码&#xff0c;以及进行realsenseD435i相机yolo v8的de…

ONLYOFFICE 文档如何与 Alfresco 进行集成

ONLYOFFICE 文档是一款开源办公套件&#xff0c;其是包含文本文档、电子表格、演示文稿、数字表单、PDF 查看器和转换工具的协作性编辑工具。要在 Alfresco 中使用 ONLYOFFICE 协作功能&#xff0c;可以将他们连接集成。阅读本文&#xff0c;了解这如何实现。 关于 ONLYOFFICE…

长胜证券:逾九成北交所公司上半年盈利,两大板块表现优异

到现在&#xff0c;已有28家北交所公司净赢利增速超越30%。 逾九成北交所公司完成盈余 半年报进入密布发表期。证券时报数据宝统计&#xff0c;到8月23日收盘&#xff0c;已有88家北交所上市公司发布2023年半年度相关陈述。 从营收规模来看&#xff0c;合计69家北交所公司上半…

传感器IMU

IMU根据其属性&#xff0c;可以知道其主要测量是线加速度和角加速度&#xff1a; (1) (2) 其中和分别是线加速度偏差和角加速度偏差,可以利用随机游走模型建模&#xff0c;, ,且符合高斯分布;和是噪声&#xff0c;一般认为符合高斯分布;表示全球坐标下的重力加速度;表示旋转变…

网络电子词典

一、项目要求&#xff1a; 1. 登录注册功能&#xff0c;不能重复登录&#xff0c;重复注册 2. 单词查询功能 3. 历史记录功能&#xff0c;存储单词&#xff0c;意思&#xff0c;以及查询时间 4. 基于TCP&#xff0c;支持多客户端连接 5. 采用数据库保存用户信息与历史记录…

002 编程是什么?

魔法师:在这个充满魔法和奇迹的数字时代,你是否好奇过计算机是如何运作的?当你用手机玩游戏、在电脑上浏览网页、看动画电影,你是否想过这背后的秘密是什么?别担心,今天我们将揭开这神秘的面纱,一起来探索编程的神奇世界! 编程,简单地说,就是一种让计算机执行任务的…

第五章:认证和动态菜单功能【基于Servlet+JSP的图书管理系统】

一、登录功能 1.认证实现 53-图书管理系统-登录功能-认证处理 首先完成最基础的登录功能&#xff0c;也就是在登录页面通过表单提交账号和密码到Servlet中。做相关的校验。给出不同的反应。 然后对应的Servlet中的处理逻辑 WebServlet(name "loginServlet",urlPatt…

软件测试的常用概念

目录 需求 需求和软件测试人员的关系 需求是侧式人员进行软件测试工作的依据,需要通过软件需求,来设计测试用例 软件的生命周期 在每个阶段,测试人员需要做什么事? 软件测试的生命周期 BUG 什么是bug? 如何描述一个bug? bug的级别 bug的生命周期: 调试和测试的区…

Linux虚拟机安装(Ubuntu 20)

最近这段时间使用VMWare安装了一下Ubuntu版本的Linux虚拟机&#xff0c;在这里记录一下安装时参考的文章以及需要注意的细节 参考链接&#xff1a; 虚拟机&#xff08;VMware&#xff09;安装Linux&#xff08;Ubuntu&#xff09;安装教程 VMware虚拟机下安装Ubuntu20.04&…

这所985重大科目变更!新增专硕可考信号!

一、学校及专业介绍 重庆大学&#xff08;ChongqingUniversity&#xff0c;CQU&#xff09;&#xff0c;简称“重大”&#xff0c;是教育部直属的全国重点大学&#xff0c;是国家“211工程”和“985工程”重点建设的高水平研究型综合性大学、国家“世界一流大学建设高校&#…

跨境电商系统开发:打破国界壁垒,拓展全球市场

拓展全球市场的必然选择 随着国际贸易水平的不断提升和全球市场的日益开放&#xff0c;跨境电商作为一种高效的贸易模式&#xff0c;受到了越来越多电商企业的关注和青睐。跨境电商不仅可以打破国界壁垒和时差限制&#xff0c;还可以在全球市场上实现销售的拓展&#xff0c;带来…

SVN 项目管理笔记

SVN 项目管理笔记 主要是介绍 SVN 管理项目的常用操作&#xff0c;方便以后查阅&#xff01;&#xff01;&#xff01; 一、本地项目提交到SVN流程 在SVN仓库下创建和项目名同样的文件夹目录&#xff1b;选中本地项目文件&#xff0c;选择SVN->checkout,第一个是远程仓库项…

FOC之SVPWM学习笔记

一、参考资料 【自制FOC驱动器】深入浅出讲解FOC算法与SVPWM技术 - 知乎FOC入门教程_zheng是在下的博客-CSDN博客DengFOC官方文档技术干货 |【自制】FOC驱动板 二、FOC控制算法流程框图 在FOC控制中主要用到三个PID环&#xff0c;从内到外依次是&#xff1a;电流环、速度环、位…

DevExpress WinForms数据编辑器组件,提供丰富的数据输入样式!(二)

DevExpress WinForms超过80个高影响力的WinForms编辑器和多用途控件&#xff0c;从屏蔽数据输入和内置数据验证到HTML格式化&#xff0c;DevExpress数据编辑库提供了无与伦比的数据编辑选项&#xff0c;包括用于独立数据编辑或用于容器控件(如Grid, TreeList和Ribbon)的单元格。…

第60步 深度学习图像识别:误判病例分析(Pytorch)

基于WIN10的64位系统演示 一、写在前面 上期内容基于Tensorflow环境做了误判病例分析&#xff08;传送门&#xff09;&#xff0c;考虑到不少模型在Tensorflow环境没有迁移学习的预训练模型&#xff0c;因此有必要在Pytorch环境也搞搞误判病例分析。 本期以SqueezeNet模型为…

Java不用加减乘除做加法(图文详解)

目录 1.题目描述 2.题解 分析 具体实现 1.题目描述 写一个函数&#xff0c;求两个整数之和&#xff0c;要求在函数体内不得使用、-、*、/四则运算符号。 示例 输入&#xff1a;1 2 输出&#xff1a;3 2.题解 分析 不能使用加减乘除四则运算符&#xff0c;那我们只能考虑…

论文笔记:从不平衡数据流中学习的综述: 分类、挑战、实证研究和可重复的实验框架

0 摘要 论文&#xff1a;A survey on learning from imbalanced data streams: taxonomy, challenges, empirical study, and reproducible experimental framework 发表&#xff1a;2023年发表在Machine Learning上。 源代码&#xff1a;https://github.com/canoalberto/imba…

多环境开发

多环境 1、多环境开发&#xff08;YAML版&#xff09; 小结&#xff1a; 多环境开发需要设置若干种常用环境&#xff0c;例如开发、生产、测试环境yaml格式中设置多环境使用—区分环境设置边界每种环境的区别在于加载的配置属性不同启用某种环境时需要指定启动时使用该环境 …

跨境电商儿童沙画办理EN71测试标准

儿童沙画就是小孩子玩的那种用彩色沙子或者彩色墨水&#xff0c;在有图形轮廓的纸片上去绘画&#xff0c;可以按照儿童沙画底板上的人物轮廓线条&#xff0c;动物线条&#xff0c;风景线条&#xff0c;动漫线条&#xff0c;去添加自己喜欢的颜色&#xff0c;让单调的线条变成自…

请不要将数据中台做成BI!

近年来&#xff0c;随着数据驱动决策的重要性日益凸显&#xff0c;数据管理的概念也不断演进。数据中台作为一种新兴的数据管理模式&#xff0c;旨在集中组织和整合数据资源&#xff0c;为企业提供更高效、更智能的数据支持。然而&#xff0c;有时候在构建数据中台的过程中&…