当前位置:首页 > 服务端 > Python基础面试题

Python基础面试题

2022年08月05日 20:42:32服务端6

python基础

  1. 列举你了解的python2和python3的区别

    print#py2不加括号
    
    py2中1/2返回0
    py3中返回0.5
    
    py2默认ASCII编码
    py3默认utf-8编码
    
    py2中unicode类型表示字符串序列,str类型表示字节序列
    py3中str类型表示字符串序列,byte类型表示字节序列
    
    py2中函数用global关键字声明某个变量为全局变量,无法实现在嵌套函数中给一个变量声明为局部变量
    py3新增了nonlocal关键字
    
    
  2. 如何实现字符串的反转?如:name="张全蛋"请反转为name= "蛋全张"

    name = "张全蛋"
    name[::-1]
    
  3. 文件操作时:xreadlines和readlines的区别?

    readlines()把文件的全部内容读到内存,并解析成一个list,当文件的体积很大时要占用很多内存
    
    xreadlines()返回一个iter(file)迭代器,在python2.3之后已经不再推荐使用这种表示方法了,直接使用for循环迭代文件
    
  4. is和==的区别

    is比较的是id,==比较的是值

  5. 现有字典 dict={‘a’:24,‘g’:52,‘i’:12,‘k’:33}请按字典中的 value 值进行排序?

    dic={'a':24,'g':52,'i':12,'k':33}
    a = sorted(dic.items(),key= lambda x:x[1])
    print(dict(a))
    '''
    语法
    
    sorted 语法:
    
    sorted(iterable, cmp=None, key=None, reverse=False)
    参数说明:
    
    iterable -- 可迭代对象。
    cmp -- 比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。
    key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
    reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。
    返回值
    
    返回重新排序的列表。
    '''
    
  6. 什么是可变类型、不可变类型

    可变不可变指的是内存中的值是否可以被改变。不可变类型指对象所在的内存块里面的值不可以被改变,有数字、字符串、元组;可变类型则是可以被改变的,有列表、字典。

  7. 请按list1中元素的age由大到小排序

    list1 = [{'name':'a','age':20},{'name':'b','age':30},{'name':'c','age':25}]
    
    sorted(list1,key=lambda x:x['age'],reverse=True)
    
  8. 下面代码数据的结果是什么?

    list = ['a', 'b', 'c', 'd', 'e']
    print(list[10:])
    
    '''
    下面的代码将输出[],不会产生IndexError错误。就像所期望的那样,尝试用超出成员的个数的index
    
    来获取某个列表的成员。例如,尝试获取list[10]和之后的成员,会导致IndexError。'''
    
  9. 写一个列表生成式,产生一个公差为11的等差数列

a = [i*11 for i in range(10) ]
print(a)
  1. 给定两个列表,怎么找出他们相同的元素和不同的元素?

    1. list1 = [1,2,3]
    2. list2 = [3,4,5]
    3. set1 = set(list1)
    4. set2 = set(list2)
    5. print(set1&set2)
    6. print(set1^set2)
    
  2. 请写出一段Python代码实现删除一个list里面的重复元素?

    1. l1 = ['b','c','d','b','c','a','a']
    2. l2 = list(set(l1))
    

    如果想要保持他们原来的顺序用list类的sort方法:

    1. l1 = ['b','c','d','b','c','a','a']
    2. l2 = list(set(l1))
    3. l2.sort(key=l1.index)#按照索引排个序
    4. print(l2)
    

    还可以用遍历

    1. l1 = ['b', 'c', 'd', 'b', 'c', 'a', 'a']
    2. l2 = []
    3. for i in l1:
    4. 	if not i in l2:
    5. 		l2.append(i)
    6. print(l2)
    
  3. 有一个list["This","is","a","Boy","!"],所有元素都是字符串,对他进行大小写 无关的排序

    l1 = ['This','is','a','Boy','!']
    print(sorted(l1))
    
  4. 列举字符串、列表、元组、字典每个常用的5个方法?

    字符串:replace、strip、split、rsplit、upper、lower、join、reverse。。。
    
    列表:append、pop、insert、remove、sort、count、index
    
    元组:len、index、count、dir
    
    字典:get、keys、items、pop、values、popitems、clear、update。。。
    
  5. 什么是反射以及应用场景

    在绝大多数语言当中都有反射机制的存在,可以用字符串的方式去访问对象的属性,调用对象的方法(但是不能去访问方法),python中一切皆对象,都可以使用反射
    
  6. 简述深拷贝浅拷贝

    copy():浅拷贝指仅仅拷贝数据集合的第一层数据
        
    deepcopy():深拷贝指拷贝数据集合的所有层
    
  7. 1 < (2 == 2)1 < 2 == 2的结果分别是什么, 为什么

