Python标准库概览

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**8while (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 - startPerfCountercoreLoop()coreLoopPerfCounter = time.perf_counter()coreLoopPerf = coreLoopPerfCounter - otherLoop1PerfCounterotherLoop2()otherLoop2PerfCounter = time.perf_counter()otherLoop2Perf = otherLoop2PerfCounter - coreLoopPerfCounterendPerfCounter = time.perf_counter()totalPerf = endPerfCounter - startPerfCounterendTime = 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/280pencolor((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.rhkb.cn/news/103783.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

快速指南:使用Termux SFTP通过远程进行文件传输——”cpolar内网穿透“

文章目录 1. 安装openSSH2. 安装cpolar3. 远程SFTP连接配置4. 远程SFTP访问4. 配置固定远程连接地址 SFTP&#xff08;SSH File Transfer Protocol&#xff09;是一种基于SSH&#xff08;Secure Shell&#xff09;安全协议的文件传输协议。与FTP协议相比&#xff0c;SFTP使用了…

微信ipad协议,微信协议,个人号二次开发

微信iPad协议&#xff0c;采用最新的ASE加密&#xff0c;以及最新的算法&#xff0c;iPad协议是一套微信个人号接口&#xff0c;基于web开发&#xff0c;它能实现微信中的百分之八十的功能&#xff0c;并辅助微信执行各种操作&#xff0c;提供了客户与微信个人号对接的能力&…

day4 驱动开发

【ioctl函数的使用】 1.概述 linux有意将对设备的功能选择和设置以及硬件数据的读写分成不同的函数来实现。让read/write函数专注于数据的读写&#xff0c;而硬件功能的设备和选择通过ioctl函数来选择 2.ioctl函数分析 int ioctl(int fd,unsigned long request) 通过&…

windows上ffmpeg如何录制双屏幕中的一个屏幕上的视频

首先&#xff0c;如何在window上安装ffmpeg自己查找scoop安装ffmpeg. 如题&#xff1a; 如果你有两个屏幕&#xff0c;如何让ffmpeg来录制其中的一个屏幕的视频呢。 很简单&#xff0c;首先你要查看另外一个屏幕的分辨率&#xff1a; 第一步&#xff1a;进入系统中 第二步&am…

docker 内apt-get安装软件都不好使

报各种错误 apt-get install --no-install-recommends libboost-all-dev Reading package lists... Done Building dependency tree Reading state information... Done The following additional packages will be installed:autoconf automake autotools-dev cpp-8 gc…

安装docker服务 配置镜像

1.安装docker服务&#xff0c;配置镜像加速器 2.下载系统镜像&#xff08;Ubuntu、 centos&#xff09; 3.基于下载的镜像创建两个容器 &#xff08;容器名一个为自己名字全拼&#xff0c;一个为首名字字母&#xff09; 4.容器的启动、 停止及重启操作 操作代码启动docker sta…

合肥先进光源高速数据采集网的规划

合肥先进光源束测后台的初步设计&#xff0c;这里的网络相关的部分摘出来换个名字重新整理一下&#xff1a; 合肥光源中&#xff0c;没有把数据量大的设备比如摄像头、示波器规划进单独的网络&#xff0c;所有的设备都直接接入控制网&#xff0c;运行实践的过程中&#xff0c;有…

CG MAGIC分享如何3d Max新版本如何能在旧版本中打开呢?

三维行业来说&#xff0c;无论是三维软件还是插件&#xff0c;都是在持续更新功能的。 3d Max这款软件&#xff0c;自然也不例外&#xff0c;不断推出新版本以提供更多强大的功能和工具。 随着新版本的发布&#xff0c;旧版本用户可能面临一个问题&#xff1a; 3d Max新版本…

MediaPlayer音频与视频的播放介绍

作者&#xff1a;向阳逐梦 Android多媒体中的——MediaPlayer&#xff0c;我们可以通过这个API来播放音频和视频该类是Androd多媒体框架中的一个重要组件&#xff0c;通过该类&#xff0c;我们可以以最小的步骤来获取&#xff0c;解码和播放音视频。 它支持三种不同的媒体来源…

第3篇:vscode搭建esp32 arduino开发环境

第1篇:Arduino与ESP32开发板的安装方法 第2篇:ESP32 helloword第一个程序示范点亮板载LED 1.下载vscode并安装 https://code.visualstudio.com/ 运行VSCodeUserSetup-x64-1.80.1.exe 2.点击扩展&#xff0c;搜索arduino,并点击安装 3.点击扩展设置&#xff0c;配置arduino…

vue2 vue中的常用指令

一、为什么要学习Vue 1.前端必备技能 2.岗位多&#xff0c;绝大互联网公司都在使用Vue 3.提高开发效率 4.高薪必备技能&#xff08;Vue2Vue3&#xff09; 二、什么是Vue 概念&#xff1a;Vue (读音 /vjuː/&#xff0c;类似于 view) 是一套 **构建用户界面 ** 的 渐进式 …

第 7 章 排序算法(2)(冒泡排序)

7.5冒泡排序 7.5.1基本介绍 冒泡排序&#xff08;Bubble Sorting&#xff09;的基本思想是&#xff1a;通过对待排序序列从前向后&#xff08;从下标较小的元素开始&#xff09;,依次比较相邻元素的值&#xff0c;若发现逆序则交换&#xff0c;使值较大的元素逐渐从前移向后部…

C#使用自定义的比较器对版本号(编码)字符串进行排序

给定一些数据&#xff0c;如下所示: “1.10.1.1.1.2”, “1.1”, “2.2”, “1.1.1.1”, “1.1.3.1”, “1.1.1”, “2.10.1.1.1”, “1.1.2.1”, “1.2.1.1”, “2.5.1.1”, “1.10.1.1”, “1.10.2.1”, “1.11.3.1”, “1.11.12.1”, “1.11.11.1”, “1.11.3.1”, “1”, “…

自动化测试平台seldom-platform部署及使用

介绍 seldom-platform是一个基于seldom测试框架的测试平台 项目地址&#xff1a;https://github.com/SeldomQA 文档&#xff1a;seldom 语雀 首先&#xff0c;专门为seldom测试框架提供平台化支持。其次&#xff0c;只负责自动化测试项目的解析、执行用例&#xff0c;当然…

Elasticsearch简介及安装

&#x1f353; 简介&#xff1a;java系列技术分享(&#x1f449;持续更新中…&#x1f525;) &#x1f353; 初衷:一起学习、一起进步、坚持不懈 &#x1f353; 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正&#x1f64f; &#x1f353; 希望这篇文章对你有所帮助,欢…

基于黄金正弦算法优化的BP神经网络(预测应用) - 附代码

基于黄金正弦算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码 文章目录 基于黄金正弦算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码1.数据介绍2.黄金正弦优化BP神经网络2.1 BP神经网络参数设置2.2 黄金正弦算法应用 4.测试结果&#xff1a;5…

redis实战-缓存三剑客穿透击穿雪崩解决方案

缓存穿透 定义 缓存穿透 &#xff1a;缓存穿透是指客户端请求的数据在缓存中和数据库中都不存在&#xff0c;这样缓存永远不会生效&#xff0c;这些请求都会打到数据库&#xff0c;造成数据库压力&#xff0c;也让缓存没有发挥出应有的作用 解决方案 缓存空对象 当我们客户端…

css实现文字的渐变,适合大屏

1 在全局写一个全局样式&#xff0c;文字渐变 2 在组件中使用 CSS3利用-webkit-background-clip: text;实现文字渐变效果_css如何把盒子底部的文字变成透明渐变_I俩月亮的博客-CSDN博客 CSS 如何实现文字渐变色 &#xff1f;_css字体颜色渐变_一个水瓶座程序猿.的博客-CSDN博客…

时序分解 | MATLAB实现基于SWD群体分解的信号分解分量可视化

时序分解 | MATLAB实现基于SWD群体分解的信号分解分量可视化 目录 时序分解 | MATLAB实现基于SWD群体分解的信号分解分量可视化效果一览基本介绍程序设计参考资料 效果一览 基本介绍 基于SWD群体分解的分量可视化&#xff0c;基于群体分解的信号分解技术&#xff0c;MATLAB程序…

Linux网络编程:线程池并发服务器 _UDP客户端和服务器_本地和网络套接字

文章目录&#xff1a; 一&#xff1a;线程池模块分析 threadpool.c 二&#xff1a;UDP通信 1.TCP通信和UDP通信各自的优缺点 2.UDP实现的C/S模型 server.c client.c 三&#xff1a;套接字 1.本地套接字 2.本地套 和 网络套对比 server.c client.c 一&#xff1a;线…