常用内置模块

常用内置模块主要有:

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转换前是一个字符串,转换后成了一个列表对象