讲讲python中的装饰器

  • Python中的装饰器,本质上就是一个高阶函数,就是函数的函数,一个返回值是函数的函数(类似二阶导)
  • 在函数中再嵌套一个函数,并且引用外部函数的变量,也就是一个闭包
  • 不用更改原函数的代码前提下给函数增加新的功能。它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,相当于一个语法糖。使用时,再需要的函数前加上@demo即可。

sleep和wait有什么区别?

  • 两者都可以使当前线程进入阻塞状态
  • 两者所属的类不同,sleep()是Thread类中的方法,wait()是Object类中的方法
  • 两者的使用范围不一样,sleep()可以使用在任何有需要的场景下,而wait()方法只能使用在同步代码块和同步方法中
  • 是否释放锁:sleep()方法不会释放锁,而wait()方法会释放锁
  • 用法不同:使用sleep()方法,睡眠时间到了以后线程会自动苏醒;而使用wait()方法必须通过调用对象的notify()或notifyAll()方法唤醒
  • 作用不同:sleep()方法是用来暂停线程的,而wait()方法是用来进行线程间交互的

python中有关的自动化测试的?

  • Unittest,Doctest,py.test,Nose,tox,Unittest2

Unittest 测试框架

简介:

  • Unittest是Python自带的单元测试框架,不仅适用于单元测试,还可用于Web、Appium、接口自动化测试用例的开发与执行
  • 该测试框架可组织执行测试用例,并且提供丰富的断言方法,判断测试用例是否通过,并最终生成测试结果。
    核心要素:
  • TestCase:即测试用例,一条测试用例就是一个完整的测试流程,包括测试前准备环境的搭建(setUp),执行测试代码(run),以及测试后环境的还原(tearDown),通过运行一条测试用例,可以对某一个问题进行验证。
  • Fixture:即测试固件,用于测试用例环境的搭建和销毁。在测试步骤执行前需要为该测试用例准备环境(SetUp),如启动app或打开浏览器,测试步骤执行后需要恢复环境(TearDown),如关闭app或浏览器,这时候就需要用到Fixture,使代码更简洁。
  • TestSuite:即测试套件,把需要执行的测试用例集合在一起就是TestSuite。使用TestLoader来加载TestCase到TestSuite中。
  • TextTestRunner:即测试执行器,用于执行测试用例。该模块中提供run方法执行TestSuite中的测试用例,并返回测试用例的执行结果,如运行的用例总数、用例通过数、用例失败数。
  • report:即测试报告。unittest框架没有自带的用于生成测试报告的模块或接口,需要使用第三方的扩展模块HTMLTestRunner。

怎么保存小数点后三位?

  • round(x,3),%.3f %x

字典和列表哪个快

  • 字典在存储时将字典的键利用哈希算法生成哈希值, 并将所有键生成的哈希值组成一张哈希表,在对字典进行查询时, 会先对字典的键利用哈希算法生成哈希值, 然后再到哈希表中查询, 而不像列表一样遍历索引位置元素进行查询, 所以比列表查询速度快

字典遍历方式

1、用dict.keys()遍历:用dict.keys()方法会返回一个类型为dict_keys的序列类型,里面有字典的key,然后遍历即可
2、有dict.values()遍历:类似的,会返回字典的所有value值组成的一个序列,类型为dict_values,
3、用dict.items()遍历:会返回一个由key和value组成的一个个成对数据,通常同时获得二者:

如何实现两个列表的合并

  • 使用”+”运算符:可以使用”+”运算符将两个列表直接相加,生成一个新的列表
  • 使用extend()方法:使用extend()方法将第二个列表的元素逐个添加到第一个列表中。
  • 使用列表解析:可以使用列表解析语法来合并两个列表。
  • 使用append()方法:可以使用循环遍历第二个列表的元素,并使用append()方法将其逐个添加到第一个列表后面。

怎么去除列表里面最后一个元素

  • 使用Python内置的pop()函数来删除列表最后一个元素,pop()函数会删除列表中的最后一个元素,并返回该元素的值。如果不需要返回该元素的值,可以直接使用pop()函数
  • 还可以使用Python的del关键字来删除列表最后一个元素,使用del关键字删除元素时,需要指定要删除的元素的索引。可以使用 索引 -1 访问列表的最后一个元素
  • 可以使用 remove() 方法,它删除列表中指定值的第一个出现

深拷贝和浅拷贝有什么区别,加入b列表深拷贝为a列表,修改b会影响到a吗,如何实现深拷贝

  • 浅拷贝不拷贝子对象的内容,只是拷贝子对象的引用
  • 通俗说浅拷贝只拷贝个体,后期指向相同的子对象,子对象的实际内容并没有被拷贝
  • 深拷贝会连子对象的内存全部拷贝一份,对子对象的修改不会影响源对象,对源对象的修改也不会影响子对象运行结果

python中的闭包

  • 闭包是一个函数,通常用于创建灵活的函数和实现函数的封装。

  • 函数是嵌套定义的,一个函数内部定义了另一个函数

  • 内部函数引用了外部函数中的局部变量,这些局部变量称为自由变量

  • Python中的装饰器是闭包的一个实际应用

  • python装饰器是在不改变函数本身,为其动态的添加功能的设计模式本质上是一个函数,接受一个函数作为输入,返回一个经过修改或增强的函数,我的代码中,用装饰器记录一个脚本的执行时间和记录日志