搜档网
当前位置:搜档网 › Python 经典面试题详解(共53题)

Python 经典面试题详解(共53题)

Python 经典面试题详解(共53题)
Python 经典面试题详解(共53题)

Python 经典面试题详解(共53题)

1. 列表(list)和元组(tuple)有什么区别?

在我每一次应聘Python数据科学家的面试中,这个问题都会被问到。所以对这个问题的答案,我可以说是了如指掌。

?列表是可变的。创建后可以对其进行修改。

?元组是不可变的。元组一旦创建,就不能对其进行更改。

?列表表示的是顺序。它们是有序序列,通常是同一类型的对象。比如说按创建日期排序的所有用户名,如["Seth", "Ema", "Eli"]。

?元组表示的是结构。可以用来存储不同数据类型的元素。比如内存中的数据库记录,如(2, "Ema", "2020–04–16")(#id, 名称,创建日期)。

2. 如何进行字符串插值?

在不导入Template类的情况下,有3种方法进行字符串插值。

3. “is”和“==”有什么区别?

在我的Python职业生涯的早期,我认为它们是相同的,因而制造了一些bug。所以请大家听好了,“is”用来检查对象的标识(id),而“==”用来检查两个对象是否相等。我们将通过一个例子说明。创建一些列表并将其分配给不同的名字。请注意,下面的b指向与a相同的对象。

下面来检查是否相等,你会注意到结果显示它们都是相等的。

但是它们具有相同的标识(id)吗?答案是不。

我们可以通过打印他们的对象标识(id)来验证这一点。

你可以看到:c和a和b具有不同的标识(id)。

4. 什么是装饰器(decorator)?

这是每次面试我都会被问到的另一个问题。它本身就值得写一篇文章。如果你能自己用它编写一个例子,那么说明你已经做好了准备。

装饰器允许通过将现有函数传递给装饰器,从而向现有函数添加一些额外的功能,该装饰器将执行现有函数的功能和添加的额外功能。

我们将编写一个装饰器,该装饰器会在调用另一个函数时记录日志。

编写装饰器函数logging。它接受一个函数f un c作为参数。它还定义了一个名为log_f un c tion_c alled的函数,它先执行打印出一些“函数

f un c被调用”的信息(p r int(f'{f un c}c alled.')),然后调用函数

f un c()。最后返回定义的函数。

让我们编写其他两个函数,我们最终会将装饰器添加到其中(但还没有)。

现在将装饰器添加到上面编写的两个函数之中。

现在,你了解了如何仅仅通过在其上面添加@logging(装饰器),就能够轻松地将日志添加到我们编写的任何函数中。

5. 解释Range函数

R ange函数可以用来创建一个整数列表,一般用在f o r循环中。它有3种使用方法。

R ange函数可以接受1到3个参数,参数必须是整数。

请注意:我已经将r ange的每种用法包装在一个递推式构造列表(list c omp r ehension)中,以便我们可以看到生成的值。

用法1-r ange(stop):生成从0到参数“stop”之间的整数。

用法2 - range(start, stop) : 生成从参数“start”到“stop”之间的整数

用法3 - range(start, stop, step):以参数“step”为步长,生成从“start”到“stop”之间的整数。

6.定义一个名为c a r的类,它有两个属性:“c olo r”和“speed”。然后创建一个实例并返回“speed”。

7. Python中的实例方法、静态方法和类方法有什么区别?

实例方法:接受sel f参数,并且与类的特定实例相关。

静态方法:使用装饰器@stati c method,与特定实例无关,并且是自包含的(不能修改类或实例的属性)。

类方法:接受c ls参数,并且可以修改类本身。我们将通过一个虚构的C o ff ee S hop类来说明它们之间的区别。

C o ff ee S hop类有一个属性spe c ialty,默认值设为“esp r esso”。

C o ff ee S hop类的每个实例初始化时都使用了c o ff ee_p r i c e这个属性。同时,它还有3个方法,一个实例方法,一个静态方法和一个类方法。

让我们将c o ff ee_p r i c e的值设为5,来初始化C o ff ee S hop的一个实例。然后调用实例方法ma k e_c o ff ee。

现在我们来调用静态方法。静态方法无法修改类或实例状态,因此通常用于工具函数,例如,把2个数字相加。我们这里用它来检查天气。天气晴朗。太好了!

现在让我们使用类方法修改CoffeeShop的属性specialty,然后调用make_coffee()方法来制作咖啡。

注意,ma k e_c o ff ee过去是用来做意式浓缩咖啡(esp r esso)的,但现在用来做滴滤咖啡(d r ip c o ff ee)了!

8. “func”和“ func()”有什么区别?

这个问题的目的是想看看你是否理解所有函数也是Python中的对象。

f un c是表示函数的对象,它可以被分配给变量或传递给另一个函数。带圆括号的f un c()调用该函数并返回其输出。

9. 解释map函数的工作原理。

M ap函数返回一个列表,该列表由对序列中的每个元素应用一个函数时返回的值组成。

上面,我对列表中的每个元素的值加了3。

10. 解释reduce函数的工作原理。

这个问题很棘手,在你使用过它几次之前,你得努力尝试自己能够理解它。r edu c e接受一个函数和一个序列,然后对序列进行迭代。在每次迭代中,当前元素和前一个元素的输出都传递给函数。最后,返回一个值。

返回11,它是1 + 2 + 3 + 5的总和。

11.解释filter函数的工作原理

F ilte r函数顾名思义,是用来按顺序过滤元素。

每个元素都被传递给一个函数,如果函数返回T r ue,则在输出序列中返回该元素;如果函数返回F alse,则将其丢弃。

注意上面所有不能被2整除的元素如何被删除的。

12. Python是按引用调用还是按值调用?

如果你在谷歌上搜索这个问题并阅读前几页,你就要准备好进入语义的迷宫了。你最好只是了解它的工作原理。

不可变对象(如字符串、数字和元组等)是按值调用的。请注意下面的例子,当在函数内部修改时,name的值在函数外部不会发生变化。name 的值已分配给内存中该函数作用域的新块。

可变对象(如列表等)是通过引用调用的。注意下面的例子中,函数外部定义的列表在函数内部的修改是如何影响到函数外部的。函数中的参数指向内存中存储li值的原始块。

13. 如何使用reverse函数反转一个列表?

下面的代码对一个列表调用r e v e r se()函数,对其进行修改。该方法没有返回值,但是会对列表的元素进行反向排序。

14.字符串乘法是如何工作的?

让我们看看将字符串"c at"乘以3的结果。

该字符串将自身连接3次。

15.列表乘法是如何工作的?

我们来看看将列表[1,2,3]乘以2的结果。

输出的列表包含了重复两次的列表[1,2,3]的内容。

16. 类中的“self”指的是什么?

“sel f”引用类本身的实例。这就是我们赋予方法访问权限并且能够更新方法所属对象的能力。

下面,将sel f传递给__init__(),使我们能够在初始化时设置实例的颜色。

17. 如何在Python中连接列表?

将2个列表相加,就是将它们连接在一起。但请注意,数组的工作方式不是这样的。

18. 浅拷贝和深拷贝之间有什么区别?

我们将在一个可变对象(列表)的上下文中讨论这个问题,对于不可变的对象,浅拷贝和深拷贝的区别并不重要。

我们将介绍三种情况。

1. 引用原始对象。这将新对象li2指向li1所指向的内存中的同一位置。因此,我们对li1所做的任何更改也会在li2中发生。

2. 创建原始对象的浅拷贝副本。我们可以使用list()构造函数来实现这一

点。浅拷贝创建一个新对象,但是用对原始对象的引用填充它。因此,向原始列表li3中添加新对象不会传播到li4中,但是修改li3中的一个对象将传播到li4中。

3. 创建一个深拷贝副本。这是用copy.deepcopy()完成的。现在,这两

个对象是完全独立的,并且对其中一个对象所做的更改不会对另外一个对象产生影响。

19. 列表和数组有什么区别?

注意:Python的标准库有一个a rr ay(数组)对象,但在这里,我特指常用的N umpy数组。

?列表存在于python的标准库中。数组由Numpy定义。

?列表可以在每个索引处填充不同类型的数据。数组需要同构元素。

?列表上的算术运算可从列表中添加或删除元素。数组上的算术运算按照线性代数方式工作。

?列表还使用更少的内存,并显著具有更多的功能。

20. 如何连接两个数组?

记住,数组不是列表。数组来自N umpy和算术函数,例如线性代数。我们需要使用N umpy的连接函数c on c atenate()来实现。

21. 你喜欢Python的什么?

Python可读性很强,并且有一种Python方式可以处理几乎所有事情,这意味着它有一种简洁明了的首选方法。

我将Python与R uby进行对比,R uby通常有很多种方法来做某事,但是没有指南说哪种方法是首选。

22. 你最喜欢Python的哪个库?

在处理大量数据时,没有什么比Pandas(熊猫)更有帮助了,因为Pandas让操作和可视化数据变得轻而易举。

23. 举出几个可变和不可变对象的例子?

不可变意味着创建后不能修改状态。例如:int、f loat、bool、st r ing 和tuple。

可变意味着可以在创建后修改状态。例如列表(list)、字典(di c t)和集合(set)。

24. 如何将一个数字四舍五入到小数点后三位?

使用r ound(v alue, de c imal_pla c es)函数。

25. 如何分割一个列表?

分割语法使用3个参数,list[sta r t:stop:step],其中step是返回元素的间隔。

26. 什么是pickling?

Pi ck ling是Python中序列化和反序列化对象的常用方法。在下面的示例中,我们对一个字典列表进行序列化和反序列化。

27. 字典和JSON有什么区别?

D i c t是Python的一种数据类型,是经过索引但无序的键和值的集合。

J S O N只是一个遵循指定格式的字符串,用于传输数据。

28. 你在Python中使用了哪些ORM?

O RM(对象关系映射)将数据模型(通常在应用程序中)映射到数据库表,并简化了数据库事务。

S QLA l c hemy通常用于F las k的上下文中,而Dj ango拥有自己的O RM。

29. any()和all()如何工作?

A ny接受一个序列,如果序列中的任何元素为t r ue,则返回t r ue。A ll 只有当序列中的所有元素都为t r ue时,才返回t r ue。

30. 字典和列表的查找速度哪个更快?

在列表中查找一个值需要O(n)时间,因为需要遍历整个列表,直到找到值为止。

在字典中查找一个值只需要O(1)时间,因为它是一个哈希表。

如果有很多值,这会造成很大的时间差异,因此通常建议使用字典来提高速度。但字典也有其他限制,比如需要唯一键。

31. 模块(module)和包(package)有什么区别?

模块是可以一起导入的文件(或文件集合)。

包是模块的目录。

因此,包是模块,但并非所有模块都是包。

32. 如何在Python中递增和递减一个整数?

可以使用“+=”和“-=”对整数进行递增和递减。

33. 如何返回一个整数的二进制值?

使用bin()函数。

34.如何从列表中删除重复的元素?

可以通过将一个列表先转化为集合,然后再转化回列表来完成。

35.如何检查一个值是不是在列表中存在?

使用“in”。

36. append和e x tend有什么区别?

A ppend将一个值添加到一个列表中,而e x tend将另一个列表的值添加到一个列表中。

37.如何取一个整数的绝对值?

这可以通过abs()函数来实现。

38.如何将两个列表组合成一个元组列表?

可以使用z ip函数将列表组合成一个元组列表。这不仅仅限于使用两个列表。也适合3个或更多列表的情况。

39.如何按字母顺序对字典进行排序?

你不能对字典进行排序,因为字典没有顺序,但是你可以返回一个已排序的元组列表,其中包含字典中的键和值。

40.一个类如何继承Python的另一个类?

在下面的示例中,A udi继承自C a r。继承带来了父类的实例方法。

41.如何删除字符串中的所有空白?

最简单的方法是使用空白拆分字符串,然后将拆分成的字符串重新连接在一起。

42.在迭代序列时,为什么要使用enume r ate()?

enume r ate()允许在序列上迭代时跟踪索引。它比定义和递增一个表示索引的整数更具Python感。

43. pass、c ontinue和b r ea k之间有什么区别?

pass意味着什么都不做。我们之所以通常使用它,是因为Python不允许在没有代码的情况下创建类、函数或i f语句。

在下面的例子中,如果在i>3中没有代码的话,就会抛出一个错误,因此我们使用pass。

C ontinue会继续到下一个元素并停止当前元素的执行。所以当i<3时,永远不会达到p r int(i)。

break会中断循环,序列不再重复下去。所以不会被打印3以后的元素。

44.如何将f o r循环转换为使用递推式构造列表(list c omp r ehension)?

F o r循环如下:

用递推式构造列表来修改这个f o r循环,代码如下:a

递推式构造列表通常被认为更具Python风格,同时仍易于阅读。

45.举一个使用三元运算符的例子。

三元运算符是一个单行的i f/else语句。语法看起来像“i f条件else b”。

46.检查一个字符串是否仅仅包含数字?

可以使用isnumeric()方法。

47. 检查一个字符串是否仅仅包含字母?

你可以使用isalpha()。

48. 检查字符串是否只包含数字和字母?

你可以使用isalnum()。

49. 从字典返回键列表

这可以通过将字典传递给Python的list()构造函数list()来完成。

50. 如何将一个字符串转化为全大写和全小写?

你可以使用uppe r()和lo w e r()字符串方法。

51. remove、del和pop有什么区别?

r emo v e() 删除第一个匹配的值。

del按索引删除元素。

pop() 按索引删除一个元素并返回该元素。

52.举一个递推式构造字典(di c tiona r y c omp r ehension)的例子

下面我们将创建一个字典,其中字母表中的字母作为键,并以字母索引作为值。

53. Python中的异常处理是如何进行的?

Python提供了3个关键字来处理异常,t r y、e x c ept和f inally。语法如下:

在下面的简单示例中,t r y块失败,因为我们不能将字符串添加到整数中。e x c ept块设置v al=10,然后f inally块打印出“c omplete”。

Python经典面试题

1:Python如何实现单例模式? Python有两种方式可以实现单例模式,下面两个例子使用了不同的方式实现单例模式: 1. class Singleton(type): def __init__(cls, name, bases, dict): super(Singleton, cls).__init__(name, bases, dict) cls.instance = None def __call__(cls, *args, **kw): if cls.instance is None: cls.instance = super(Singleton, cls).__call__(*args, **kw) return cls.instance class MyClass(object): __metaclass__ = Singleton print MyClass() print MyClass() 2. 使用decorator来实现单例模式 def singleton(cls): instances = {} def getinstance(): if cls not in instances: instances[cls] = cls() return instances[cls] return getinstance @singleton class MyClass: … 2:什么是lambda函数? Python允许你定义一种单行的小函数。定义lambda函数的形式如下:labmda 参数:表达式lambda函数默认返回表达式的值。你也可以将其赋值给一个变量。lambda函数可以接受任意个参数,包括可选参数,但是表达式只有一个:>>> g = lambda x, y: x*y >>> g(3,4) 12 >>> g = lambda x, y=0, z=0: x+y+z >>> g(1) 1

Python面试题及答案

P y t h o n面试题及答案 TTA standardization office【TTA 5AB- TTAK 08- TTA 2C】

2018年最新P y t h o n面试题及答案找工作是每个学习Python人员的目标,为了更好的找到工作,刷面试题是必不可少的,了解最新企业招聘试题,可以让你面试更加的顺利。小编整理了一些20XX年最新的Python面试题,来测测你技术的掌握度吧。 1、Python里面如何拷贝一个对象( 赋值,浅拷贝,深拷贝的区别) 答:赋值(=),就是创建了对象的一个新的引用,修改其中任意一个变量都会影响到另一个。 浅拷贝:创建一个新的对象,但它包含的是对原始对象中包含项的引用(如果用引用的方式修改其中一个对象,另外一个也会修改改变){1,完全切片方法;2,工厂函数,如list();3,copy模块的copy()函数} 深拷贝:创建一个新的对象,并且递归的复制它所包含的对象(修改其中一个,另外一个不会改变){copy模块的()函数} 2、Python里面match()和search()的区别? 答:re模块中match(pattern,string[,flags]),检查string的开头是否与pattern匹配。 re模块中research(pattern,string[,flags]),在string搜索pattern的第一个匹配值。 >>>print(‘super’, ‘superstition’).span())

