Python题

第一部分必答题

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

    编程语言分为:解释型语言和编译型语言
    解释型语言:程序不需要编译,程序在运行时才编译成程序语言,每执行一次都需要翻译一次
    编译型语言:程序执行之前需要一个专门的编译过程,把程序编译成机器语言的文件,运行时不需要重新编译,直接使用编译的结果
    
  2. 列举python2和pythoon3的区别?

    1.python2中的print为class,在打印内容时不需要加括号,而python3中的print为函数,打印内容时需要加上括号。
    2.python3中input得到的为str型,python2中input得到的为int型,raw_input才得到的为str型。
    3.python3中/表示真除,%表示取余,//结果取整;python2中带上小数点/表示真除,%表示取余,//结果取整。
    4.python3中使用range,和python2中的xrange,用法都相同,但是返回类型不同,xrange生成的是一个生成器,range只是一个列表。
    
  3. 看代码写结果?

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

    v1 = [1,2,3]             # 单纯的只是一个列表
    v2 = [(1),(2),(3)]       # 该数据类型也只是一个列表
    v3 = [(1,),(2,),(3,)]    # v3是一个列表中套着元组的的数据类型
    
  5. 用一行代码事项数值交换。

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

    # 单引号、双引号、三引号都表示字符串,但是三引号可以表示多行的内容,而但单、双引号都不可以,三引号中可以使用双、单引号,双引号中可以使用单引号。
    
  7. is和==区别?

    # is: 判断的是两个变量之间的地址是否相同
    # ==: 判断的是两个变量的值是否相同
    
  8. python里如何实现tuple和list的转化?

    # 通过使用tuple()和list()关键字即可,需要将转化的数据类型使用tuple()和list()进行转化即可。
    
  9. 如何实现字符串name='老男孩'的反转?

    print(name[::-1])
    
    s = list(name)
    s.reverse()
    
    from functools import reduce
    reduce(lambda x,y:y+x, name)
    
  10. 两个set如何获取交集、并集、差集?

    # 交集 set3 = set1 | set2, 使用 |
    # 并集 set3 = set1 & set2, 使用 &
    # 差集 set3 = set1 - set2, 使用 -
    
  11. 那些情况下,y != x - (x-y)会成立?

    
    
  12. Python中如何拷贝一个对象?

    # 可以使用深拷贝和浅拷贝
    s1 = 'web'
    

深拷贝,不可变数据类型共用同一个地址,可变数据类型另开辟一个地址

import copy
s = copy.deepcopy(s1)


