python面试题

第一部分 Python基础篇(80题)

1、为什么学习Python?

            python入门简单。

            Python编写代码的速度非常的快,而且非常注重代码的可读性,非常适合多人参与的项目。

            Python支持多平台开发,用它编写的代码可以不经过任何转换就能在Linux与Windows系统任何移植,在苹果OS系统也没有任何兼容性的问题。

2、通过什么途径学习的Python?

            自己看书,网上查资料。查看网上的授课视频

3、Python和Java、PHP、C、C#、C++等其他语言的对比?

            python是一种解释型语言,python是完全面向对象的语言,完全支持继承、重载、派生、多继承,有益于增强源代码的复用性。胶水语言

4、简述解释型和编译型编程语言?

        编译型语言:把做好的源程序全部编译成二进制代码的可运行程序。然后,可直接运行这个程序。 

        解释型语言:把做好的源程序翻译一句,然后执行一句,直至结束!

        编译语言是在编译后可以直接运行,而解释语言的执行需要一个解释环境。

5、Python解释器种类以及特点?

        CPython  使用最广的Python解释器。

        IPython  是基于CPython之上的一个交互式解释器,也就是说,IPython只是在交互方式上有所增强

        PyPy  显著提高Python代码的执行速度。

        Jython   是运行在Java平台上的Python解释器,可以直接把Python代码编译成Java字节码执行。

        IronPython     是运行在微软.Net平台上的Python解释器,可以直接把Python代码编译成.Net的字节码。