(0, 5) >>>print(‘super’, ‘insuperable’)) None >>>print(‘super’, ‘superstition’).span()) (0, 5) >>>print(‘super’, ‘insuperable’).span()) (2, 7) 3、有没有一个工具可以帮助查找python的bug和进行静态的代码分析? 答:PyChecker是一个python代码的静态分析工具,它可以帮助查找python代码的bug, 会对代码的复杂度和格式提出警告 Pylint是另外一个工具可以进行codingstandard检查 4、简要描述Python的垃圾回收机制(garbage collection)。 答案 这里能说的很多。你应该提到下面几个主要的点: Python在内存中存储了每个对象的引用计数(reference count)。如果计数值变成0,那么相应的对象就会小时,分配给该对象的内存就会释放出来用作他用。 偶尔也会出现引用循环(reference cycle)。垃圾回收器会定时寻找这个循环,并将其回收。举个例子,假设有两个对象o1和o2,而且符合 == o2和 == o1这两个条件。如果o1和o2没有其他代码引用,那么它们就不应该继续存在。但它们的引用计数都是1。

python面试题整理(20170131092705)

1 请教一下列表与元组的区别是什么.分别在什么情况下使用 列表中的项目应该包括在方括号中,你可以添加、删除或是搜索列表中的项目。由于你可以增加或 删除项目,所以列表是可变的数据类型,即这种类型是可以被改变的。 元组和列表十分类似,但是元组是不可变的.也就是说你不能修改元组。元组通过圆括号中用逗号分 割的项目定义。元组通常用在使语句或用户定义的函数能够安全地采用一组值的时候, 即被使用的元组的值不会改变。 2 字典 键值对的集合(map)字典是以大括号“{}”包围的数据集合。 与列表区别:字典是无序的,在字典中通过键来访问成员。字典是可变的,可以包含任何其他类型。 3 Python是如何进行内存管理的? Python提供了对内存的垃圾收集机制,但是它将不用的内存放到内存池而不是返回给操作系统。 Python中所有小于256个字节的对象都使用pymalloc实现的分配器,而大的对象则使用系统的malloc。另外Python对象,如整数,浮点数和List,都有其独立的私有内存池,对象间不共享他们的内存池。 也就是说如果你分配又释放了大量的整数,用于缓存这些整数的内存就不能再分配给浮点数。 在Python中,许多时候申请的内存都是小块的内存,这些小块内存在申请后,很快又会被释放,由 于这些内存的申请并不是为了创建对象,所以并没有对象一级的内存池机制。这就意味着Python在运 行期间会大量地执行malloc和free的操作,频繁地在用户态和核心态之间进行切换,这将严重影响 Python的执行效率。为了加速Python的执行效率,Python引入了一个内存池机制,用于管理对小块内 存的申请和释放。这也就是之前提到的Pymalloc机制。 4 如何在一个function里面设置一个全局的变量? 解决方法是在function的开始插入一个global声明 5 Python中pass语句的作用是什么? pass语句什么也不做,一般作为占位符或者创建占位程序,pass语句不会执行任何操作,比如: while False: pass pass通常用来创建一个最简单的类: class MyEmptyClass: pass pass在软件设计阶段也经常用来作为TODO,提醒实现相应的实现,比如: def initlog(*args): pass #please implement this 6 Python里面如何拷贝一个对象?