​ ```

  1. 简述赋值、浅拷贝、深拷贝的区别?

    # 赋值:是对对象的引用,也可以理解为为对象去一个别名
    # 浅拷贝:对于可变数据类型而言,是创建一个具有相同类型和值但id不同的对象
    # 深拷贝:不可变数据类型内存地址共用,可变数据类型新开辟一个空间
    
  2. pass的作用?

    # 空语句,表示什么都不做
    # 保证格式是完整,语意完整
    # 占位语句
    
  3. 阅读代码写结果。

    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)
    print(c)
    print(a)
    #[1,2,4,5,['b','c'], 5]
    #[1,2,4,5,['b','c']]
    #[1,2,4,5,['b','c']]
    
  4. 用python实现9*9乘法表。

    for i in range(1,10)
      for j in range(1,i+1)
        print(f'{j}*{i}={j*(i+1)} ')
      print('\n')
    
  5. 用Python显示一个斐波那契数列。

    def fib2(imax):
        t,a,b=0,0,1
        while t<imax:
            yield b
            a,b=b,a+b
            t+=1
            
    for i in fib2(10):
        print(i)
    
  6. 如何删除列表中重复的值?

    #使用set集合去掉重复值
    
  7. 一个大小为100G的文件etl_log.txt,要读取文件中的内容,写出具体过程代码?

    
    
  8. a = dict(zip(("a","b","c","d","e"),(1,2,3,4,5))) 请问a是什么?

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

    # 创建匿名函数的关键字
    
  10. *args和**kwarg作用?

    用来接收不确定个数的参数,*args通常用来接收不确定个数的非关键字参数,而**kwargs通常用来接收不确定个数的关键字参数
    
  11. 如何在函数中设置一个全局变量?

    # 在函数中使用global关键字定义变量
    
  12. filter、map、reduce的作用?

    # filter() 相当于过滤器的作用
        s=[1,2,3,5,6,8,9,10,25,12,30]
        # 筛选出3的倍数
        # 第一个参数为一个返回True或者False的函数,第二个参数为可迭代对象
        # 该函数把可迭代对象依次传入第一个函数,如果为True,则筛选
        d=filter(lambda x:True if x % 3 == 0 else False,s)
        print(list(d))
    # map()函数,
        # 第一个参数为函数,依次将后面的参数传给第一个函数,并执行函数
        # 如果有多个参数则,依次将后面的对应传给参数
        s=map(lambda x,y:x+y,range(10),range(10))
        print(list(s))
        ss=map(lambda x:x*x,range(10))
        print(list(ss))
    # reduce()函数
        from functools import reduce
        # 开始的时候将可迭代对象的第一个数和第二个数当成x和y
        # 然后将第一次函数的执行结果当成x,然后再传入一个数当成y
        # 再执行函数
        s=reduce(lambda x,y:x+y,range(101))
        print(s) # 相当于0+1+2+……+99+100		
    
  13. 什么是匿名函数?匿名函数有什么作用?

    # 匿名函数也是函数的一种缩写形式。
    # lambda x:x 该语句就是匿名函数
    

应用场景:常见的在filter,reduce以及map中使用。

```
  1. python递归的最大层数?

    # 1000左右
    
  2. 什么是迭代器?什么是可迭代对象?

    # 迭代器实现了iter()和next()方法,迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束
    
    # 迭代器对象实现了iter()方法
    
  3. 什么是生成器?

    # 生成器是迭代器的一种,一个函数调用时返回一个迭代器,这个函数就叫生成器。通常带有yield
    
  4. 什么是装饰器及应用场景?

    # 装饰器是一个以函数作为参数,并返回一个替换函数的可执行函数,是闭包的一种应用。通常用来给一个函数添加功能
    
  5. 什么是反射及应用场景?

    
    
  6. 写一个普通的装饰器?

    from functools import wraps
    def dec(func):
        @wraps(func)
        def inner(*args,**kwargs):
            result=[func(*args,**kwargs) for i in range(5)]
            return result
        return inner
        
    @dec
    def add(x,y):
        return x+y
    print(add(1,2))
    
  7. 写一个带参数的装饰器。

    def auth(argv):
        def wrapper(func):
        def inner():
                if argv:
                    print("加上了新的功能")
                    func()
                else:
                    func()
            return inner
        return wrapper
    
    @auth(True)
    def foo():
        print("被装饰函数")
    foo()
    
  8. 求结果:

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

    列表是可变数据类型,里面的值会和想象的有差别
    
  10. 看代码写结果

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

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

     如 10.3.9.12 转换规则为:
                10            00001010
                 3            00000011
                 9            00001001
                12            00001100
                
        再将以上二进制拼接起来计算十进制结果:00001010 00000011 00001001 00001100 = ?
    
    def ip2int(ip):
        nums=ip.split('.')
        # zfill()函数是补0
        to_bin=[bin(int(i))[2:].zfill(8) for i in nums]
        return int(''.join(to_bin),2)
    i=ip2int('127.0.0.1')
    print(i)
    
  13. 请查找一个目录下的所有文件(可能存在文件嵌套)。

    
    
  14. 求结果

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

    functools.wraps() 
    在装饰器中用过,如果不使用wraps,则原始函数的__name__和__doc__的值就会丢失
    functools.reduce() 
    
  16. re的match和search区别?

    # match()函数是在string的开始位置匹配,如果不匹配,则返回None
    # search()会扫描整个string查找匹配;也就是说match()只有在0位置匹配成功的话才有返回,
    
  17. 用python匹配HTMLtag的时候,<.>和<.?>有什么区别?

    第一个是贪婪模式,匹配尖括号内点后所有的。
    第二个是非贪婪模式,只匹配尖括号内点后满足条件的
    
    
  18. 如何生成一个随机数?

    import random
    
    print(random.int)
    
  19. super的作用?

    当子类中的方法与父类中的方法重名时,子类中的方法会覆盖父类中的方法,那么,如果我们想实现同时调用父类和子类中的同名方法,就需要使用到super()这个函数,用法为super().函数名()
    
  20. 双下划线和单下划线的区别?

    "单下划线" 开始的成员变量叫做保护变量,意思是只有类对象和子类对象自己能访问到这些变量;
    "双下划线" 开始的是私有成员,意思是只有类对象自己能访问,连子类对象也不能访问到这个数据。
    
  21. @staticmethod和@classmethod的去区别?

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

    import time
    import threading
    class Singleton(object):
        _instance_lock = threading.Lock()
    
        def __init__(self):
            time.sleep(1)
    
        @classmethod
        def instance(cls, *args, **kwargs):
            with Singleton._instance_lock:
                if not hasattr(Singleton, "_instance"):
                    Singleton._instance = Singleton(*args, **kwargs)
            return Singleton._instance
    
    
    def task(arg):
        obj = Singleton.instance()
        print(obj)
    for i in range(10):
        t = threading.Thread(target=task,args=[i,])
        t.start()
    time.sleep(20)
    obj = Singleton.instance()
    print(obj)
    
  23. 栈和队列的区别?

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

    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
    
    1,1,1
    1,2,1
    3,2,1
    
  25. 参考下面代码片段

    python
        class Context:
            pass
        
        with Content() as ctx:
            ctx.do_something()
        请在Context类下添加代码完成该类的实现
        
        
    class Context:
            def do.something():
    	print('ok')
        
        with Content() as ctx:
            ctx.do_something()
    

第二部分 可选题

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