python基础篇

Python面试重点(基础篇)

注意:只有必答题部分计算分值,补充题不计算分值。

第一部分 必答题(每题2分)

  1. 简述列举了解的编程语言及语言间的区别?

    编译型:只翻译一次(代表语言C)
    	优点:执行速度快
    	缺点:开发速度慢
    解释型:逐行翻译(代表语言python)
    	优点:开发速度快
    	缺点:执行速度慢
    
  2. 列举Python2和Python3的区别?

    1.python解释器默认编码(python2与python3的区别一)
    	python2 解释器默认编码:ascii
    	python3 解释器默认编码:utf-8
    2.输入(python2与python3的区别二)
    	python2:name=raw_input('请输入姓名')
    	python3:name=input('请输入你的姓名')
    3.输出(python2与python3的区别三)
    	python2:print "你好"
    	python3:print("你好")
    字符串不同
    	py2中有两种数据类型:unicode    str
    	py3中有两种数据类型:str		   bytes
    	
    	py2中的str,就是py3中的bytes
    	py2中的unicode,就是py3中str
    	例如:
    		py2:
    			val = u"changxinzuoxia" => unicode
    			val = "changxinzuoxia"  => str
    		py3:
    			val = "chanxin"			=> str
    			val = b"chanxin"        => bytes
    
    range:
    	py2: range    xrange
    	py3:		  range 
    	
    类型:
    	py2:
    		int		long
    	p3:
    				int
    字典:
    	v = {"k1":1,"k2":2}
    	py2,立即将数据放到内存。
    		v.keys(),得到列表
    		v.values(),得到列表
    		v.items(),得到列表
    	py3:
    		v.keys(),迭代器
    		v.values(),迭代器
    		v.items(),迭代器
    map、filter
    	py2: 立即得到结果
    	py3: 迭代器
    	
    类:
    	py2: 经典类、新式类(直接或间接继承object)
    	
    	py3: 新式类
    
  3. 看代码写结果

    v1 = 1 or 2						1
    v2 = 3 and 7 or 9 and 0			7
    
  4. 比较以下值有什么不同?

    v1 = [1,2,3]
    v2 = [(1),(2),(3)]
    v3 = [(1,),(2,),(3,)]
    
    v1 是普通列表,元素为int
    v2 是列表里面加了小括号,和v1一样,int类型
    v3 列表嵌套元祖,元组的元素为int
    
  5. 用一行代码实现数值交换。

    a = 1
    b = 2
    a,b = b,a
    
  6. Python中单引号、双引号、三引号的区别?

    python单引号,双引号,三引号都是字符串且可以进行转义,唯一的差别就是三引号 可以显示多行。
    
  7. is和==的区别?

    is是判断内存地址是否一致
    ==是两者的值是否一样
    
  8. python里如何实现tuple和list的转化?

    tuple(list)     # 列表转元组
    list(tuple)     # 元组转列表
    
  9. 如何实现字符串 name='老男孩'的反转?

    name = "老男孩"
    name = name[::-1]
    
    
  10. 两个set如何获取交集、并集、差集?

    # 交集
    set(a)&set(b)
    # 并集
    set(a)|set(b)
    # 差集
    set(a)-set(b)
    
    
  11. 那些情况下, y != x - (x-y)会成立?

    x,y是两个不相等的非空集合
    
    
  12. Python中如何拷贝一个对象?

    # copy模块
    [:]
    copy.copy() # 浅拷贝
    copy.deepcopy() # 深拷贝
    
    
  13. 简述 赋值、浅拷贝、深拷贝的区别?

    在Python中拷贝的目的就是要再创建一份,拷贝都是针对可变类型而言。 
    例如:
    	data = [1,2,[11,22]]
    	
    浅拷贝, 只拷贝第一层.
    	new_data = copy.copy(data)
    	相当于:[1拷贝一份,2拷贝一份,[11,22]用原来的内存地址] 理论
    	相当于:[1,2,[11,22]用原来的内存地址] 实际
    	
    深拷贝,所有层都拷贝。
    	new_data = copy.deepcopy(data)
    	相当于:[1,2,[11,22]重新拷贝一份]
    	
    总结:Python中所有的拷贝都是针对可变类型而言,浅拷贝就是指拷贝数据的第一层,遇到可变类型只能拷贝他的内存地址,数据不会重新创建。 而对于深拷贝,会将所有的可变类型数据都拷贝一份。
    
    
    
  14. pass的作用?

    占位符
    
    
  15. 阅读代码写结果。

    import copy
    a = [1,2,4,5,['b','c']]
    b = a
    c = copy.copy(a)
    d = copy.deepcopy(a)
    
    a.append(5)
    a[4].append('d')
    
    print(b)
    # [1,2,4,5,['b','c','d'],5]
    print(c)
    # [1,2,4,5,['b','c','d']]
    print(a)
    # [1,2,4,5,['b','c','d'],5]
    
    
  16. 用Python实现9 * 9 乘法表。

    result = "\n".join([" ".join([ "%s*%s=%s " %(i,j,i*j) for j in range(1,i+1)]) for i in range(1,10)])
    
    
  17. 用Python显示一个斐波那契数列。

    # 1	1 2 3 5 8 13 21 ...
    
    def fib(num):
        if num in [1,2]:
            return 1
        return fib(num-1) + fib(num-2)
    
    
    def fib(num):
        if num in [1,2]:
            return 1
        first = 1
        second = 1
        for i in range(3,num+1):
            first,second =second,first + second
        return second 
    
    
  18. 如何删除列表中重复的值?

    list(set(list))
    
    
  19. 一个大小为100G的文件etl_log.txt, 要读取文件中的内容, 写出具体过程代码?

    with open(r'etl_log.txt','r',enconding='utf-8') as f:
        for i in f:
            info = f.readlines()
            print(info)
    
    
  20. a = dict(zip(("a","b","c","d","e"),(1,2,3,4,5))) 请问a是什么?

    a是字典,
    a = {'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
    
    
  21. lambda关键字的作用?

    定义匿名函数,自带for循环
    
    
  22. *arg**kwarg作用?

    *args 接收多余的位置参数
    **kwargs 接收多余的关键字参数
    
    
  23. 如何在函数中设置一个全局变量 ?

    global 全局变量
    
    
  24. filter、map、reduce的作用?

    filter  过滤
    map     映射
    reduce  累计算
    
    
  25. 什么是匿名函数?匿名函数有什么作用?

    lambda函数就是匿名函数
    作用:简化代码
    
    
  26. Python递归的最大层数?

    官方:1000
    实测:995-998
    
    
  27. 什么是迭代器?什么是可迭代对象?

    迭代器:内部具有 __next__方法,获取下一个值,只能前进不能倒退。 
    可迭代对象:内部具有 __iter__ 方法且返回一个迭代器。 
    	class Foo:
    		def __iter__(self,*args,**kwargs):
    			return iter([11,22,33])
    		
    	obj = Foo()
    	for item in obj:
    		print(item)
    
    
  28. 什么是生成器?

    具有yield的关键字就是生成器,生成器的本质是迭代器
    装饰器的本质是闭包,在不修改源代码及其调用方式的前提下,外增加功能
    
    
  29. 什么是装饰器及应用场景?

    登录,类
    
    
  30. 什么是反射及应用场景?

    通过字符串操作对象的方法和属性
    
    判断用户的输入
    
    
  31. 写一个普通的装饰器。

    def warpper(func):
        def inner():
            print("111")
            func()
            print("222")
        return inner
    
    @warpper
    def func():
        print("被装饰的函数")
    
    
  32. 写一个带参数的装饰器。

    def func_z(func):
        def inner(*args,**kwargs):
            print("我是装饰器,装饰你了啊")
            ret = func(*args,**kwargs)
            return ret
        return inner
    
    @func_z
    def func_b(*args,**kwargs):
        print("我是被装饰的函数,来啊,你过来啊")
    
    
  33. 求结果

    def num():
      return [lambda x:i*x for i in range(4)]
    print([m(2) for m in num()])
    
    # [6,6,6,6]
    
    
  34. def(a, b=[])这种写法有什么陷阱?

    默认参数可变,容易在后面引用的时候,读取到之前使用的值,因为列表的内存地址没有变。
    
    
  35. 看代码写结果

    def func(a,b=[]):
        b.append(a)
    	return b
    
    v1 = func(1)
    v2 = func(2,[10,20])
    v3 = func(3)
    print(v1,v2,v3)
    
    """
    [1,3]
    [10,20,2]
    [1,3]
    """
    
    
  36. 看代码写结果

    def func(a,b=[]):
        b.append(a)
    	return b
    
    v1 = func(1)
    print(v1)
    # [1]
    v2 = func(2,[10,20])
    print(v2)
    # [10,20,2]
    v3 = func(3)
    print(v3)
    # [1,3]
    
    
  37. 请编写一个函数实现将IP地址转换成一个整数。

    如 10.3.9.12 转换规则为:
            10            00001010
             3            00000011
             9            00001001
            12            00001100
            
    再将以上二进制拼接起来计算十进制结果:00001010 00000011 00001001 00001100 = ?
    
    
  38. 请查找一个目录下的所有文件(可能存在文件嵌套)。

    import os
    os.listdir()
    
    
  39. 求结果

    import math
    print (math.floor(5.5))
    
    #5
    
    
  40. 是否使用过functools中的函数?其作用是什么?

    from functools import reduce
    reduce   累计算
    
    
  41. re的match和search区别?

    match:  从开头进行查找,查找到就停止,找不到返回None
    search: 查找全文,找到就停止,找不到就返回None
    
    
  42. 用Python匹配HTML tag的时候,<.>和<.?>有什么区别?

    .* 贪婪匹配 匹配多个任意字符
    .*? 非贪婪 只匹配一次
    
    
  43. 如何生成一个随机数?

    import random
    
    random.random()
    
    
  44. super的作用?

    按照mro的顺序进行继承
    
    
  45. 双下划线和单下划线的区别?

    双线划线:__ 是Python中强制定义为私有
    单下划线:_  是程序员约定的私有方法
    
    
  46. @staticmethod和@classmethod的区别?

    
    
  47. 实现一个单例模式(加锁)。

    
    
  48. 栈和队列的区别?

    栈:先进后出
    队列:先进先出
    
    
  49. 以下代码输出是什么? 请给出答案并解释。

    class Parent(object):
        x = 1
    
    class Child1(Parent):
        pass
    
    class Child2(Parent):
        pass
    
    print Parent.x, Child1.x, Child2.x
    
    Child1.x = 2
    print Parent.x, Child1.x, Child2.x
    
    Parent.x = 3
    print Parent.x, Child1.x, Child2.x
    
    
  50. 参考下面代码片段

    class Context:
        pass
    
    with Content() as ctx:
        ctx.do_something()
    请在Context类下添加代码完成该类的实现
    
    

第二部分 可选题

  1. 如何获取列表中第二大的值?
  2. 简述Python内存管理机制。
  3. 简述Python的垃圾回收机制。
  4. 请用两个队列来实现一个栈。
  5. 请用Python实现一个链表。
  6. 请用Python实现链表的逆转。
posted @ 2020-02-26 11:58  何佳龙  阅读(161)  评论(0编辑  收藏  举报