最新python 笔试题

Python基础知识笔试 1 2 3 一、单选题(2.5分*20题) 4 1. 下列哪个表达式在Python中是非法的? B 5 A. x = y = z = 1 6 B. x = (y = z + 1) 7 C. x, y = y, x 8 D. x += y 9 2. python my.py v1 v2 命令运行脚本,通过 from sys impor t argv如何获得v2的参数值? C 10 11 A. argv[0] 12 B. argv[1] 13 C. argv[2] 14 D. argv[3] 15 3. 如何解释下面的执行结果? B 16 print 1.2 - 1.0 == 0.2 17 False 18 A. Python的实现有错误 19 B. 浮点数无法精确表示 20 C. 布尔运算不能用于浮点数比较 D. Python将非0数视为False 21 22 4. 下列代码执行结果是什么? D

23 x = 1 24 def change(a): 25 x+= 1 26 print x 27 change(x) 28 A. 1 29 B. 2 30 C. 3 D. 报错 31 32 5. 下列哪种类型是Python的映射类型? D 33 A. str 34 B. list 35 C. tuple 36 D. dict 6. 下述字符串格式化语法正确的是? D 37 38 A. 'GNU's Not %d %%' % 'UNIX' 39 B. 'GNU\'s Not %d %%' % 'UNIX' C. 'GNU's Not %s %%' % 'UNIX' 40 41 D. 'GNU\'s Not %s %%' % 'UNIX' 42 7. 在Python 2.7中,下列哪种是Unicode编码的书写方式?C A. a = ‘中文’ 43 44 B. a = r‘中文’

