【接口自动化测试】Python迭代器, 可迭代对象和循环

一、可迭代对象
判断可迭代对象
3个内置常用函数:filter map reduce

 

二、Iterator 迭代器
iter() 和 next()
创建迭代器

三、循环

for…in…
range
函数(上一篇公众号文章已写过)
for…else

 

 

一、可迭代对象

Python中的可迭代对象基础数据类型有:字符串、列表、元组、字典、集合;
常结合for循环使用

for遍历操作我们称为迭代(Iteration)

a = "hello word"
for i in a:
    print(i) #输出每个字母
b = ["hello", "world"]
for j in b:
    print(j) #输出每个单词
c = ("hello", "world")
for z in c:
    print(z) #输出每个单词
d = {"key": "world", "name": "jiang"}
for key in d:
    print(key) #输出字典中key的值
e = {"key": "world", "name": "jiang"}
for key in e.values(): #字典调用
    print(key)

e = {"hello", "world"}
for j in e:
    print(j)

如何判断是不是可迭代 Iterable 对象?

from collections.abc import Iterable
a = 2
print(isinstance(a, Iterable))  # 判断是不是实例
b = range(5)
print(isinstance(b, Iterable))

# 先判断,后循环遍历
from collections.abc import Iterable


def fun(x):
    """函数返回x"""
    return x
res = fun("hello")
if isinstance(res, Iterable):
    for i in res:
        print(i)
else:
    print("不可循环")

输出结果:

 

 

二、Iterator 迭代器

可以被 next() 函数调用并不断返回下一个值的对象称为迭代器:Iterator。

list 列表 和迭代器有什么区别?

from collections.abc import Iterable, Iterator

b = "abc"
new_b = iter(b) #iter() 函数用来生成迭代器。
print(new_b)
print(isinstance(new_b,Iterator))

c = [1,2,3]
print(iter(c))
print(isinstance(new_b,Iterator))

d = (1,2,3)
print(iter(d))
print(isinstance(iter(d),Iterator))

e = {1,2,3}
print(iter(e))
print(isinstance(iter(e),Iterator))

f = {"key":1}
print(iter(f))
print(isinstance(iter(f),Iterator))

 

与迭代操作相关3个内置函数:filter map reduce

 

b = '123456'

def fun(item):
    return int(item) > 3

b1 = filter(fun,b) #过滤序列
print(b1)
print(list(b1))


x = [1,-3,2,-4,5,7]
def fun(item):
    return item ** 2

res = map(fun, x) #会根据提供的函数对指定序列做映射
print(res)
print(list(res))


from functools import reduce
def fun(x,y):
    return x * y

res = reduce(fun, range(5,0,-1))
print(res)

输出结果:

 

创建迭代器:

class MyNumbers:

    def __iter__(self): #函数

        self.a = 1

        return self

 

    def __next__(self):

        if self.a <= 3:

            x = self.a

            self.a += 1

            return x

        else:

            raise StopIteration

 

 

myclass = MyNumbers()

myiter = iter(myclass)

print(next(myiter))

print(next(myiter))

print(next(myiter))

print(next(myiter))

输出结果: 前面三个输出正确结果,最后一个爆出异常。

 

 

三、循环:

"""
循环 Python用for遍历list列表
"""

#for遍历取值
books = ["Python 入门", "JavaScript 入门", "SQL 数据库"]
for book in books:
    print(book)

 输出结果

 

 

#for遍历下表
for index in range(len(books)): #不是len(range())
    print(index)
    print(books[index])
输出结果

 

 

 

#Break 与 continue
# 1. 计算a 中大于5的成员总和
a = [1, 5, 10, 20]
count = 0
for i in a:
    if i < 5:
        # continue 跳过当前循环,继续下一轮循环
        continue
    count += i
print("输出count的值:", count)
输出结果

 

 

a = [1, 5, 10, 20]
count =0
for i in a:
    if i > 5:
        #结束
        break
    count += i
print("输出count的值:", count)

 

 

 

#先定义空的list列表,计算求和
list = [1, 10, 20, 30, 40]
result = []
for i in list:
    if i > 5:
        #print(i) #输出所有大于1的数字
        result.append(i) #把所有大于5的数字,输入到列表中
print(result) #打印出最后的list列表
print(sum(result))

 

 

 

#先定义空的list列表,计算求和
list = [1, 10, 20, 30, 40]
result = []
for i in list:
    if i > 5:
        #print(i) #输出所有大于1的数字
        result.append(i) #把所有大于5的数字,输入到列表中
print(result) #打印出最后的list列表
print(sum(result))

 

 



 

 

posted @ 2023-01-13 16:47  Jenny测试开发  阅读(74)  评论(0编辑  收藏  举报