028-86261949

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

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

2019/06/26 12:00 分类: 技术交流 浏览:1

1.   Python中推导式(生成器)

 

1.1.  概述:

Python推导式是从一个数据集合构建另外一个新的数据结构的语法结构. 最常见的就是列表的推导式

 

1.2.  详细描述:

列表推导式的语法:

1.   [expr for value in collection ifcondition]

2.   collection 原始列表

3.   value:列表中的原始数据

4.   ifcondition 过滤value的条件,满足条件再传入expr. 可选表达

5.expr: 对满足条件的value进一步处理后生成新的元素放在新的列表中

 

字典推导式的语法:

1.   { key_expr: value_expr for key_expr,value_expr in collection if condition }

2.   collection:可迭代对象

3.   key_expr 键表达式

4.   value_expr:值表达式

5.   ifcondition 过滤value的条件,满足条件再传入expr. 可选表达式

6.   expr 对满足条件的value进一步处理后生成新的元素放在新的字典中

 

1.3.  应用场景:

 

获取0-100的奇数.

1.   list = range(0, 101)  

2.   new_list = [value for value in list if value % 2]  

3.   print(new_list)  

 

将第一个列表中的元素作为键,第二个列表中的元素作为值生成新的字典

1.   questions = ['name''quest''favorite color']  

2.   answers = ['lancelot''the holy grail''blue']  

3.   new_dict = {q: a for q, a in zip(questions, answers) if not q == "name"}  

4.   print(new_dict)  

5.   #zip()函数可以成对读取元素  

 

得到当前目录下所有的文件

1.   import os  

2.   print("*" * 1000)  

3.  result = [filename for filename in os.listdir("./"if os.path.isfile("./" + filename)]  

4.   for v in result:  

5.   print(v)  

 

2.   赋值、浅拷贝、深拷贝的区别

 

2.1.  概述:

python中一般对于可变数据类型来说,对象赋值实际上是对象的引用。当创建一个对象,然后把它赋给

个变量的时候,python并没有拷贝这个对象,而只是拷贝了这个对象的引用。

 

2.2.  详细描述:

赋值: 传递对象的引用而已,原始列表改变,被赋值的b也会做相同的改变

1.   >>> alist=[1,2,3,['a','b']]  

2.   >>> b=alist  

3.   >>> print(b)  

4.   [1, 2, 3, ['a''b']]  

5.   >>> alist.append(5)  

6.   >>> print(alist);  

7.   >>> print(b);  

   

8. [1, 2, 3, ['a''b'], 5]  

9. [1, 2, 3, ['a''b'], 5]  

 

浅拷贝: 没有拷贝子对象,所以原始数据改变,子对象会改变

1.   >>> import copy  

2.   >>> alist=[1, 2, 3, ['a''b'], 5]  

3.   >>> c=copy.copy(alist)  

4.   >>> print(alist)  

    

5.   [1, 2, 3, ['a''b'], 5]  

  

6.   >>> print(c)  

   

7. [1, 2, 3, ['a''b'], 5]  

   

8. >>> alist.append(6)  

9. >>> print(alist)  

10. >>> print(c)   

   

11. [1, 2, 3, ['a''b'], 5, 6]  

12. [1, 2, 3, ['a''b'], 5]  

   

 

   

13. >>> alist.append('itsource.cn')  

14. >>> print(alist)  

16. >>> print(c)  

   

17. [1, 2, 3, ['a''b'], 5, 6, 'itsource.cn']  

18. [1, 2, 3, ['a''b'], 5]  

   

19. >>> print(alist[3])  

   

20. ['a''b']  

   

21. 改变子对象中的内容  

22. >>>alist[3].append('itsource.cn')  

23. >>>print(alist)  

24. >>>print(c)  

   

25. [1, 2, 3, ['a''b''itsource.cn'], 5, 6, 'itsource.cn']  

26. [1, 2, 3, ['a''b''itsource.cn'], 5]  

 

深拷贝:包含对象里面的子对象的拷贝,所以原始对象的改变不会造成深拷贝里任何子对象的改变

 

1.   >>> import copy  

2.   >>> alist=[1,2,3,['a','b']]  

3.   >>> d=copy.deepcopy(alist)  

4.   >>> print(alist)  

5.   >>> print(d)  

  

6.   [1, 2, 3, ['a''b']]  

7.   [1, 2, 3, ['a''b']]  

   

  

8. #发现始终没有改变  

9. >>> alist.append(5)  

10. >>> print(alist)  

11. >>> print(d)  

   

11. [1, 2, 3, ['a''b'], 5]  

12. [1, 2, 3, ['a''b']]  

  

13. #发现始终没有改变  

14. >>> alist=[1,2,3,['a','b']]  

15. >>> print(alist[3])  

   

16. ['a''b']  

  

17. >>> alist[3].append('itsource.cn')  

18. >>> print(alist)  

19. >>> print(d)  

   

20. [1, 2, 3, ['a''b''itsource.cn']]  

21. [1, 2, 3, ['a''b']]  

 

总结:

1. 赋值是将一个对象的地址赋值给一个变量,让变量指向该地址( 旧瓶装旧酒 )。

 

2. 浅拷贝是在另一块地址中创建一个新的变量或容器,但是容器内的元素的地址均是源对象的元素的

的拷贝。也就是说新的容器中指向了旧的元素( 新瓶装旧酒 )。

 

3. 深拷贝是在另一块地址中创建一个新的变量或容器,同时容器内的元素的地址也是新开辟的,仅仅

相同而已,是完全的副本。也就是说( 新瓶装新酒 )。

 

2.3.  应用场景:

python的大部分操作都是浅拷贝,比如:

1. 使用切片方法[]操作;

2. 使用构造函数(list/dict/set);

3. 使用copy.copy方法;

 

3.   反转列表或者字符串

 

3.1.  概述:

大概有两种实现方式: 自身的方法 切片

 

3.2.  详细描述:

字符串反转:

 

1. 切片

1.   str = "abcdefg"  

2.   print(str[::-1])  

   

3.   gfedcba  

 

2. 先将其转换为列表, 使用列表的reverse反转方法,然后再连接成字符串

1.   str = "abcdefg"  

2.   l = list(s)  

3.   l.reverse()  

4.   result = "".join(l)  

5.   print(result)  

   

6.   gfedcba  

 

列表反转:

 

1. 切片

1.   l = ["a""b""c""d""e"]  

2.   print(l[::-1])  

          

           

3.   ['e''d''c''b''a']  

 

. 使用列表的reverse反转方法

1.   l = ["a""b""c""d""e"]  

2.   l.reverse()  

3.   print(l)  

           

          

4.   ['e''d''c''b''a']  

 

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