Python面试题及答案

2018年最新Python面试题及答案 找工作是每个学习Python人员的目标,为了更好的找到工作,刷面试题是必不可少的,了解最新企业招聘试题,可以让你面试更加的顺利。小编整理了一些2017年最新的Python面试题,来测测你技术的掌握度吧。 1、Python里面如何拷贝一个对象?(赋值,浅拷贝,深拷贝的区别) 答:赋值(=),就是创建了对象的一个新的引用,修改其中任意一个变量都会影响到另一个。 浅拷贝:创建一个新的对象,但它包含的是对原始对象中包含项的引用(如果用引用的方式修改其中一个对象,另外一个也会修改改变){1,完全切片方法;2,工厂函数,如list();3,copy模块的copy()函数} 深拷贝:创建一个新的对象,并且递归的复制它所包含的对象(修改其中一个,另外一个不会改变){copy模块的()函数} 2、Python里面match()和search()的区别? 答:re模块中match(pattern,string[,flags]),检查string的开头是否与pattern匹配。 re模块中research(pattern,string[,flags]),在string搜索pattern的第一个匹配值。 >>>print(‘super’, ‘superstition’).span()) (0, 5) >>>print(‘super’, ‘insuperable’)) None

>>>print(‘super’, ‘superstition’).span()) (0, 5) >>>print(‘super’, ‘insuperable’).span()) (2, 7) 3、有没有一个工具可以帮助查找python的bug和进行静态的代码分析? 答:PyChecker是一个python代码的静态分析工具,它可以帮助查找python 代码的bug, 会对代码的复杂度和格式提出警告 Pylint是另外一个工具可以进行codingstandard检查 4、简要描述Python的垃圾回收机制(garbage collection)。 答案 这里能说的很多。你应该提到下面几个主要的点: Python在内存中存储了每个对象的引用计数(reference count)。如果计数值变成0,那么相应的对象就会小时,分配给该对象的内存就会释放出来用作他用。 偶尔也会出现引用循环(reference cycle)。垃圾回收器会定时寻找这个循环,并将其回收。举个例子,假设有两个对象o1和o2,而且符合 == o2和 == o1这两个条件。如果o1和o2没有其他代码引用,那么它们就不应该继续存在。但它们的引用计数都是1。 Python中使用了某些启发式算法(heuristics)来加速垃圾回收。例如,越晚创建的对象更有可能被回收。对象被创建之后,垃圾回收器会分配它们所属的代(generation)。每个对象都会被分配一个代,而被分配更年轻代的对象是优先被处理的。

20道python面试题

对于机器学习算法工程师而言,Python是不可或缺的语言,它的优美与简洁令人无法自拔。那么你了解过Python编程面试题吗?今天我们就来了解一下! 1、python下多线程的限制以及多进程中传递参数的方式 python多线程有个全局解释器锁(global interpreter lock),这个锁的意思是任一时间只能有一个线程使用解释器,跟单cpu跑多个程序一个意思,大家都是轮着用的,这叫“并发”,不是“并行”。 多进程间共享数据,可以使用 multiprocessing.Value和multiprocessing.Array。 2、什么是lambda函数?它有什么好处? lambda 函数是一个可以接收任意多个参数(包括可选参数)并且返回单个表达式值的函数。lambda 函数不能包含命令,它们所包含的表达式不能超过一个。不要试图向lambda 函数中塞入太多的东西;如果你需要更复杂的东西,应该定义一个普通函数,然后想让它多长就多长。 3、Python是如何进行类型转换的? ①函数描述 ② int(x [,base ]) 将x转换为一个整数 ③long(x [,base ]) 将x转换为一个长整数 ④float(x ) 将x转换到一个浮点数 ⑤complex(real [,imag ]) 创建一个复数 ⑥str(x ) 将对象 x 转换为字符串 ⑦repr(x ) 将对象 x 转换为表达式字符串 ⑧eval(str ) 用来计算在字符串中的有效Python表达式,并返回一个对象 ⑨tuple(s ) 将序列 s 转换为一个元组 ⑩list(s ) 将序列 s 转换为一个列表 ?chr(x ) 将一个整数转换为一个字符 ?unichr(x ) 将一个整数转换为Unicode字符 ?ord(x ) 将一个字符转换为它的整数值 ?hex(x ) 将一个整数转换为一个十六进制字符串 ?oct(x ) 将一个整数转换为一个八进制字符串 4、python多线程与多进程的区别

