python_数据类型(元组列表性能分析、命名元组、字典集合原理、推导式、生成器、迭代器)

数据类型有哪些?

数值类型:1
序列类型:字符串、列表、元组
散列类型:字典、集合

一、元组、列表的性能分析
ipythpn模块:与Python解释器的使用方法一致
元组比列表快3倍
在这里插入图片描述
测试函数的执行速度:

import timeit

# 测函数的执行速度
def fun():
    for i in range(10):
        print(i)


res = timeit.Timer(fun).timeit(100)
print(res) # 运行100次的时间是:0.012s

# 测试列表的执行速度
res1 = timeit.timeit("[1,2,3]")
print(res1) # 默认运行1000万次,需要0.1101s

数据类型_命名元组的使用:
元组缺点:存储在其中的数据只能通过索引来访问。
命名元组优点:可以通过键值对的形式访问元素,结构化数据增强了代码可读性,

from collections import namedtuple

# 命名元组1_常用写法
a = namedtuple("a", ["name_1", "name_2", "name_3"])
tu = a("name1的取值", "name2的取值", "name3的取值")
print(tu)
print(tu.name_1)

# 命名元组2
Case = namedtuple("Case", "case_name params url path")
case1 = Case("测试登录-正常情况", {'username': 'xiejiangpeng', 'passwd': '123456'}, "https://xiejiangpeng.com", "/login")
print(case1)
print(case1.params)

C:\Python39\python.exe C:/project/python_ck01/class_01day/class_02day/class_02day_01.py
a(name_1='name1的取值', name_2='name2的取值', name_3='name3的取值')
name1的取值

C:\Python39\python.exe C:/project/python_ck01/class_01day/class_02day/class_02day_01.py
测试登录-正常情况
Case(case_name='测试登录-正常情况', params={'username': 'xiejiangpeng', 'passwd': '123456'}, url='https://xiejiangpeng.com', path='/login')
{'username': 'xiejiangpeng', 'passwd': '123456'}

二、字典、集合的原理、应用
字典和集合的优势在于增删改查非常高效,python中字典和集合这两个数据结构是基于散列表来实现的。散列表也叫哈希表

 # (1)se = set() 空集合,主要用于对列表去重.
li = [1,1,2,2,3,3]
li1 = list(set(li))
print(li1) > [1, 2, 3]

# (2)集合中添加元素,元素是无序的
se = set()
se.add("tfjiao")
se.remove("tfjiao")
se.clear()
se.update({111,222,333,444}) # 将集合{1,2,3,4}或者元组等更新到集合se中
print(se) > {444, 333, 222, 111}

# dic = {}  空字典,字典从3.7后,保存元素的顺序会按照插入顺序保存

三、推导式 > >> 快速创建列表、字典
列表推导式是从一个或者多个迭代器快速简洁创建列表的一种方法。将循环和条件判断结合,避免语法冗长代码。

url = []
for i in range(1,100):
    a = f"page{i}"
    url.append(a)
print(url)

# (1)列表推导式模型:li = [i for i in range(10)]
urls = [f"page{i}" for i in range(1,100)]
print(urls)

# (2)字典推导式模型:dic1 = {x:y for i in list1}
dic1 = {i:i+1 for i in range(10)}
print(dic1)
# 将cook_str转换成字典{'A': '1', 'B': '2', 'C': '3'}
cook_str = "A=1;B=2;C=3"
dic1 = {i.split("=")[0]:i.split("=")[1] for i in cook_str.split(";")}
print(dic1)

四、生成器和迭代器(iterator)
迭代器是一种支持next()操作的对象,生成器是对象之一。可for循环遍历的都可以成为迭代对象,nextt()方法可以用来生成元素。


# (1)生成器:tu、fun1()、fun2()
tu = (i for i in range(10))
print(tu)
print(next(tu)) # next方法用来生成数据
print(type(tu))

"""
yield和return:
(1)带yield的函数是一个生成器,而不是一个函数了,
(2)这个生成器有一个方法是next(),next就相当于“下一步”生成哪个数,当前执行的next是接着上一次的next停止的地方执行的
(3)yield就相当于 return 返回一个值,并且记住这个返回的位置,下次迭代就从这个位置后开始。
"""
# 示例1
def fun1():
    for i in range(10):
        yield i
res = fun1()
print(next(res)) # 第一次调用返回0
print(next(res)) # 第二次调用返回1
print(next(res)) # 第三次调用返回2

# 示例2
def fun2():
    for i in range(5):
        se = yield i
        print(se)
res = fun2()
print(next(res))
print(res.send(100)) # 返回2次,第一次返回print的100,第二次返回1.

# (2)迭代器:list1
li = [1,2,3,4]
list1 = iter(li) # 生成可迭代对象
print(next(list1))

生成器实际运用:当前有文件case.xlsx,将excel中的用例,添加到生成器。

def read_excel(file_name, sheet_name):
	wb = load_workbook(file_name)
	ws = wb[sheet_name]
	col = ws.max_column + 1
	row = ws.max_row + 1
	test_data = ({ws.cell(1, j).value : ws.cell(i, j).value for j in range(1, col)} for i in range(2, row))
	return test_data
res = read_excel("cases.xlsx", "case_datas")
for i in res:
	print(i)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿_焦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值