028-86261949

当前位置:首页 > 技术交流 > Python自动化测试常见面试题(五)

Python自动化测试常见面试题(五)

2019/09/11 11:30 分类: 技术交流 浏览:1

 

 

一、怎么理解装饰器,用过或者写过什么装饰器吗?

 

1.1、概述:

装饰器本质上是一个 Python 函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。

 

1.2、详细描述:

  1. import logging  
  2. # 定义装饰器,接收旧函数  
  3. def decorator(oldfunc):  
  4.     # 定义新函数,加强原函数  
  5.     def new_func(*args, **kwargs):  
  6.         # ...加强代码写这里,记录日志信息....  
  7.         logging.error("记录日志信息")  
  8.         ret = oldfunc(*args, **kwargs)  
  9.         return ret  
  10.   
  11.     # 返回新函数  
  12.     return new_func  
  13.   
  14.   
  15. # 通过语法糖使用装饰器  
  16. @decorator  
  17. def square(x):  
  18.     # 获取 两个数的平方  
  19.     return x**2  
  20.   
  21. # 执行  
  22. print(square(5))  

 

1.3、应用场景:

日志记录,统计代码执行时间,权限验证

 

二、迭代器和生成器的区别

 

2.1、概述

生成器是特殊的迭代器,它更加优雅.生成器中的元素不是直接生成好,而是每使用next()方法获取下一个元素的时候才创建,从而大大节省内存空间。迭代器和生成器的区别

 

2.2、详细描述:

  1. 迭代器是一个更加抽象的概念,任何对象,如果它的类有next方法和iter方法返回自身。对于string、list、dict、tuple等这类容器对象,使用for循环遍历是很方便的。在后台for语句对容器对象调用iter()函数,iter()是Python的内置函数。iter()会返回一个定义了next()方法的迭代器对象,它在容器中逐个访问容器内元素,next()也是python的内置函数。在没有后续元素时,next()会抛出一个StopIterration的异常。
  2. 生成器(Generator)是创建迭代器的简单而强大的工具。它有列表生成器和函数生成器.函数生成器写起来就像是正规的函数,只是在返回数据的时候需要使用yield语句返回。每次next()被调用时,生成器会返回它脱离的位置(它记忆语句最后一次执行的位置和所有的数据值)

 

2.3、应用场景:

  1. # 列表生成器,其实就是列表推导式的[]写成()  
  2. g = (i for i in range(10))  
  3. print(next(g))  
  4. print(next(g))  
  5. print(next(g))  
  6. print(next(g))  
  7.   
  8.   
  9. # 通过 函数式生成器 获取 1-10 数字的平方  
  10. def sqrt():  
  11.     num = 1  
  12.     while num <= 10:  
  13.         # 返回平方  
  14.         yield num**2  
  15.         num += 1  
  16.   
  17.         # 调用函数返回生成器  
  18.         g = sqrt()  
  19.         print(next(g))  
  20.         print(next(g))  
  21.         print(next(g))  
  22.         print(next(g))  

 

#标签:Python自动化测试,面试题