最常见的-35-个-Python-面试题及答案

最常见的35 个Python 面试题及答案(2018 版) 1. Python 面试问题及答案 作为一个Python 新手,你必须熟悉基础知识。在本文中我们将讨论一些Python 面试的基础问题和高级问题以及答案,以帮助你完成面试。包括 Python 开发问题、编程问题、数据结构问题、和 Python 脚本问题。让我们来深入研究这些问题 Python 面试问题 . Python 的特点和优点是什么 Python 可以作为编程的入门语言,因为他具备以下特质: 1. 解释性 2. 动态特性 3. 面向对象 4. 语法简洁 5. 开源 6. 丰富的社区资源 实际上Python 的优点远不止这些,更详细的介绍可以阅读Introduction to Python ( blogs/python-tutorial/) . 深拷贝和浅拷贝的区别是什么 深拷贝是将对象本身复制给另一个对象。这意味着如果对对象的副本进行更改时不会影响原对象。在 Python 中,我们使用 deepcopy()函数进行深拷贝,使用方法如下: 深拷贝-Python 面试问题及答案 浅拷贝是将对象的引用复制给另一个对象。因此,如果我们在副本中进行更改,则会影响原对象。使用 copy()函数进行浅拷贝,使用方法如下: 浅拷贝—Python 面试问题及答案 . 列表和元祖有什么不同 主要区别在于列表是可变的,元祖是不可变的。看下面的例子: 会出现以下错误提示: TypeError: ‘tuple’ object does not support item assignment 关于列表和元祖的更多内容参考 Tuples vs Lists( blogs/python-tuples-vs-lists/)2. Python 面试基础题 到是新手经常会被问到的一些 Python 基础题,有经验的人也可以参考这些问题来复习这些概念。 . 解释 Python 中的三元表达式 与 C++不同, 在 Python 中我们不需要使用符号,而是使用如下语法: [on true] if [expression]else [on false] 如果 [expression] 为真, 则 [on true] 部分被执行。如果表示为假则 [on false] 部分被执行 下面是例子:

python面试题100

Python语言特性 1 Python的函数参数传递 看两个如下例子,分析运行结果: 代码一: a = 1 def fun(a): a = 2 fun(a) print(a) # 1 代码二: a = [] def fun(a): a.append(1) fun(a) print(a) # [1] 所有的变量都可以理解是内存中一个对象的“引用”,或者,也可以看似c中void*的感觉。 这里记住的是类型是属于对象的,而不是变量。而对象有两种,“可更改”(mutable)与“不可更改”(immutable)对象。在python中,strings, tuples,

和numbers是不可更改的对象,而list,dict等则是可以修改的对象。(这就是这个问题的重点) 当一个引用传递给函数的时候,函数自动复制一份引用,这个函数里的引用和外边的引用没有半毛关系了.所以第一个例子里函数把引用指向了一个不可变对象,当函数返回的时候,外面的引用没半毛感觉.而第二个例子就不一样了,函数内的引用指向的是可变对象,对它的操作就和定位了指针地址一样,在内存里进行修改. 2 Python中的元类(metaclass) 元类就是用来创建类的“东西”。你创建类就是为了创建类的实例对象,但是我们已经学习到了Python中的类也是对象。好吧,元类就是用来创建这些类(对象)的,元类就是类的类 这个非常的不常用,详情请看:《深刻理解Python中的元类(metaclass)》 3 @staticmethod和@classmethod Python其实有3个方法,即静态方法(staticmethod),类方法(classmethod)和实例方法,如下: class A(object): def foo(self,x): print "executing foo(%s,%s)"%(self,x) @classmethod def class_foo(cls,x): print( "executing class_foo(%s,%s)"%(cls,x)) @staticmethod def static_foo(x):

Python培训面试题目有哪些

Python培训面试题目有哪些 面试是公司挑选职工的一种重要方法。它给公司和应招者提供了进行双向交流的机会,能使公司和应招者之间相互了解,从而双方都可更准确做出聘用与否、受聘与否的决定。Python后端工程师面试题目有哪些? 一、语言 1.推荐一本看过最好的python书籍? 2.python适合的场景有哪些?当遇到计算密集型任务怎么办? 二、操作系统 可以直接认为是linux,毕竟搞后端的多数是和linux打交道。 1.tcp/udp的区别?tcp粘包是怎么回事,如何处理?udp有粘包吗? 2.time_wait是什么情况?出现过多的close_wait可能是什么原因? 3.epoll,select的区别?边缘触发,水平触发区别? 千锋Python课程历时一年精心策划,十大阶段共23周超长课时,以实战项目做指导,手把手纯面授,面对面现场教学。同时论坛辅导,上课资料录制,方便学生课后复习,严格保障教学质量。

三、存储 存储可能包含rdbms,nosql以及缓存等,我以mysql,redis举例mysql 相关 1.谈谈mysql字符集和排序规则? 2.varchar与char的区别是什么?大小限制? 3.primary key和unique的区别? 4.外键有什么用,是否该用外键?外键一定需要索引吗? 四、安全 1.sql注入是怎么产生的,如何防止? 2.xss如何预防?htmlescape后能否避免xss? 3.csrf是什么?django是如何防范的? 五、综合问题 是否关注新技术啊?golang,rust是否了解?numpy,pandas是什么? 是否紧跟时代潮流?逛不逛微博,刷不刷知乎? 这是有些公司面试Python后端工程师可能会抛给求职者的一些题目,这些

