常用内置模块
常用内置模块主要有:
import time
import random
import datetime
import re
import json
import sprite
使用前,请先导入相应的模块,本篇教程及之前函数库的教程,皆是以Python 3.x为基础版本进行编写
一、 time
时间模块,用于时间的获取与转换
1 time.sleep()
time.sleep()用于在程序执行时进行指定时间的休息,单位为秒。例如:
for i in range(5):
print(i)
time.sleep(1)
运行结果:
0
1
2
3
4
这段代码的功能为 : 每隔1秒打印一个数字,其中range(5)用于生成一个迭代对象,此处可理解为是生成了一个列表range(5) => [0, 1, 2, 3, 4],range(5)默认从0开始,共产生5次。可以指明开始点,例如rang(1, 6) = [1, 2, 3, 4, 4](左包括,右不包括); for .. in ..是用于遍历可迭代对象
2 time.localtime()
time.localtime()用于获取本地时间并生成为一个时间元组
print(time.localtime())
运行结果:
time.struct_time(tm_year=2018, tm_mon=8, tm_mday=20, tm_hour=18, tm_min=3, tm_sec=18, tm_wday=0, tm_yday=232, tm_isdst=0)
索引值(index) | 属性(Attribute) | 值(Values) |
---|---|---|
0 | tm_year(年) | (例如:2015) |
1 | tm_mon(月) | 1-12 |
2 | tm_mday(日) | 1-31 |
3 | tm_hour(时) | 0-23 |
4 | tm_min(分) | 0-59 |
5 | tm_sec(秒) | 0-61(60代表闰秒,61是基于历史原因保留) |
6 | tm_wday(星期几) | 0-6(0表示星期一) |
7 | tm_yday(一年中的第几天) | 1-366 |
8 | tm_isdst(是否为夏令时) | 0,1,-1(-1代表夏令时) |
3 time.time()
返回当前时间的时间戳(1970元年后的浮点秒数),可用于测出某段代码的运行耗时
start_time = time.time()
a = 0
for i in range(1, 101):
a += i
end_time = time.time()
print('a的值为:%s' %(a))
print('运行for循环共耗时%s' %(end_time - start_time))
运行结果:
a的值为:5050
运行for循环,共循环100次,总耗时为:0.000190258026123
a += i 是一种简化写法,相当于 a = a + i,类似的用法也可适用于减法(a -= i)、乘法(a *= i)、除法(a /= i)等
二、 randome
主要拥有随机数生成、指定范围内随机数的生成、随机选择等功能
1 random.random()
生成0-1之内的随机浮点数
for i in range(5):
print(random.random())
运行结果:
0.0692932045127
0.00866250612738
0.223208213488
0.215825885145
0.815881998416
random.uniform()用于生成指定范围内的随机数,例如random.uniform(1, 10),生成1-10之内的随机的数
2 random.randint()
生成指定范围内的随机整数
for i in range(5):
print(random.randin(10, 100))
运行结果:
23
67
60
34
83
random.randint()填写范围时,第一个参数为下限,第二个参数为上限,下限参数应小于上限
3 random.choice()
随机选取可迭代对象中的某一元素
a = 'Kuture'
b = ['Mr.Li', 'Keven', 'Lily', 'Potter', 'Marry']
c = (128, 64, 1024, 512, 16)
# 定义方法
def rand_method(num):
for i in range(num):
rand_str = random.choice(a)
rand_list = random.choice(b)
rand_tuple = random.choice(c)
print('Str: ', rand_str)
print('List: ', rand_list)
print('Tuple: ', rand_tuple)
print('-' * 15)
# 调用方法
rand_method(3)
运行结果:
Str: K
List: Mr.Li
Tuple: 16
---------------
Str: t
List: Marry
Tuple: 128
---------------
Str: t
List: Lily
Tuple: 1024
---------------
在Python中常见的迭代对象有字符串(string)、列表(list)、元组(tuple)、字典(dict)等。此段代码中使用了方法,方法相当于是将一段代码放在了一个代码块里,利于减少对于常用功能的重复编写。此方法的功能是根据传入的参数重复相应数量的循环,其中a、b、c分别是字符串(string)、列表(list)、元组(tuple)类型,在for循环中,使用random.choice()随机从其中选择出一个元素。print()在终端打印相应的结果,print('-' * 15)中'-' * 15表示字符串重复显示多少次。
三、datetime
datetime 常用来获取日期、日期间隔、时区等信息,此处介绍常用的两个模块date与datetime中的date.today()与datetime.now()
1 datetime模块简介
datetime模块中包含如下类:
类名 | 功能说明 |
---|---|
date | 日期对象,常用的属性有year, month, day |
time | 时间对象 |
datetime | 日期时间对象,常用的属性有hour, minute, second, microsecond |
datetime_CAPI | 日期时间对象C语言接口 |
timedelta | 时间间隔,即两个时间点之间的长度 |
tzinfo | 时区信息对象 |
datetime模块中包含的常量:
常量 | 功能说明 | 用法 | 返回值 |
---|---|---|---|
MAXYEAR | 返回能表示的最大年份 | datetime.MAXYEAR | 9999 |
MINYEAR | 返回能表示的最小年份 | datetime.MINYEAR | 1 |
2 datetime.date.today()
获取当前日期
# 创建实例化对象
a = datetime.date.today()
b = a.year
c = a.month
d = a.day
print('Date: ', a)
print('Year: ', b)
print('Month: ', c)
print('Day: ', d)
运行结果:
Date: 2018-08-21
Year: 2018
Month: 8
Day: 21
a 为由datetime.date.today()创建的实例化对象
3 datetime.datetime.now()
获取当前日期时间,包含年月日时分秒
a = datetime.datetime.now()
time.sleep(random.randint(1, 10))
b = datetime.datetime.now()
print('时间差:', b - a)
运行结果:
时间差: 0:00:03.005850
随机产生时间休息时间,b - a 表示a点与b点之间的时间差,如果不想显示格式可以:(b-a).seconds => 3
四、re
re是python中的正则表达式模块,常用于匹配查询
正则表达式本身是一种小型的、高度专业化的编程语言,而在python中,通过内嵌集成re模块,可以直接用来实现正则匹配。正则表达式模式被编译成一系列的字节码,由用C编写的匹配引擎执行。
re.match() 与 re.search()
a = 'Kuture is a Developer for Microduino'
result_search = re.search(r'for(.*)', a)
result_match = re.match(r'Kuture is a Developer for(.*)', a)
if result_search:
print('Search: ', result_search.group(1))
if result_match:
print('Match: ', result_match.group(1))
运行结果:
Search: Microduino
Match: Microduino
result__search 使用的是re.search(),其中'for(.*)'代表从a字符串中查找到包含for开始的字符串,并截取for后面的任何元素,’.‘代表匹配任何元素,’*‘代表匹配数量为0-∞。result_match 使用的是re.match(),match需要从头开始匹配,匹配符功能与search()相同。_mathc()是从字符串开始位置进行匹配,search()会在字符串内查找匹配
普通字符和11个元字符
普通字符 | 匹配自身 | abc | abc | ||||
---|---|---|---|---|---|---|---|
. | 匹配任意除换行符"\n"外的字符(在DOTALL模式中也能匹配换行符 | a.c | abc | ||||
\ | 转义字符,使后一个字符改变原来的意思 | a.c;a\c | a.c;a\c | ||||
* | 匹配前一个字符0或多次 | abc* | ab;abccc | ||||
+ | 匹配前一个字符1次或无限次 | abc+ | abc;abccc | ||||
? | 匹配一个字符0次或1次 | abc? | ab;abc | ||||
^ | 匹配字符串开头。在多行模式中匹配每一行的开头 | ^abc | abc | ||||
$ | 匹配字符串末尾,在多行模式中匹配每一行的末尾 | abc$ | abc | ||||
\ | 或。匹配\ | 左右表达式任意一个,从左到右匹配,如果\ | 没有包括在()中,则它的范围是整个正则表达式 | abc\ | def | abcdef | |
{} | {m}匹配前一个字符m次,{m,n}匹配前一个字符m至n次,若省略n,则匹配m至无限次 | ab{1,2}c | abcabbc | ||||
[] | 字符集。对应的位置可以是字符集中任意字符。字符集中的字符可以逐个列出,也可以给出范围,如[abc]或[a-c]。[^abc]表示取反,即非abc。 所有特殊字符在字符集中都失去其原有的特殊含义。用\反斜杠转义恢复特殊字符的特殊含义。 | a[bcd]e | abeaceade | ||||
() | 被括起来的表达式将作为分组,从表达式左边开始没遇到一个分组的左括号“(”,编号+1. 分组表达式作为一个整体,可以后接数量词。表达式中的\ | 仅在该组中有效。 | (abc){2} a(123\ | 456)c | abcabca456c |
这里需要强调一下反斜杠\的作用:
反斜杠后边跟元字符去除特殊功能;(即将特殊字符转义成普通字符)
反斜杠后边跟普通字符实现特殊功能;(即预定义字符)
引用序号对应的字组所匹配的字符串。
预定义字符集
\d | 数字:[0-9] | a\bc | a1c |
---|---|---|---|
\D | 非数字:[^\d] | a\Dc | abc |
\s | 匹配任何空白字符:[<空格>\t\r\n\f\v] | a\sc | a c |
\S | 非空白字符:[^\s] | a\Sc | abc |
\w | 匹配包括下划线在内的任何字字符:[A-Za-z0-9_] | a\wc | abc |
\W | 匹配非字母字符,即匹配特殊字符 | a\Wc | a c |
\A | 仅匹配字符串开头,同^ | \Aabc | abc |
\Z | 仅匹配字符串结尾,同$ | abc\Z | abc |
\b | 匹配\w和\W之间,即匹配单词边界匹配一个单词边界,也就是指单词和空格间的位置。例如, 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的 'er'。 | \babc\b a\b!bc | 空格abc空格 a!bc |
\B | [^\b] | a\Bbc | abc |
五、json
json常用来进行JSON对象的编码与解码,此处仅讲解对JOSN字符串解码为Python对象
目前mDesigner中尚不支持将Python对象编码成JSON字符串
datas = "[{'name': 'Mr.Zhang', 'age': 18, 'gender': 'male'},{'name': 'Lily', 'age': 17, 'gender': 'famale'},{'name': 'Maly', 'age': 19, 'gender': 'famale'}]"
print('loads_before: ', type(datas))
datas = datas.replace("'", '"')
datas_loads = json.loads(datas)
print('dumps_after: ', type(datas_loads))
json.loads()不支持单引号,所以使用前需将单引号转换为双引号。datas.replace("'",'"')用于替换单引号
运行结果:
loads_before: <class 'str'>
dumps_after: <class 'list'>
从结果中可以看到,datas转换前是一个字符串,转换后成了一个列表对象