测试奇谭,BUG不见。
讲解之前,我先说说我的教程和网上其他教程的区别:
1 我分享的是我在工作中高频使用的场景,是精华内容;
2 我分享的是学习方法,亦或说,是指明你该学哪些、该重点掌握哪些内容;
3 基于1和2,你可以按照我的教程学,也可以网上找视频学,也可以看书学……你得明白,掌握学习方法比找学习资料重要得多。
前5期,我已经分享了python的基础语法,如果你按照我的文章,一步一步练习,保准你对python代码的语法特点、书写方式有所了解,并能独立的写一些简单的函数方法,甚至能尝试开始自动化测试的实践(基于python语法)。
当然,如果你想更进一步掌握python语法的特点,那接下来的几篇文章一定不要错过。
这一场,主讲python的生成器和匿名函数。
目的:掌握这两个知识点的概念和使用。
记住两个关键:
初学的你,还是太难理解?
你可以将生成器理解为一个盒子,你可以向这个盒子里随意添加元素,当你需要的时候,再取出来用。
请看下面的例子:
# 普通函数 def func(): return 1 f = func() print("函数返回值:",f) ->函数返回值:1 print("函数返回值的类型:",type(f)) ->函数返回值的类型:<class 'int'> # 生成器 def gen_func(): yield 1 yield 2 g = gen_func() print("生成器对象:",g) ->生成器对象:<generator object gen_func at 0x00000189B8CFF7C8> print("生成器对象的类型:",type(g)) ->生成器对象的类型:<class 'generator'> # 读取生成器对象的值,因为生成器也是一个迭代器,实现了python的迭代协议(即实现了__iter__方法) for i in g: print("生成器对象的值:",i) ->生成器对象的值: 1 ->生成器对象的值: 2
作用:惰性求值(一边循环一边计算的机制),节省性能
举个例子:斐波那契数列(0,1,1,2,3,5...),打印斐波那契数列前50个元素
# 不使用生成器,会消耗大量内存 def fib(idx): res=[] n, a, b = 0, 0, 1 while n < idx: res.append(b) a, b = b, a+b n += 1 return res res = fib(100) print(res) # 使用生成器,可节约大量内存 def gen_fib(idx): n, a, b = 0, 0, 1 while n < idx: yield b a, b = b, a+b n += 1 for i in gen_fib(100): print(i)
当:
时,我们可以使用匿名函数。
初学的你,还是太难理解?
你想实现一个求x的平方的函数,但是这个函数太简单,不值得专门def定义,同时,你忘记了平方的英文如何拼写,要是命名成 "pingfang",又显得自己太low,于是乎,你可以不给这个函数起名字,还能实现它。这就是匿名函数lambda表达式。
比如:求一个数的平方
# 不用 lambda 表达式 def square(x): return x * x print(square(2)) # 使用 lambda 表达式 # 写法:lambda 返回值:计算表达式 s = lambda x: x * x print(s(2))
01 如果你是初学者,可以先不掌握生成器和匿名函数,待学成python后,再行琢磨;
02 在实际工作中,生成器和匿名函数的使用频次,相对较高,并且在面试中是高频问点。