Python面试题总结

1.Python 线程池原理? 我理解为线程池是一个存放很多线程的单位,同时还有一个对应的任务队列。整个执行过程其实就是使用线程池中已有有限的线程把任务队列中的任务做完。这样做的好处就是你不需要为每个任务都创建一个线程,因为当你创建第100 个线程来执行第100个任务的时候,可能前面已经有50个线程结束工作了。超过最大值的线程可以排队,但他们要等到其他线程完成后才启动。因此重复利用线程来执行任务,减少系统资源的开销。 2.Python合并字典,相同key的value如何相加? 利用collections.Counter可轻松办到 >>> x = { 'apple':1, 'banana':2 } >>> y = { 'banana':10, 'pear':11 } >>> from collections import Counter >>> X,Y = Counter(x), Counter(y) >>> z = dict(X+Y) >>> z {'apple': 1, 'banana': 12, 'pear': 11} 另一种写法 >>>from collections import Counter >>>dict(Counter(x)+Counter(y)) ( 合并两个字典的方法 方法1: dictMerged1=dict(dict1.items()+dict2.items()) 方法2: dictMerged2=dict(dict1, **dict2) 方法2等同于: dictMerged=dict1.copy() dictMerged.update(dict2) 或者 dictMerged=dict(dict1) dictMerged.update(dict2) 3.解释GUI和GPL? GUI图形用户(Graphical User Interface,简称GUI,又称图形)是指采用图形方式显示的计算机操作用户。 GPL() GPL同其它的自由软件许可证一样,许可社会公众享有:运行、复制软件的自由,发行传播软件的自由,获得软件源码的自由,改进软件并将自己作出的改进版本向社会发行传播的自由。 4.简述爬虫的基本步骤和流程?

python笔试题

Python基础知识笔试 一、单选题(分*20题) 1. 下列哪个表达式在Python中是非法的 B A. x = y = z = 1 B. x = (y = z + 1) C. x, y = y, x D. x += y 2. python v1 v2 命令运行脚本,通过 from sys imp ort argv如何获得v2的参数值 C A. argv[0] B. argv[1] C. argv[2] D. argv[3] 3. 如何解释下面的执行结果B print - == False A. Python的实现有错误 B. 浮点数无法精确表示 C. 布尔运算不能用于浮点数比较 D. Python将非0数视为False

4. 下列代码执行结果是什么 D x = 1 def change(a): x+= 1 print x change(x) A. 1 B. 2 C. 3 D. 报错 5. 下列哪种类型是Python的映射类型 D A. str B. list C. tuple D. dict 6. 下述字符串格式化语法正确的是 D A. 'GNU's Not %d %%' % 'UNIX' B. 'GNU\'s Not %d %%' % 'UNIX' C. 'GNU's Not %s %%' % 'UNIX' D. 'GNU\'s Not %s %%' % 'UNIX'

7. 在Python 中,下列哪种是Unicode编码的书写方式C A. a = ‘中文’ B. a = r‘中文’ C. a = u’中文’ D. a = b’中文’ 8. 下列代码的运行结果是 D print 'a' < 'b' < 'c' A. a B. b C. c D. True E. False 9. 下列代码运行结果是 C a = 'a' print a > 'b' or 'c' A. a B. b C. c D. True E. False

Python面试考题

一,中文单项选择题(30分,每个3分)?1.下列哪个语句在Python中是非法的 A、x=y=z=1 B、x=(y=z+1) C、x,y=y,x D、x+=y ?2.关于Python内存管理,下列说法错误的是 A、变量不必事先声明 B、变量无须先创建和赋值而直接使用 C、变量无须指定类型 D、可以使用del释放资源 ?3、下面哪个不是Python合法的标识符 A、int32 B、40XL C、self D、name ?4、下列哪种说法是错误的 A、除字典类型外,所有标准对象均可以用于布尔测试 B、空字符串的布尔值是False C、空列表对象的布尔值是False D、值为0的任何数字对象的布尔值是False ?5、下列表达式的值为True的是 A、5+4j>2-3j B、3>2>2 C、(3,2)<('a','b') D、’abc’>‘xyz’ ?6、Python不支持的数据类型有 A、char B、int C、float D、list ?7、关于Python中的复数,下列说法错误的是 A、表示复数的语法是real+imagej B、实部和虚部都是浮点数 C、虚部必须后缀j,且必须是小写 D、方法conjugate返回复数的共轭复数 ?8、关于字符串下列说法错误的是

A、字符应该视为长度为1的字符串 B、字符串以\0标志字符串的结束 C、既可以用单引号,也可以用双引号创建字符串 D、在三引号字符串中可以包含换行回车等特殊字符 ?9、以下不能创建一个字典的语句是 A、dict1={} B、dict2={3:5} C、dict3={[1,2,3]:“uestc”} D、 dict4={(1,2,3):“uestc”} ?10、下列Python语句正确的是 A、min=xifxyx:y C、if(x>y)printx D、whileTrue:pass 二,英文单项选择题(30分) ?() printtype(1/2) A. B. C. D. E. ?() nums=set([1,1,2,3,3,3,4]) printlen(nums) "\nwoow" :woow :r"\nwoow" :\nwoow :woow :nwoow ?() foriinrange(2): printi foriinrange(4,6): printi ,4,,1,2,4,5,,1,4,,1,4,5,6,7,8,,2,4,5,6 ?() importmath ?'Amir','Barry','Chales','Dao'] ? ?if'amir'innames1: ?print1 ?else:

ython面试题及答案

2018 年最新Python 面试题及答案 找工作是每个学习Python 人员的目标,为了更好的找到工作,刷面试题是必不可 少的,了解最新企业招聘试题,可以让你面试更加的顺利。小编整理了一些20XX年最新的Python 面试题,来测测你技术的掌握度吧。 1、Python 里面如何拷贝一个对象?(赋值,浅拷贝,深拷贝的区别) 答:赋值( =),就是创建了对象的一个新的引用,修改其中任意一个变量都会影响到另一个。 浅拷贝:创建一个新的对象,但它包含的是对原始对象中包含项的引用(如果用引用的方式修改其中一个对象,另外一个也会修改改变) {1, 完全切片方法;2,工厂函数,如list() ;3,copy 模块的copy() 函数} 深拷贝:创建一个新的对象,并且递归的复制它所包含的对象(修改其中一个,另外一个不会改变) {copy 模块的() 函数} 2、Python 里面match() 和search() 的区别? 答:re 模块中match(pattern,string[,flags]), 检查string 的开头是否与 pattern 匹配。 re 模块中research(pattern,string[,flags]), 在string 搜索pattern 的第一个 匹配值。 >>>print( ‘super', ‘superstition ').span()) (0, 5) >>>print( ‘super', ‘insuperable '))

