文档库 最新最全的文档下载
当前位置:文档库 › python面试题100

python面试题100

python面试题100
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):

print ("executing static_foo(%s)"%x)

a=A()

这里先理解下函数参数里面的self和cls.这个self和cls是对类或者实例的绑定.对于实例方法,我们知道在类里每次定义方法的时候都需要绑定这个实例,就是

foo(self, x),为什么要这么做呢?因为实例方法的调用离不开实例,我们需要把实

例自己传给函数,调用的时候是这样的a.foo(x)(其实是foo(a, x)).类方法一样,只不过它传递的是类而不是实例,A.class_foo(x).注意这里的self和cls可以替换别的参数,但是python的约定是这俩,还是不要改的好.

对于静态方法其实和普通的方法一样,不需要对谁进行绑定,唯一的区别是调用的时候需要使用a.static_foo(x)或者A.static_foo(x)来调用.

\ 实例方法类方法静态方法

a = A() a.foo(x) a.class_foo(x) a.static_foo(x)

A 不可用 A.class_foo(x) A.static_foo(x)

4 类变量和实例变量

class Person:

name="aaa"

p1=Person()

p2=Person()

https://www.wendangku.net/doc/7c10627748.html,="bbb"

print(https://www.wendangku.net/doc/7c10627748.html,) # bbb

print(https://www.wendangku.net/doc/7c10627748.html,) # aaa

print(https://www.wendangku.net/doc/7c10627748.html,) # aaa

类变量就是供类使用的变量,实例变量就是供实例使用的.

这里https://www.wendangku.net/doc/7c10627748.html,="bbb"是实例调用了类变量,这其实和上面第一个问题一样,就是函数传参的问题,https://www.wendangku.net/doc/7c10627748.html,一开始是指向的类变量name="aaa",但是在实例的作用域里把类变量的引用改变了,就变成了一个实例变量,https://www.wendangku.net/doc/7c10627748.html,不再引用Person的类变量name了.

可以看看下面的例子:

class Person:

name=[]

p1=Person()

p2=Person()

https://www.wendangku.net/doc/7c10627748.html,.append(1)

print(https://www.wendangku.net/doc/7c10627748.html,) # [1]

print(https://www.wendangku.net/doc/7c10627748.html,) # [1]

print(https://www.wendangku.net/doc/7c10627748.html,) # [1]

5 Python自省

这个也是python彪悍的特性.

自省就是面向对象的语言所写的程序在运行时,所能知道对象的类型.简单一句就是运行时能够获得对象的类型.比如type(),dir(),getattr(),hasattr(),isinstance(). 6 字典推导式

可能你见过列表推导时,却没有见过字典推导式,在2.7中才加入的:

d = {key: valu

e for (key, value) in iterable}

7 Python中单下划线和双下划线

1 2 3 4 5 6 7 8 9

10

11 >>> class MyClass():

... def __init__(self):

... self.__superprivate = "Hello"

... self._semiprivate = ", world!"

...

>>> mc = MyClass()

>>> print(mc.__superprivate)

Traceback (most recent call last):

File "", line 1, in

AttributeError: myClass instance has no attribute '__superprivate' >>> print(mc._semiprivate)

12

13

14 , world!

>>> print mc.__dict__

{'_MyClass__superprivate': 'Hello', '_semiprivate': ', world!'}

__foo__:一种约定,Python内部的名字,用来区别其他用户自定义的命名,以防冲突. _foo:一种约定,用来指定变量私有.程序员用来指定私有变量的一种方式.

__foo:这个有真正的意义:解析器用_classname__foo来代替这个名字,以区别和其他类相同的命名.

详情见:

https://www.wendangku.net/doc/7c10627748.html,/question/19754941

8 字符串格式化:%和.format

.format在许多方面看起来更便利.对于%最烦人的是它无法同时传递一个变量和元组.你可能会想下面的代码不会有什么问题:

Python:

"hi there %s" % name

但是,如果name恰好是(1,2,3),它将会抛出一个TypeError异常.为了保证它总是正确的,你必须这样做:

"hi there %s" % (name,) # 提供一个单元素的数组而不是一个参数

9 迭代器和生成器

在Python中,这种一边循环一边计算的机制,称为生成器:generator。

可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator。

这个是stackoverflow里python排名第一的问题,值得一看:

https://www.wendangku.net/doc/7c10627748.html,/questions/231767/what-does-the-yield-keyword -do-in-python

10 *args and **kwargs

用*args和**kwargs只是为了方便并没有强制使用它们.

当你不确定你的函数里将要传递多少参数时你可以用*args.例如,它可以传递任意数量的参数:

1 2 3 4 5 6 7 8 >>> def print_everything(*args):

for count, thing in enumerate(args):

... print '{0}. {1}'.format(count, thing) ...

>>> print_everything('apple', 'banana', 'cabbage')

0. apple

1. banana

2. cabbage

相似的,**kwargs允许你使用没有事先定义的参数名:

1 2 3 4 5 6 7 >>> def table_things(**kwargs):

... for name, value in kwargs.items():

... print '{0} = {1}'.format(name, value)

...

>>> table_things(apple = 'fruit', cabbage = 'vegetable') cabbage = vegetable

apple = fruit

你也可以混着用.命名参数首先获得参数值然后所有的其他参数都传递给*args和**kwargs.命名参数在列表的最前端.例如:

1 def table_things(titlestring, **kwargs)

*args和**kwargs可以同时在函数的定义中,但是*args必须在**kwargs前面. 当调用函数时你也可以用*和**语法.例如:

1 2 3 4 5 6 7 >>> def print_three_things(a, b, c):

... print 'a = {0}, b = {1}, c = {2}'.format(a,b,c) ...

>>> mylist = ['aardvark', 'baboon', 'cat']

>>> print_three_things(*mylist)

a = aardvark,

b = baboon,

c = cat

就像你看到的一样,它可以传递列表(或者元组)的每一项并把它们解包.注意必须与

它们在函数里的参数相吻合.当然,你也可以在函数定义或者函数调用时用*.

https://www.wendangku.net/doc/7c10627748.html,/questions/3394835/args-and-kwargs

11 面向切面编程AOP和装饰器

这个AOP一听起来有点懵,同学面试的时候就被问懵了…

装饰器是一个很著名的设计模式,经常被用于有切面需求的场景,较为经典的有插入日志、性能测试、事务处理等。装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量函数中与函数功能本身无关的雷同代码并继续重用。概括的讲,装饰器的作用就是为已经存在的对象添加额外的功能。

这个问题比较大,推荐:

https://www.wendangku.net/doc/7c10627748.html,/questions/739654/how-can-i-make-a-chain-of-fu nction-decorators-in-python

中文:

http://taizilongxu.gitbooks.io/stackoverflow-about-python/content/3/REA DME.html

12 鸭子类型

“当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。”

我们并不关心对象是什么类型,到底是不是鸭子,只关心行为。

比如在python中,有很多file-like的东西,比如StringIO,GzipFile,socket。它们有很多相同的方法,我们把它们当作文件使用。

又比如list.extend()方法中,我们并不关心它的参数是不是list,只要它是可迭代的,所以它的参数可以是list/tuple/dict/字符串/生成器等.

鸭子类型在动态语言中经常使用,非常灵活,使得python不想java那样专门去弄一大堆的设计模式。

13 Python中重载

引自知乎:https://www.wendangku.net/doc/7c10627748.html,/question/20053359

函数重载主要是为了解决两个问题。

1.可变参数类型。

2.可变参数个数。

另外,一个基本的设计原则是,仅仅当两个函数除了参数类型和参数个数不同以外,其功能是完全相同的,此时才使用函数重载,如果两个函数的功能其实不同,那么不应当使用重载,而应当使用一个名字不同的函数。

好吧,那么对于情况1 ,函数功能相同,但是参数类型不同,python 如何处理?答案是根本不需要处理,因为python 可以接受任何类型的参数,如果函数的功能相同,那么不同的参数类型在python 中很可能是相同的代码,没有必要做成两个不同函数。

那么对于情况2 ,函数功能相同,但参数个数不同,python 如何处理?大家知道,答案就是缺省参数。对那些缺少的参数设定为缺省参数即可解决问题。因为你假设函数功能相同,那么那些缺少的参数终归是需要用的。

好了,鉴于情况1 跟情况2 都有了解决方案,python 自然就不需要函数重载了。

14 新式类和旧式类

这个面试官问了,我说了老半天,不知道他问的真正意图是什么.

这篇文章很好的介绍了新式类的特性:

https://www.wendangku.net/doc/7c10627748.html,/btchenguang/archive/2012/09/17/2689146.html 新式类很早在2.2就出现了,所以旧式类完全是兼容的问题,Python3里的类全部都是新式类.这里有一个MRO问题可以了解下(新式类是广度优先,旧式类是深度优先),里讲的也很多.

15 __new__和__init__的区别

这个__new__确实很少见到,先做了解吧.

1.__new__是一个静态方法,而__init__是一个实例方法.

2.__new__方法会返回一个创建的实例,而__init__什么都不返回.

3.只有在__new__返回一个cls的实例时后面的__init__才能被调用.

4.当创建一个新实例时调用__new__,初始化一个实例时用__init__.

ps: __metaclass__是创建类时起作用.所以我们可以分别使用

__metaclass__,__new__和__init__来分别在类创建,实例创建和实例初始化的时候做一些小手脚.

16 单例模式

这个绝对常考啊.绝对要记住1~2个方法,当时面试官是让手写的.

1 使用__new__方法

classSingleton(object):

def__new__(cls,*args,**kw):

ifnothasattr(cls,'_instance'):

orig=super(Singleton,cls)

cls._instance=orig.__new__(cls,*args,**kw)

returncls._instance

classMyClass(Singleton):

a=1

2 共享属性

创建实例时把所有实例的__dict__指向同一个字典,这样它们具有相同的属性和方法.

1 2 3 classBorg(object):

_state={}

def__new__(cls,*args,**kw):

4 5 6 7 8 9 ob=super(Borg,cls).__new__(cls,*args,**kw) ob.__dict__=cls._state

returnob

classMyClass2(Borg):

a=1

3 装饰器版本

1 2 3 4 5 6 7 8 9

10

11 defsingleton(cls,*args,**kw):

instances={}

defgetinstance():

ifcls notininstances:

instances[cls]=cls(*args,**kw) returninstances[cls]

returngetinstance

@singleton

classMyClass:

4 import方法

作为python的模块是天然的单例模式

# mysingleton.py

classMy_Singleton(object):

deffoo(self):

pass

my_singleton=My_Singleton()

# to use

frommysingleton importmy_singleton

my_singleton.foo()

17 Python中的作用域

Python 中,一个变量的作用域总是由在代码中被赋值的地方所决定的。

当Python 遇到一个变量的话他会按照这样的顺序进行搜索:

本地作用域(Local)→当前作用域被嵌入的本地作用域(Enclosing locals)→全局/模块作用域(Global)→内置作用域(Built-in)

18 GIL线程全局锁

线程全局锁(Global Interpreter Lock),即Python为了保证线程安全而采取的独立线程运行的限制,说白了就是一个核只能在同一时间运行一个线程.

解决办法就是多进程和下面的协程(协程也只是单CPU,但是能减小切换代价提升性能).

19 协程

简单点说协程是进程和线程的升级版,进程和线程都面临着内核态和用户态的切换问题而耗费许多切换时间,而协程就是用户自己控制切换的时机,不再需要陷入系统的内核态.

Python里最常见的yield就是协程的思想!可以查看第九个问题.

20 闭包

闭包(closure)是函数式编程的重要的语法结构。闭包也是一种组织代码的结构,它同样提高了代码的可重复使用性。

当一个内嵌函数引用其外部作作用域的变量,我们就会得到一个闭包. 总结一下,创建一个闭包必须满足以下几点:

1.必须有一个内嵌函数

2.内嵌函数必须引用外部函数中的变量

3.外部函数的返回值必须是内嵌函数

感觉闭包还是有难度的,几句话是说不明白的,还是查查相关资料.

重点是函数运行后并不会被撤销,就像16题的instance字典一样,当函数运行完后,instance并不被销毁,而是继续留在内存空间里.这个功能类似类里的类变量,只不过迁移到了函数上.

闭包就像个空心球一样,你知道外面和里面,但你不知道中间是什么样.

21 lambda函数

其实就是一个匿名函数,为什么叫lambda?因为和后面的函数式编程有关.

22 Python函数式编程

这个需要适当的了解一下吧,毕竟函数式编程在Python中也做了引用.

python中函数式编程支持:

filter 函数的功能相当于过滤器。调用一个布尔函数bool_func来迭代遍历每个seq中的元素;返回一个使bool_seq返回值为true的元素的序列。

>>>b=filter(lambdax:x>5,a)

>>>printb

>>>[6,7]

map函数是对一个序列的每个项依次执行函数,下面是对一个序列每个项都乘以2:

>>>a=map(lambdax:x*2,[1,2,3])

>>>list(a)

[2,4,6]

reduce函数是对一个序列的每个项迭代调用函数,下面是求3的阶乘:

>>>reduce(lambdax,y:x*y,range(1,4))

6

23 Python里的拷贝

引用和copy(),deepcopy()的区别

1 2 3 4 5 6 7 8 9

10

11

12

13

14

15

16

17

18

19 importcopy

a=[1,2,3,4,['a','b']] #原始对象

b=a #赋值,传对象的引用

c=copy.copy(a) #对象拷贝,浅拷贝

d=copy.deepcopy(a) #对象拷贝,深拷贝

a.append(5) #修改对象a

a[4].append('c') #修改对象a中的['a', 'b']数组对象

print'a = ',a

print'b = ',b

print'c = ',c

print'd = ',d

输出结果:

a= [1,2,3,4,['a','b','c'],5]

b= [1,2,3,4,['a','b','c'],5]

c= [1,2,3,4,['a','b','c']]

24 Python垃圾回收机制

Python GC主要使用引用计数(reference counting)来跟踪和回收垃圾。在引用计数的基础上,通过“标记-清除”(mark and sweep)解决容器对象可能产生的循环引用问题,通过“分代回收”(generation collection)以空间换时间的方法提高垃圾回收效率。

1 引用计数

PyObject是每个对象必有的内容,其中ob_refcnt就是做为引用计数。当一个对象有新的引用时,它的ob_refcnt就会增加,当引用它的对象被删除,它的

ob_refcnt就会减少.引用计数为0时,该对象生命就结束了。

优点:

1.简单

2.实时性

缺点:

1.维护引用计数消耗资源

2.循环引用

2 标记-清除机制

基本思路是先按需分配,等到没有空闲内存的时候从寄存器和程序栈上的引用出发,遍历以对象为节点、以引用为边构成的图,把所有可以访问到的对象打上标记,然后清扫一遍内存空间,把所有没标记的对象释放。

3 分代技术

分代回收的整体思想是:将系统中的所有内存块根据其存活时间划分为不同的集合,每个集合就成为一个“代”,垃圾收集频率随着“代”的存活时间的增大而减小,存活时间通常利用经过几次垃圾回收来度量。

Python默认定义了三代对象集合,索引数越大,对象存活时间越长。

举例:

当某些内存块M经过了3次垃圾收集的清洗之后还存活时,我们就将内存块M划到一个集合A中去,而新分配的内存都划分到集合B中去。当垃圾收集开始工作时,大多数情况都只对集合B进行垃圾回收,而对集合A进行垃圾回收要隔相当长一段时间后才进行,这就使得垃圾收集机制需要处理的内存少了,效率自然就提高了。在这个过程中,集合B中的某些内存块由于存活时间长而会被转移到集合A中,当然,集合A中实际上也存在一些垃圾,这些垃圾的回收会因为这种分代的机制而被延迟。

25 Python里面如何实现tuple和list的转换?

答:tuple,可以说是不可变的list,访问方式还是通过索引下标的方式。

当你明确定义个tuple是,如果仅有一个元素,必须带有,例如:(1,)。

当然,在2.7以后的版,python里还增加了命名式的tuple!

至于有什么用,首先第一点,楼主玩过python都知道,python的函数可以有多返回值的,而python 里,多返回值,就是用tuple来表示,这是用的最广的了,

比如说,你需要定义一个常量的列表,但你又不想使用list,那也可以是要你管tuple,例如:

if a in ('A','B','C'):pass

26 Python的is

is是对比地址,==是对比值

27 read,readline和readlines

?read 读取整个文件

?readline 读取下一行,使用生成器方法

?readlines 读取整个文件到一个迭代器以供我们遍历

28 Python2和3的区别

大部分Python库都同时支持Python 2.7.x和3.x版本的,所以不论选择哪个版本都是可以的。但为了在使用Python时避开某些版本中一些常见的陷阱,或需要移

植某个Python项目

使用__future__模块

print函数

整数除法

Unicode

xrange

触发异常

处理异常

next()函数和.next()方法

For循环变量与全局命名空间泄漏

比较无序类型

使用input()解析输入内容

返回可迭代对象,而不是列表

29到底什么是Python?你可以在回答中与其他技术进行对比

答案

下面是一些关键点:

Python是一种解释型语言。这就是说,与C语言和C的衍生语言不同,Python代码在运行之前不需要编译。其他解释型语言还包括PHP和Ruby。

?Python是动态类型语言,指的是你在声明变量时,不需要说明变量的类型。你可以直接编写类似x=111和x="I'm a string"这样的代码,程序不会报错。

?Python非常适合面向对象的编程(OOP),因为它支持通过组合(composition)与继承(inheritance)的方式定义类(class)。Python中没有访问说明符(access speci fier,类似C++中的public和private),这么设计的依据是“大家都是成年人了”。?在Python语言中,函数是第一类对象(first-class objects)。这指的是它们可以被指定给变量,函数既能返回函数类型,也可以接受函数作为输入。类(class)也是第一类对象。

?Python代码编写快,但是运行速度比编译语言通常要慢。好在Python允许加入基于C 语言编写的扩展,因此我们能够优化代码,消除瓶颈,这点通常是可以实现的。numpy 就是一个很好地例子,它的运行速度真的非常快,因为很多算术运算其实并不是通过Pyth on实现的。

?Python用途非常广泛——网络应用,自动化,科学建模,大数据应用,等等。它也常被用作“胶水语言”,帮助其他语言和组件改善运行状况。

?Python让困难的事情变得容易,因此程序员可以专注于算法和数据结构的设计,而不用处理底层的细节。

为什么提这个问题:

如果你应聘的是一个Python开发岗位,你就应该知道这是门什么样的语言,以及它为什么这么酷。以及它哪里不好。

30补充缺失的代码

def print_directory_contents(sPath):

"""

这个函数接受文件夹的名称作为输入参数,

返回该文件夹中文件的路径,

以及其包含文件夹中文件的路径。

"""

# 补充代码

答案

def print_directory_contents(sPath):

import os

for sChild in os.listdir(sPath):

sChildPath = os.path.join(sPath,sChild)

if os.path.isdir(sChildPath):

print_directory_contents(sChildPath)

else:

print sChildPath

特别要注意以下几点:

?命名规范要统一。如果样本代码中能够看出命名规范,遵循其已有的规范。

?递归函数需要递归并终止。确保你明白其中的原理,否则你将面临无休无止的调用栈(c allstack)。

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.wendangku.net/doc/7c10627748.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]

相关文档