print(1 < (2 == 2)) --> False
print(1 < 2 == 2) --> True
```

  1. filter、map、reduce的作用

    # 答案
    filter(func, iterable) : 通过判断函数fun,筛选符合条件的元素。 
    filter(lambda x: x>3, [1,2,3,4,5,6]) 
    >>> <filter object at 0x0000000003813828>
    
    map(func, *iterable) : 将func用于每个iterable对象。 map(lambda a,b: a+b, 
    map(lambda a,b: a+b, [1,2,3,4], [5,6,7])
    >>> [6,8,10]
                           
    reduce(): 函数会对参数序列中元素进行累积。
    reduce(lambda x, y: x+y, [1,2,3,4,5])  # 使用 lambda 匿名函数                                                
    >>> 15
    
  2. 什么是闭包?

    闭包函数(closure function)指的是定义在一个函数内部的函数,被外层函数包裹着,其特点是可以访问到外层函数中的名字,如inner函数就是一个闭包函数。
    
    def outer():
        num = 1
        def inner():
            print(num) # 内层函数中不存在num 但可以访问到外层的num
        return inner # 基于函数对象的概念我们可以将内层函数返回到外界使用,从而打破函数调用的层级限制,但无论在何处调用,作用域的嵌套关系都是以定义阶段为准的,所以外界得到的不仅仅是一个函数对象(inner),在该函数外还包裹了一层作用域,这使得该函数无论在何处调用,都是访问自己外层包裹的作用域中的名字num
    
    func = outer() # func == inner  func指向的是inner的内存地址,但是func本身确实一个全局变量,可以在任意位置调用func,但无论在何处调用func,都需要按照定义阶段作用域的嵌套关系去查找名字
    
    num=1000
    func() #输出结果:1 
    
    
  3. 请实现一个装饰器,限制该函数被调用的频率,如10秒一次

    import time
    def time_pay(func):
        def inner(*args,**kwargs):
            for line in range(10):
            print(line + 1)
            time.sleep(1)
            res = func(*args,**kwargs)
            return res
        return inner
    
    
  4. 解释生成器与函数的不同,并实现和简单使用generator

    '''
    生成器和函数的主要区别在于函数return a value,生成器yield a value,同时标记或记忆point of the yield以便在下次调用时从标记点恢复执行,yield使函数转换成生成器,而生成器反过来返回迭代器。
    '''
    
  5. 给出下面代码片段的输出

    def say_hi(func):
        def wrapper(*args, **kwargs):
            print("HI")
            ret = func(*args, **kwargs)
            print("BYE")
            return re
        return wrapper
    
    def say_yo(func):
        def wrapper(*args, **kwargs):
            print("YO")
            return func(*args, **kwargs)
        return wrapper
    
    @say_hi
    @say_yo
    def func():
        print("ROCK & ROLL")
    func()
    
    # 答案
    '''
    HI
    YO
    ROCK & ROLL
    BYE
    '''
    
  6. 谈谈你对闭包的理解

    '''闭包(closure)是函数式编程的重要的语法结构。闭包也是一种组织代码的结构,它同样提高了代码的可重复使用性。
    当一个内嵌函数引用其外部作作用域的变量,我们就会得到一个闭包. 总结一下,创建一个闭包必须满足以下几点:
    
    必须有一个内嵌函数
    内嵌函数必须引用外部函数中的变量
    外部函数的返回值必须是内嵌函数'''
    
  7. 为什么函数名字可以当参数使用?

    python中一切皆对象,函数名在内存中的空间,也是一个对象。

  8. 递归函数停止的条件?

    递归函数终止的条件一般定义在递归函数内部,在递归调用前要做一个条件判断,根据判断的结果选择是继续调用自身还是return,终止递归。

    终止递归的条件:

    1)判断递归的次数是否达到某一限定值

    2)判断运算的结果是否达到某个范围,根据设计的目的来选择

  9. getattr(object, name[,default]) 函数:

    获取对象object的属性或者方法,如果存在则打印出来,如果不存在,打印默认值,默认值可选。
    注意:如果返回的是对象的方法,则打印结果是:方法的内存地址,如果需要运行这个方法,可以在后
    面添加括号()。

    1. functiondemo = function_demo()
    2. getattr(functiondemo, 'name') #获取name属性,存在就打印出来--- demo
    3. getattr(functiondemo, "run") #获取run方法,存在打印出 方法的内存地址---<bound method function_demo.run of <__main__.function_demo object at 0x10244f320>>
    4. getattr(functiondemo, "age") #获取不存在的属性,报错如下:
    5. Traceback (most recent call last):
    6.   File "/Users/liuhuiling/Desktop/MT_code/OpAPIDemo/conf/OPCommUtil.py", line 39, in <module>
    7.     res = getattr(functiondemo, "age")
    8. AttributeError: 'function_demo' object has no attribute 'age'
    9. getattr(functiondemo, "age", 18)  #获取不存在的属性,返回一个默认值
    
  10. setattr(object,name,values)函数:

    给对象的属性赋值,若属性不存在,先创建再赋值

    1.class function_demo(object):
    2.    name = 'demo'
    3.    def run(self):
    4.        return "hello function"
    5.functiondemo = function_demo()
    6.res = hasattr(functiondemo, 'age')  # 判断age属性是否存在,False
    7.print(res)
    8.setattr(functiondemo, 'age', 18 )  #对age属性进行赋值,无返回值
    9.res1 = hasattr(functiondemo, 'age') #再次判断属性是否存在,True
    
  11. 综合使用:

    1.class function_demo(object):
    2.    name = 'demo'
    3.    def run(self):
    4.        return "hello function"
    5.functiondemo = function_demo()
    6.res = hasattr(functiondemo, 'addr') # 先判断是否存在if res:
    7.    addr = getattr(functiondemo, 'addr')
    8.    print(addr)else:
    9.    addr = getattr(functiondemo, 'addr', setattr(functiondemo, 'addr', '北京首都'))
    10.    #addr = getattr(functiondemo, 'addr', '美国纽约')
    11.    print(addr)
    
  12. 什么是lambda函数? 有什么好处?

    lambda 函数是一个可以接收任意多个参数(包括可选参数)并且返回单个表达式值的函数
    1、lambda 函数比较轻便,即用即仍,很适合需要完成一项功能,但是此功能只在此一处使用,
    连名字都很随意的情况下;
    2、匿名函数,一般用来给 filter, map 这样的函数式编程服务;
    3、作为回调函数,传递给某些应用,比如消息处理

  13. 请简述标准库中functools.wraps的作用

    # 答案
    '''
    Python装饰器(decorator)在实现的时候,有一些细节需要被注意。例如,被装饰后的函数其实已经是另外一个函数了(函数名等函数属性会发生改变)。这样有时候会对程序造成一些不便,例如笔者想对flask框架中的一些函数添加自定义的decorator,添加后由于函数名和函数的doc发生了改变,对测试结果有一些影响。
    
    所以,Python的functools包中提供了一个叫wraps的decorator来消除这样的副作用。写一个decorator的时候,最好在实现之前加上functools的wrap,它能保留原有函数的名称和docstring。
    '''
    
  14. 说说python中装饰器、迭代器的用法;描述下dict的items()方法与iteritems()方法的不同;

    # 答案
    '''
    装饰器是指对函数执行过程,做一些扩展,甚至可以更改本身函数的执行迭代器是指遵循迭代器协议的对象,这类对象在被for循环时,每次迭代生成下一个项,不用一开始就生成整个列表在python3中不存在iteritems,items方法返回可迭代对象在python2中items()返回[(key,value)]的列表对象,iteritems()返回迭代器对象,iteritems()循环时不可以增删dict的内容
    '''
    

设计模型:单例模式、工厂模式

面试的时候原理性的东西,非常重要

作者:ylpb
来源链接:https://www.cnblogs.com/ghylpb/p/12684434.html

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/server/17957.html

分享给朋友:

“Python基础面试题” 的相关文章

MySQL面试有这一篇就够了

MySQL面试有这一篇就够了

MySQL面试常见知识点 1、 MySQL常用的存储引擎有什么?它们有什么区别? InnoDB InnoDB是MySQL的默认存储引擎,支持事务、行锁和外键等操作。 MyISAM MyISAM是M...

一文高效图解二叉树面试题

一文高效图解二叉树面试题

点击蓝色“码出高效面试的程序媛”关注我, 了解更多技术流行面试题 二叉树,搜索二叉树,是算法面试的必面题。聊聊面试点: 一、树 & 二叉树 树的组成为节点和边,节点用来储存元素。节点组成为根节点、父节点和子节点。 如图:树深 leng...

Java面试题:Error和Exception有什么区别?

[ Error表示系统级的错误和程序不必处理的异常,是恢复不是不可能但很困难的情况下的一种严重问题;比如内存溢出,不可能指望程序能处理这样的情况;Exception表示需要捕捉或者需要程序进行处理的异常,是一种设计或实现问题;也就是说,它表示如果程序运行正常,从不会发生的...

看完这篇Exception 和 Error,和面试官扯皮就没问题了

看完这篇Exception 和 Error,和面试官扯皮就没问题了

在 Java 中的基本理念是 结构不佳的代码不能运行,发现错误的理想时期是在编译期间,因为你不用运行程序,只是凭借着对 Java 基本理念的理解就能发现问题。但是编译期并不能找出所有的问题,有一些 NullPointerException 和 ClassNotFoundExceptio...

59面试常问:MySQL索引是如何提高查询效率的呢?(MySQL面试第二弹)

59面试常问:MySQL索引是如何提高查询效率的呢?(MySQL面试第二弹)

  About MySQL MySQL(读作/maɪ ˈsiːkwəl/“My Sequel”)是一个开放源码的关系数据库管理系统,原开发者为瑞典的MySQL AB公司,目前为Oracle旗下产品。 被甲骨文公司收购后,自由软件社群们...

面试题:SpringBoot 自动装配原理

1. @SpringBootApplication注解 首先,我们都知道SpringBoot程序的入口是通过@SpringBootApplication注解修饰的一个类,例如: @SpringBootApplication public cl...

近期安卓与IOS招聘面试有感

版权声明:本文出自汪磊的博客,转载请务必注明出处。 一、你总是想一步登天,却不知道路是一步步走出来的 大概是放年假前一个月开始招聘吧,陆陆续续到目前为止安卓面试10几个,IOS面试了15个左右,本以为很好招聘的,没想到没有一个合适的,要求本不高只想基础扎实一些,但是就这一条...

SpringBoot面试题及答案140道(2021年最新)

工作5年,处于找工作中ing。今年10月份刚刚整理出来的SpringBoot面试题,时间比较赶就没有按照模块分类排序了。总而言之,顺序比较乱,希望大家耐着性子 看。如果实在介意,评论告知,我会视情况作修改的。另外如果大家觉得我找的SpringBoot面试题答案不够清晰,欢迎私信或...

分布式专题|肝了这篇,再也不怕面试官问BIO、NIO、AIO了,我先肝了,你随意

分布式专题|肝了这篇,再也不怕面试官问BIO、NIO、AIO了,我先肝了,你随意

IO模型指的是在网络数据传输过程中,使用什么通道去发送和接收数据,我们常见的有BIO、NIO、AIO(NIO2.0),我接下来会对这些进行详细的介绍 同步/异步/阻塞/非阻塞 到底是什么意思? 同步/异步 指的是你去调用一个方法,如...

java 集合hashmap hashset arraylist 详解以及常见面试题

java 集合hashmap hashset arraylist 详解以及常见面试题

   今天复习了一下自认为java 中很重要的一部分集合,这篇文章主要从底层源码进行分析这几种集合的区别与联系,他们的用法不多讲,用法不难;大多数东西我也是从各位大神的博客上或者书上扒下来的,小菜鸟在复习,写下来主要是一:是为了想留下点东西 二:我发现在写的过程中我...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。