None >>>print( ‘super', ‘superstition ').span()) (0, 5) >>>print( ‘super ', ‘insuperable ').span()) (2, 7) 3、有没有一个工具可以帮助查找python 的bug 和进行静态的代码分析? 答:PyChecker是一个python代码的静态分析工具,它可以帮助查找python代码 的bug, 会对代码的复杂度和格式提出警告 Pylint 是另外一个工具可以进行codingstandard 检查 4、简要描述Python 的垃圾回收机制( garbage collection )。 答案 这里能说的很多。你应该提到下面几个主要的点: Python在内存中存储了每个对象的引用计数(referenee count )。如果计数值变成0,那么相应的对象就会小时,分配给该对象的内存就会释放出来用作他用。 偶尔也会出现引用循环( reference cycle )。垃圾回收器会定时寻找这个循环, 并将其回收。举个例子,假设有两个对象o1和02,而且符合==02和==o1这两个 条件。如果o1和o2没有其他代码引用,那么它们就不应该继续存在。但它们的引用计数都是1。 Python 中使用了某些启发式算法( heuristics )来加速垃圾回收。例如,越晚创建的对象更有可能被回收。对象被创建之后,垃圾回收器会分配它们所属的代 (generation )。每个对象都会被分配一个代,而被分配更年轻代的对象是优先被处理的。

经典Python面试题之数据库和缓存

经典Python面试题之数据库和缓存 1. 列举常见的关系型数据库和非关系型都有那些? 2. MySQL常见数据库引擎及比较? 3. 简述数据三大范式? 4. 什么是事务?MySQL如何支持事务? 5. 简述数据库设计中一对多和多对多的应用场景? 6. 如何基于数据库实现商城商品计数器? 7. 常见SQL(必备) 8. 简述触发器、函数、视图、存储过程? 9. MySQL索引种类 10. 索引在什么情况下遵循最左前缀的规则? 11. 主键和外键的区别? 12. MySQL常见的函数? 13. 列举创建索引但是无法命中索引的8种情况。 14. 如何开启慢日志查询? 15. 数据库导入导出命令(结构+数据)? 16. 数据库优化方案? 17. char和varchar的区别? 18. 简述MySQL的执行计划? 19. 在对name做了唯一索引前提下,简述以下区别: select * from tb where name = ‘Oldboy-Wup eiqi’

select * from tb where name = ‘Oldboy-Wupeiqi’ limit 1 20. 1000w条数据,使用limit offset 分页时,为什么越往后翻越慢?如何解决? 21. 什么是索引合并? 22. 什么是覆盖索引? 23. 简述数据库读写分离? 24. 简述数据库分库分表?(水平、垂直) 25. redis和memcached比较? 26. redis中数据库默认是多少个db 及作用? 27. python操作redis的模块? 28. 如果redis中的某个列表中的数据量非常大,如果实现循环显示每一个值? 29. redis如何实现主从复制?以及数据同步机制? 30. redis中的sentinel的作用? 31. 如何实现redis集群? 32. redis中默认有多少个哈希槽? 33. 简述redis的有哪几种持久化策略及比较? 34. 列举redis支持的过期策略。 35. MySQL 里有 2000w 数据,redis 中只存 20w 的数据,如何保证 redis 中都是热点数据? 36. 写代码,基于redis的列表实现先进先出、后进先出队列、优先级队列。

Python测试开发面试笔试题

Python测试开发面试笔试题 一,中文单项选择题(30分,每个3分) 1.下列哪个语句在Python中是非法的? A、x=y=z=1 B、x=(y=z+1) C、x,y=y,x D、x+=y 2.关于Python内存管理,下列说法错误的是 A、变量不必事先声明 B、变量无须先创建和赋值而直接使用 C、变量无须指定类型 D、可以使用del释放资源 3、下面哪个不是Python合法的标识符 A、int32 B、40XL C、self D、name 4、下列哪种说法是错误的 A、除字典类型外,所有标准对象均可以用于布尔测试 B、空字符串的布尔值是False C、空列表对象的布尔值是False D、值为0的任何数字对象的布尔值是False 5、下列表达式的值为True的是 A、5+4j>2-3j B、3>2>2 C、(3,2)<('a','b') D、’abc’>‘xyz’ 6、Python不支持的数据类型有 A、char B、int C、float D、list 7、关于Python中的复数,下列说法错误的是 A、表示复数的语法是real+image j B、实部和虚部都是浮点数 C、虚部必须后缀j,且必须是小写 D、方法conjugate返回复数的共轭复数 8、关于字符串下列说法错误的是 A、字符应该视为长度为1的字符串 B、字符串以标志字符串的结束 C、既可以用单引号,也可以用双引号创建字符串 D、在三引号字符串中可以包含换行回车等特殊字符

9、以下不能创建一个字典的语句是 A、dict1={} B、dict2={3:5} C、dict3={[1,2,3]:“uestc”} D、dict4={(1,2,3):“uestc”} 10、下列Python语句正确的是 A、min=x if xy?x:y C、if(x>y)print x D、while True:pass 二,英文单项选择题(30分) 1.what gets printed?Assuming python version 2.x() print type(1/2) A. B. C. D. E. 2.What gets printed?() nums=set([1,1,2,3,3,3,4]) print len(nums) A.1 B.2 C.4 D.5 E.7 3.What gets printed?() counter=1 def doLotsOfStuff(): global counter for i in(1,2,3): counter+=1 doLotsOfStuff() print counter A.1 B.3 C.4 D.7 E.none of the above 4.What gets printed?() print r"woow" A.new line then the string:woow B.the text exactly like this:r"woow" C.the text like exactly like this:woow D.the letter r and then newline then the text:woow E.the letter r then the text like this:nwoow 5.Which numbers are printed?()