6、位和字节的关系?

        1byte=8bit

        最小的存储单位称为位(bit

7、b、B、KB、MB、GB 的关系?

       1TB=1024GB,

       1GB=1024MB;

       1MB=1024KB;

       1KB=1024B;

       1B=8bit

8、请至少列举5个 PEP8 规范(越多越好)。

        缩进   每级缩进用4个空格

        最大行宽   限制所有行的最大行宽为79字符。

        空行  两行空行分割顶层函数和类的定义

        导入  导入在单独行

        表达式和语句的空格  , 括号里边避免空格   逗号,冒号,分号之前避免空格

        ``````


9、通过代码实现如下转换:

二进制转换成十进制:v = “0b1111011”

        >>> v='0b1111011'

        >>> print(int(v,2))

        123

十进制转换成二进制:v = 18 

        >>> v=18

        >>> print(bin(v))

        0b10010

八进制转换成十进制:v = “011” 

        >>> v = "011"

        >>> print(int(v,8))

        9

十进制转换成八进制:v = 30 

        >>> v=30

        >>> print(oct(v))

        0o36

十六进制转换成十进制:v = “0x12” 

        >>> v = "0x12"

        >>> print(int(v,16))

        18

十进制转换成十六进制:v = 87

        >>> v=87

        >>> print(hex(v))

        0x57

10、请编写一个函数实现将IP地址转换成一个整数。

如 10.3.9.12 转换规则为:

10           00001010

3            00000011

9            00001001

12           00001100

再将以上二进制拼接起来计算十进制结果:00001010 00000011 00001001 00001100 = ?

11、python递归的最大层数?

        理论上是1000左右

12、求结果:

v1 =1or3

v2 =1and3

v3 =0and2and1

v4 =0and2or1

v5 =0and2or1or4

v6 =0orFlaseand1

13、ascii、unicode、utf-8、gbk 区别?

            ASCII码  使用一个字节编码,所以它的范围基本是只有英文字母、数字和一些特殊符号 ,只有256个字符。

            Unicode  能够表示全世界所有的字节

            GBK  是只用来编码汉字的,GBK全称《汉字内码扩展规范》,使用双字节编码。

            UTF-8  是一种针对Unicode的可变长度字符编码,又称万国码

14、字节码和机器码的区别?

            机器码是电脑CPU直接读取运行的机器指令,运行速度最快,但是非常晦涩难懂,也比较难编写,一般从业人员接触不到。

            字节码是一种中间状态(中间码)的二进制代码(文件)。需要直译器转译后才能成为机器码。

15、三元运算规则以及应用场景?

        三元操作符是if-else的简化写法

16、列举 Python2和Python3的区别?

            简单的说,2是旧3是新,3是2的升级版,3完全高于2,2是时代的眼泪3是现在和未来,2逐渐被淘汰3用的人越来越多

        输入函数

            py2:input_raw()

            py3:input()

            1/2的结果

            py2:返回0

            py3:返回0.5,没有了int和long的区别

        编码

            py2:默认编码ascii

            py3:默认编码utf-8

        。。。。。。。。

17、用一行代码实现数值交换:

a = 1

b = 2

        a,b=b,a

18、Python3和Python2中 int 和 long的区别?

        python2有非浮点数准备的int和long类型。int类型最大值不能超过sys.maxint,而且这个最大值是平台相关的。可以通过在数字的末尾附上一个L来定义长整型,显然,它比int类型表示的数字范围更大。在python3里,只有一种整数类型int,大多数情况下,和python2中的长整型类似。

19、xrange和range的区别?

        xrange 用法与 range 完全相同,所不同的是生成的不是一个list对象,而是一个生成器。

20、文件操作时:xreadlines和readlines的区别?

        readlines() 读取文件所有内容,按行为单位放到一个列表中,返回list类型。

        xreadlines()返回一个生成器,来循环操作文件的每一行。循环使用时和readlines基本一样,但是直接打印就不同

21、列举布尔值为False的常见值?

        值为0的数

        空列表

        空字符串

        空元组

        空字典

22、字符串、列表、元组、字典每个常用的5个方法?

        字符串:find   查找是否存在;count 统计;split  切片;upper 小写转大写;lower  大写转小写

        列表:len  长度  ;append 新增;remove  删除;sort  排序;in  判断

        元组:元组与列表类似,不同之处在于元组的元素不能 修改。 元组使用小括号,列表使用方括号。元组的功能 = 列表不 修改的功能

        字典:字典.pop(键) 根据键,删除指定的值,并将此值返回;字典.clear() 清空字典里的键值对; 键 in 字典 如果键在字典中存在,返回True否则,返回 False; 字典.get(键,[默认值]) 通过dict提供的get方法,如果key不存在,可 以返回None,或者自己指定的值; len(字典)    计算字典元素个数,即键的总数

23、lambda表达式格式以及应用场景?

        代替一些简单的函数,使得代码看上去更简洁并且可读性高

        f = lambda x:pow(x,2)

        f(2)

24、pass的作用?

            1,空语句 do nothing

            2,保证格式完整

            3,保证语义完整

25、*arg和**kwarg作用

        允许我们在调用函数的时候传入多个实参

26、is和==的区别       

        is也被叫做同一性运算符,这个运算符比较判断的是对象间的唯一身份标识,也就是id是否相同。

        ==是python标准操作符中的比较操作符,用来比较判断两个对象的value(值)是否相等

27、简述Python的深浅拷贝以及应用场景?

        导入模块:import copy

        浅拷贝:copy.copy

        深拷贝:copy.deepcopy

        字面理解:浅拷贝指仅仅拷贝数据集合的第一层数据深拷贝指拷贝数据集合的所有层

28、Python垃圾回收机制?

        引用计数:当一个对象的引用被创建或者复制时,对象的引用计数加1;当一个对象的引用被销毁时,对象的引用计数减1,当对象的引用计数减少为0时,就意味着对象已经再没有被使用了,可以将其内存释放掉。

        标记-清除:1. 寻找跟对象(root object)的集合作为垃圾检测动作的起点,跟对象也就是一些全局引用和函数栈中的引用,这些引用所指向的对象是不可被删除的;2. 从root object集合出发,沿着root object集合中的每一个引用,如果能够到达某个对象,则说明这个对象是可达的,那么就不会被删除,这个过程就是垃圾检测阶段;3. 当检测阶段结束以后,所有的对象就分成可达和不可达两部分,所有的可达对象都进行保留,其它的不可达对象所占用的内存将会被回收,这就是垃圾回收阶段。(底层采用的是链表将这些集合的对象连接在一起)

        分代回收:将系统中的所有内存块根据其存活时间划分为不同的集合,每一个集合就成为一个“代”,Python默认定义了三代对象集合,垃圾收集的频率随着“代”的存活时间的增大而减小。也就是说,活得越长的对象,就越不可能是垃圾,就应该减少对它的垃圾收集频率。那么如何来衡量这个存活时间:通常是利用几次垃圾收集动作来衡量,如果一个对象经过的垃圾收集次数越多,可以得出:该对象存活时间就越长。

29、Python的可变类型和不可变类型?

        Python的每个对象都分为可变和不可变,主要的核心类型中,数字、字符串、元组是不可变的,列表、字典是可变的。

30、求结果:

v = dict.fromkeys(['k1','k2'],[])

v[‘k1’].append(666)

print(v)

            {'k2': [666], 'k1': [666]}

v[‘k1’] =777

print(v)

        {'k2': [666], 'k1': 777}

31、求结果:

32、列举常见的内置函数?

        abs() 函数返回数字的绝对值。

        bool() 函数用于将给定参数转换为布尔类型,如果没有参数,返回 False。

        dict() 函数用于创建一个字典。

         dir() 函数不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。

33、filter、map、reduce的作用?

        filter,迭代器,把符合要求的值列出来

        map,把对参数的操作就过列出来

        reduce把一个函数作用在一个序列[x1, x2, x3...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算

34、一行代码实现9*9乘法表

        print('\n'.join([''.join(['%s*%s=%-2s'% (y,x,x*y)foryinrange(1,x+1)])forxinrange(1,10)]))

35、如何安装第三方模块?以及用过哪些第三方模块? 

        pip install 模块名        pymysql      unidecode,ascii和Unicode文本转换函数。   

36、至少列举8个常用模块都有那些?

        time;     datetime;     random;     os;    pickle;     sys;    hashlib;   re

37、re的match和search区别?

        match()函数只检测RE是不是在string的开始位置匹配,

         search()会扫描整个string查找匹配;

38、什么是正则的贪婪匹配?

        正则表达式一般趋向于最大长度匹配,也就是所谓的贪婪匹配

39、求结果: 

a. [ i % 2 for i in range(10) ]     ======》[0, 1, 0, 1, 0, 1, 0, 1, 0, 1]

b. ( i % 2 for i in range(10) )  ====== 》 一个迭代器对象

40、求结果:

 a. 1 or 2  ===========》1

b. 1 and 2   =============》 2

 c. 1 < (2==2)   ========》 False

d. 1 < 2 == 2   =========》True

41、def func(a,b=[]) 这种写法有什么坑?

            函数的第二个默认参数是一个list,当第一次执行的时候实例化了一个list,第二次执行还是用第一次执行的时候实例化的地址存储

42、如何实现 “1,2,3” 变成 [‘1’,’2’,’3’] ?

43、如何实现[‘1’,’2’,’3’]变成[1,2,3] ?

            a=['1','2','3']

            [  int(i) for i in a]

44、比较: a = [1,2,3] 和 b = [(1),(2),(3) ] 以及 b = [(1,),(2,),(3,) ] 的区别?

        a = [1,2,3]就是一个普通列表

        b = [(1),(2),(3) ] 

        b = [(1,),(2,),(3,) ]   包含一个个元组的列表


45、如何用一行代码生成[1,4,9,16,25,36,49,64,81,100] ?

        [ i*i for i in range(1,11)]

46、一行代码实现删除列表中重复的值 ?

        list(set([列表]))

47、如何在函数中设置一个全局变量 ?

        在一个函数中用global声明一个变量

48、logging模块的作用?以及应用场景?

        记录程序运行情况的日志功能.

        用户登录

49、请用代码简答实现stack 。

class Stack(object):

    def__init__(self):

        self.stack = []

    defpush(self, value):# 进栈        self.stack.append(value)

    defpop(self):#出栈if self.stack:

            self.stack.pop()

        else:

            raiseLookupError(‘stack is empty!‘)

    defis_empty(self):# 如果栈为空return bool(self.stack)

    def top(self):

        #取出目前stack中最新的元素returnself.stack[-1]

50、常用字符串格式化哪几种?

            print('hello %s and %s'%(df,another df))

            print('hello {} and {}'.format{df,another df})

51、简述 生成器、迭代器、可迭代对象 以及应用场景?

        生成器:一边循环一边计算的机制。应用场景:不想同一时间将所有计算出来的大量结果集分配到内存当中

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

        可迭代对象:能作用于 for 循环的都是 可迭代对象

52、用Python实现一个二分查找的函数。

53、谈谈你对闭包的理解?

            在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的引用。这样就构成了一个闭包。

54、os和sys模块的作用?

             os模块负责程序与操作系统的交互,提供了访问操作系统底层的接口

            sys模块负责程序与python解释器的交互,提供了一系列的函数和变量,用于操控python的运行时环境。

55、如何生成一个随机数?

        import  random

        random.randint(1,99)

56、如何使用python删除一个文件?

        import os

        os.remove(path)

57、谈谈你对面向对象的理解?

    具有三大特性:封装,继承和多态。

    将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性

58、Python面向对象中的继承有什么特点?

        子类继承父类,提高代码的重用性        

59、面向对象深度优先和广度优先是什么?

60、面向对象中super的作用?

             是用来解决多重继承问题

61、是否使用过functools中的函数?其作用是什么?


62、列举面向对象中带爽下划线的特殊方法,如:__new__、__init__

        __str__(self方法):str方法中含有什么,则return什么东西,print(对象)就返回什么东西

        __dic__ :获取对象中封装的所有字段,用__dic__可以取到,并存放在字段中

        __add__(self, other):对象相加直接执行

63、如何判断是函数还是方法?

        函数是封装了一些独立的功能,可以直接调用

        方法和函数类似,同样封装了独立的功能,但是方法是需要通过对象来调用的,表示针对这个对象要做的操作,使用时采用点方法

64、静态方法和类方法区别?

        静态方法就是一个普通的方法,与类和对象无关

        类方法就是JAVA里面的类方法,属于类,被各个对象共享

65、列举面向对象中的特殊成员以及应用场景

        __doc__ 描述类的信息

         __call__ 对象后面加括号,触发执行

        __dict__ 查看类或对象中的所有成员

66、1、2、3、4、5 能组成多少个互不相同且无重复的三位数

        list1 = []

        for a in range(1,6):

            for b in range(1,6):

                for c in range(1,6):

                    if a!=b and a!=c and b!=c:

                        list1.append(a+b+c)

        print(len(list1))=============》60


67、什么是反射?以及应用场景?

68、metaclass作用?以及应用场景?

69、用尽量多的方法实现单例模式。

70、装饰器的写法以及应用场景。

71、异常处理写法以及如何主动跑出异常(应用场景)

72、什么是面向对象的mro

73、isinstance作用以及应用场景?

74、写代码并实现:

Given an arrayofintegers,returnindicesofthe two numbers such that they add up to a specific target.You may assume that each input would

have exactly one solution,andyou maynotuse the same element twice.

Example:

Given nums = [2,7,11,15], target =9,

Because nums[0] + nums[1] =2+7=9,

return[0,1]

75、json序列化时,可以处理的数据类型有哪些?如何定制支持datetime类型?

76、json序列化时,默认遇到中文会转换成unicode,如果想要保留中文怎么办?

77、什么是断言?应用场景?

78、有用过with statement吗?它的好处是什么?

79、使用代码实现查看列举目录下的所有文件。

80、简述 yield和yield from关键字。


CPython

>>> v=18

>>> print(bin(v))

0b10010


*arg和**kwarg作用


filter,迭代器,把符合要求的值列出来

在一个外函数中定义了一个内函数,内函数里运用了外函数的临时变量,并且外函数的返回值是内函数的引用。这样就构成了一个闭包。

 os模块负责程序与操作系统的交互,提供了访问操作系统底层的接口

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,126评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,254评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,445评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,185评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,178评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,970评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,276评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,927评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,400评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,883评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,997评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,646评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,213评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,204评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,423评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,423评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,722评论 2 345

推荐阅读更多精彩内容

  • 用于python面试整理,主要来源于http://www.cnblogs.com/skiler/p/6952707...
    十里江城阅读 2,324评论 0 13
  • 1.python字符串格式化中,%s和.format的主要区别是什么 python用一个tuple将多个值传递给模...
    _Caesar阅读 6,788评论 11 261
  • 你争脱了冬的手 奔向春的开头 不怕冬的寒冷 在残雪中露头 极力的吐着嫩芽 把大地变绿 你不是为美好的春色 而是为了...
    笑傲江湖之秋雨阅读 213评论 0 4
  • 学校为了丰富我们的校园生活组织了很多针对于新生的比赛。新生篮球赛、书法大赛、辩论赛、演讲比赛、拔河比赛… 很多学生...
    高小天儿呀阅读 224评论 0 1
  • ``` html: 你自己的页面内容 ``` css ``` @media only screen and (de...
    yyshang阅读 256评论 0 0