⛅湖州多云12~19℃北京 16/7℃上海 24/16℃广州 31/22℃深圳 31/21℃杭州 22/15℃成都 21/13℃全国天气 »登录
海量收录内容 16内容分类

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

来源源码时代官网 时间2019-06-26 12:00 篇幅3487 字 · 约 9 分钟

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

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

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

列表推导式的语法:

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 进一步处理后生成新的元素放在新的字典中

获取 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. 赋值、浅 拷贝 、深拷贝的区别

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

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

赋值: 传递对象的引用而已 , 原始列表改变,被赋值的 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]

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

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

3. >>> d=copy.deepcopy(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. str = "abcdefg"

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

3. gfedcba

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

2. l = list(s)

3. l.reverse()

4. result = "".join(l)

5. print (result)

6. gfedcba

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

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

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

. 使用列表的 reverse 反转方法

2. l.reverse()

3. print (l)

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

全文完
↑