python常见面试题集

1、MySQL 数据库总结 MySQL 可以建多少个数据库,理论上是没有限制的,每一个数据库可以有上亿的对象,但是一般基于硬件要求、效率问题一般不超过64个, 超过64个会对数据处理速度造成影响,每一张表建议不超过过1亿条数据。 2、Python 话题 1.最受欢迎的Python开源框架1:Django2:Twisted 3:Tornado除了以上三种常用的开源框架外还有: Diesel、Flask、Cubes、Kartograph、Pulsar、Web2py、Falcon、DPark、Buildbot、Zerorpc、Bottle、webpy、Scrapy 3、python常用的web框架1:Django2:Tornado3:Bottle4:web.py 5:web2py 6:Quixote(豆瓣网就是基于该框架开发的) 4、python几种流行框架的比较 https://https://www.sodocs.net/doc/a711476887.html,/question/1047367767941211939.html 国内著名网基于Python开发的豆瓣、知乎、美团、咕咚网、快玩游戏。 5、Python常用的内置模块 multiprocessing (多进程模块) Queue(多线程编程)os (用于获取环境变量、路径,判断文件等)functools(包含一些常用的函数) collection(集合、常用数据结构算法)re(正则匹配,字符的查询替换等操作) 6、python中re模块的match()和search()函数的区别 re模块中match(pattern,string,[flags]),检查string的开头是否与patter匹配 re模块中search(pattern,string,[flags]),在string搜索pattern的第一个配置值 7、python2和python3的区别 Python2中使用ASCII 码作为默认编码方式导致string有两种类型str和unicode,Python3只支持unicode的string Python2中采用相对路径的import Python3采用的是绝对路径的方式进行import python3的缩进更加的严格python3采用的是print函数exec函数python2采用的是print 语句和exec语句

Python面试笔试题

第一题 以下两段代码,运行结束后的结果是什么?是否相同?原因是什么? 代码一 代码二 第二题 4G内存怎么读取一个5G的数据? 第三题 浅述深浅拷贝 答案 第一题 结果不相同 第一段结果为: [{'num':0},{'num':1},{'num':2},{'num':3},{'num':4},{'num':5},{'num':6},{'num':7},{'n um':8},{'num':9}] 第二段结果为: [{'num':9},{'num':9},{'num':9},{'num':9},{'num':9},{'num':9},{'num':9},{'num':9},{'n um':9},{'num':9}]

字典是可变类型,这里l.append(a)相当于执行了浅拷贝,每改变一次a中num的值,所有a的值都将改变 第二题 实现方法有两种。 实现方法一: 方法一的实现思路是通过生成器,一次读取少量数据,标准答案是根据文件实现,这里给出的例子是咸鱼学习bobby老师的课程时记录的例子,不知道如何使用生成器完成这个需求的朋友可以参考: 实现方法二: 在linux系统下使用split可以分割文件,对于多行文件可以使用按行分割的方式,对于单行的大文件可以采用按文件大小分割。 按文件行数分割:split -l 300 large_file.log smallfile_prefix 按文件大小分割:split -b 10m large_file.log smallfile_prefix 之后再按文件读取即可。 第一题 下图中的打印结果分别是什么?

第二题 Python中静态方法、类方法、成员函数作用是什么? 第三题 说说对缺省参数的理解?* args是什么?** kwargs是什么? 答案 第一题 前三个是True,最后一个会报错。 具前三个为什么输出True,不了解的可以参考下图: 图来源于bobby老师的异步IO编程课件 最后一个为什么报错,我们可以先看下issubclass的用法: issubclass方法用于判断参数 class 是否是类型参数 classinfo 的子类 issubclass(class, classinfo) 参数

python面试题及答案

1. Python是如何进行内存管理的? 答:从三个方面来说,一对象的引用计数机制,二垃圾回收机制,三内存池机制 一、对象的引用计数机制 python内部使用引用计数,来保持追踪内存中的对象,所有对象都有引用计数。 引用计数增加的情况: 1,一个对象分配一个新名称 2,将其放入一个容器中(如列表、元组或字典) 引用计数减少的情况: 1,使用del语句对对象别名显示的销毁 2,引用超出作用域或被重新赋值 sys.getrefcount( )函数可以获得对象的当前引用计数 多数情况下,引用计数比你猜测得要大得多。对于不可变数据(如数字和字符串),解释器会在程序的不同部分共享内存,以便节约内存。 二、垃圾回收 1,当一个对象的引用计数归零时,它将被垃圾收集机制处理掉。 2,当两个对象a和b相互引用时,del语句可以减少a和b的引用计数,并销毁用于引用底层对象的名称。然而由于每个对象都包含一个对其他对象的应用,因此引用计数不会归零,对象也不会销毁。(从而导致内存泄露)。为解决这一问题,解释器会定期执行一个循环检测器,搜索不可访问对象的循环并删除它们。 三、内存池机制 Python提供了对内存的垃圾收集机制,但是它将不用的内存放到内存池而不是返回给操作系统。 1,Pymalloc机制。为了加速Python的执行效率,Python引入了一个内存池机制,用于管理对小块内存的申请和释放。 2,Python中所有小于256个字节的对象都使用pymalloc实现的分配器,而大的对象则使用系统的malloc。

3,对于Python对象,如整数,浮点数和List,都有其独立的私有内存池,对象间不共享他们的内存池。也就是说如果你分配又释放了大量的整数,用于缓存这些整数的内存就不能再分配给浮点数。 2. 什么是lambda函数?它有什么好处? 答:lambda 表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数 lambda函数:首要用途是指点短小的回调函数 lambda [arguments]:expression >>> a=lambdax,y:x+y >>> a(3,11) 3. Python里面如何实现tuple和list的转换? 答:直接使用tuple和list函数就行了,type()可以判断对象的类型 4. 请写出一段Python代码实现删除一个list里面的重复元素 答: 1,使用set函数,set(list) 2,使用字典函数, >>>a=[1,2,4,2,4,5,6,5,7,8,9,0] >>> b={} >>>b=b.fromkeys(a) >>>c=list(b.keys()) >>> c 5. 编程用sort进行排序,然后从最后一个元素开始判断 a=[1,2,4,2,4,5,7,10,5,5,7,8,9,0,3]

相关主题