Python 面试题(持续更新)

版权声明:转载请注明出处 https://blog.csdn.net/GG9527li/article/details/86699355

1.python实现列表去重的方法
实现方法:set集合元素唯一,无序;list集合元素可以重复,有序
所以可以先把列表转换为集合,然后再转换为列表

list = [11,12,13,12,11,15,16,13]
a = set(list)
[x for x in a]
print(a)

最后打印出的结果为

[11, 12, 13, 15, 16]

2.python GIL全局锁
GIL全称(Gloable Interpreter Lock),同一进程中假如有多个线程运行,一个线程在运行python程序的时候会霸占python解释器(加了一把锁即GIL),使该进程内的其他线程无法运行,等该线程运行完后其他线程才能运行。如果线程运行过程中遇到耗时操作,则解释器锁解开,使其他线程运行。所以在多线程中,线程的运行仍是有先后顺序的,并不是同时进行。python 的多线程实际上还是启动的一个线程运行,通过线程的切换实现多线程的调度。所以python的多线程实现并发测试 并不具有参考性。
3.Python2 python3 rang(100)的区别
python2 返回列表,python3 返回迭代器,更节约内存
4.__new__和__init__的区别
__init__是初始化方法,创建对象后默认被立刻调用,可以接受参数的传递。
1、__new__至少要有一个参数cls,代表当前类,此参数在实例化时由Python解释器自动识别
2、__new__必须要有返回值,返回实例化出来的实例,这点在自己实现__new__时要特别注意,可以return父类(通过super(当前类名, cls))__new__出来的实例,或者直接是object的__new__出来的实例
3、__init__有一个参数self,就是这个__new__返回的实例,__init__在__new__的基础上可以完成一些其它初始化的动作,__init__不需要返回值
5.列表和字典那个有序哪个无序
python2中字典无序,Python3中字典有序。
默认情况下Python的字典输出顺序是按照键的创建顺序。
字典的无序是指,不能人为重新排序。
比如说你按键值1,2,3,4的顺序创建的字典,只能由解析器按创建顺序,还是1,2,3,4的输出。
你无法控制它按照4,3,2,1的顺序输出,你也无法做到1,3,2,4的顺序。
而且这个输出顺序是也不是能真正按照创建顺序可以控的。
这里面有两个影响因素:
1)键值的哈希碰撞,hash(key1) == hash(key2)时,向字典里连续添加的这个两个键的顺序是不可以控制的,也是无法做到连续的,后来的键会按算法调整到其它位置。
列表是任意对象的有序集合
元祖任意对象的有序集合
字典任意对象的无序集合
所以列表是有序的,字典是无序的
6.uWSGI 和WSGI有什么区别
WSGI只是一种规范,一个约定,不是python的模块,全称 Web Server Gateway
uWSGI是实现了WSGI,uwsgi,http协议等的一个web服务器,即接收客户端的请求,转发响应程序
7.遍历一个文件路径,并打印所有文件名:

import os

def get_log_path_dict():
    log_path = "/home/logs"
    for root, dirs, files in os.walk(log_path):
        log_path_dict = dict()
        for dir_name in dirs:
            dir_path = os.path.join(root, dir_name)
            log_path = dir_path + "/public.log"
            log_path_dict[dir_name] = log_path
        return log_path_dict
print(get_log_path_dict())

8.在接口返回值值中遍历取出指定key 的value:

j = 0
    for i in range(0, len(assert_keys)):
        for key, value in responseJson.items():         #遍历key值
            if key == assert_keys[i]:
                if str(value) == assert_values[i]:              #判断返回值中key的value和断言的value是否一致
                    print("PASS")
                    j+=1
                else:
                    print("断言参数不在返回值中")
            else:
                if type(value) is dict:
                    re = assert_result(value,assert_keys)
                    if re is not default:
                        print(re)
    return j

python嵌套字典取值

allGuests = {'Alice': {'apples': 5, 'pretzels': {'12':{'beijing':456}}},
             'Bob': {'ham sandwiches': 3, 'apple': 2},
             'Carol': {'cups': 3, 'apple pies': 1}}
def dictget(dict1,obj,default=None):
    for k,v in dict1.items():
        if k == obj:
            print(v)
        else:
            if type(v) is dict:
                re=dictget(v,obj)
                if re is not default:
                    print(re)
dictget(allGuests,'beijing')

猜你喜欢

转载自blog.csdn.net/GG9527li/article/details/86699355