python面试题(面向测试工程师)

一、前言

        这份python面试题是面向测试工程师来巩固编程基础知识而写的,为了实现自动化测试所需用到的python基础,总结了面试时可能会被问到的问题。对于开发工程师而言本篇文章可能就太基础了。

二、面试题

1、python都有哪些数据类型

number、string、list、tuple、set、dictionary、boolean、none

2、python中的元组和列表的区别是什么

列表是可以修改的序列,而元组中的内容是无法进行修改的。

3、python中的break、continue、pass代表什么意思

在循环中,可以通过break退出整个循环,或者通过continue退出本次循环跳到下个循环。

pass关键字,在if判断语法中,用于表示略过。一般在判断过程中,如果不需要执行额外代码的情况下,可以调用pass实现。另外,有时可能还没想好函数怎么写,只写了函数声明,但为了保证语法正确,必须输入一些东西,在这种情况下,我们也会使用pass关键字。

4、如何在python中生成一个随机数

import random

print(random.randint(1, 10))

5、python有哪些常见的内置函数

print()、input()、type()、int()、range()

6、将字符串反转并输出

str = '123456789'

print(str[::-1])

7、什么是切片

split()可以实现对现有字符串进行切片,通过指定分隔符将原有字符串进行分割,按照要求切分为多个不同的字符串内容,可以指定分隔符和分割次数,默认分割所有,分割后会以list格式返回结果。

8、用lambda函数实现两个数相乘

x = lambda a, b: a * b

print(x(2, 2))

9、请说明sort和sorted对列表排序的区别

sort()会对list进行重新排序,排序后会完全改变原有list值的顺序。

sorted()则是临时修改list的元素排列顺序。

10、解释一下Python中的继承

当一个类继承自另一个类,它就被称为一个子类/派生类,继承自父类/基类。它会继承/获取到父类的所有类属性和类方法。继承能更容易的创建和维护应用。

11、请解释*args和**kwargs的含义

*args表示任意多个无名参数,通过元组的形态进行传递,根据函数参数的顺序依次匹配元组中的每一个元素,一般情况下元组长度必须与参数数量保持一致。此类传递参数的方式,可以在调用函数时非常灵活将所有参数一次性传入,不用再一个个指定。便于函数调用的扩展使用,也就是所谓的不定值不定长传参模式。

**kwargs表示关键字参数。通过字典的key,value格式进行传入参数,所有传入的参数都会遵循key=value的格式,根据函数的形参名逐一匹配字典的key,将对应value进行传参,一般情况下字典的key必须与形参相同。此类传递参数的方式,可以在调用函数时快速基于形参名将所有的参数一次性赋值,也就是所谓的定值不定长传参。

12、请解释Python中的join()函数

join()用于将指定序列中的元素以指定的字符连接生成一个新的字符串,并返回。

13、python区分大小写吗

区分大小写。

14、请将'     hello'字符串的前导空格移除并输出

print('     hello'.lstrip())

15、将‘AAA’字符串转换为小写并输出

print('AAA'.lower())

16、将‘aaa’字符串转换为大写并输出

print('aaa'.upper())

17、在Python中有多少种运算符

一共有7种运算符:算术运算符、关系运算符、赋值运算符、逻辑运算符、位运算符、成员运算符、身份运算符。

算数运算符(7种):加号(+)减号(-)乘号(*)除号(/)返回除法中的余数(%)返回x的y次幂(**)除法返回商的整数部分(向下取整)(//)

关系运算符:小于号(<)大于号(>)小于等于号(<=)大于等于号(>=)等于号(==)不等于号(!=)

赋值运算符:(+=)(-=)(*=)(/=)(%=)(**=)(//=)

逻辑运算符:and、or、not

位运算符:在自动化测试领域中可以忽略。

成员运算符:in、not in

身份运算符:is、is not

18、请声明多个变量并赋值

a,b,c=1,2,3 或 a=b=c=3

19、什么是静态方法

静态方法在声明前需写上@staticmethod装饰器,因静态方法中不需要传入self参数,所以静态方法的调用,不需要实例化类,直接通过类名调用即可,也因为缺少self,所以静态方法无法获取类中其他的属性与方法,是相对独立的存在。

20、生成器、迭代器的区别

可以被next()函数调用并不断返回下一个值得对象成为迭代器,迭代器表示的是一个数据流,可以只在需要时才去调用next来计算出一个值。迭代器从第一个元素开始访问,直到所有的元素访问完毕为止。迭代器只能往前不能后退。所以迭代器与普通程序运行不同,不会在一次调用时就结束。通过iter()函数将可迭代对象,比如一个list转为迭代器对象,然后通过next()函数进行一个个取值。

使用yield关键字的函数被称为生成器,和普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代。所以生成器其实也属于迭代器。若要取值,则需要通过next()获取,或者通过循环获取。

21、如何判断是函数还是方法

函数是组织好的,可重复使用的,用来实现单一或者相关联功能的代码块,可以直接调用。方法与函数类似,定义方法都是通过def关键字声明,只是方法是在类中定义,而函数不用在类中定义,方法是需要通过对象来调用的。

22、描述下什么是私有属性和私有方法

想要在类中定义到专属于类内部的私有属性与私有方法,则可以通过在属性或方法的名称前添加__来表示。私有属性和私有方法无法在类外部被调用,也无法被实例化对象调用。私有属性和私有方法的使用,只限于在类本身之中,如果想要获取这些私有内容,则需要通过公有方法来调用,或者通过return将私有属性返回,达到外部使用的目的。

23、请删除一个list里面的重复元素(list去重)

list(set(list))

24、介绍一下range()函数的用法

列出一组数据,经常用在for in range()循环中。

25、描述一下global关键字

定义函数时,一般函数的操作是无法修改函数外的变量值。如果想通过调用函数来修改函数外变量的值,则需要在函数中将该变量声明为global变量,也就是全局变量。在函数中声明之后,则可以改变它的值。

26、==和is的区别是什么

==比较两个对象或值的相等性。

is用于检查两个对象是否属于同一内存对象。

27、描述一下全局变量和局部变量

全局变量:在函数外或全局空间中声明的变量称为全局变量。这些变量可以由程序中的任何函数访问。

局部变量:在函数内声明的任何变量都称为局部变量。此变量存在于局部空间中,而不是全局空间中。

28、描述一下字符串的三引号

在字符串处理中,可以通过三引号对复杂的字符串进行处理。三引号允许一个字符串跨多行,同时字符串中可以包含各类特殊字符,用法与多行注释类似。此类方式对于sql、html等内容的输出会特别方便。

29、写一下冒泡排序

a = [9,8,7,6,5,4,3,2,1]

for i in range(len(a)):

    for j in range(0,len(a)-1-i):

        if a[j] > a[j+1]:

            a[j] , a[j+1] = a[j+1] , a[j]

print(a)

30、写一下九九乘法表

for i in range(1, 10):

    for j in range(1, 10):

        num = i * j

        print('{0}*{1}={2}'.format(i, j, num), end=" ")

    print("")

猜你喜欢

转载自blog.csdn.net/v781423070/article/details/128761816